atarionline.pl Liczba losowa - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorZenon
      • CommentTime23 Aug 2022 11:08 zmieniony
       
      Taka zabawka na gąsienicach napędzana dwoma silnikami.
      Jazda w przód, tył, skręty, etc... sterowana procesorem AT89C4051.
      To nie ulega zmianie i dyskusji.
      I teraz. Start i zawsze zaczyna jazdę do przodu, po chwili skręca, po chwili staje, jedzie w tył etc.... etc.... porusza się w/g wpisanego programu.
      Ale... czy w kolejnym ruchu ma skręcić w prawo, czy lewo, czy pojechać w tył odbywać się ma na zasadzie losowości. Do tego, po ponownym uruchomieniu losowość ma być inna niż ta która była poprzednio. Słowem, za każdym razem zabawka ma jechać w/g innej losowo wybranej opcji.
      Chodzi zatem o to, jak wygenerować liczby losowe które stanowić będą o późniejszym wyborze opcji jazdy.
      Jakieś pomysły, podpowiedzi ? ? ?
      Chodzi też o to, by to nie była strzelista konstrukcja. Ma być tylko procesor który załatwia sprawę i sterownik driver do silników ewentualnie takie niewielkie cosik..... nie wiem co. To jest i działa, tylko zawsze jedzie w/g ustalonego programu, a ma być losowo.
      Przykłady kodu mogą być w konwencji 6502, dopasuję sobie procedurę do ATMELA. Chyba że ktoś biegły od razu do ATMELA to przysposobi.
      Na co może liczyć pomysłodawca. Obiecuję że Jego fotka wisieć będzie w głównej gablocie w LIDLU, by wszyscy wiedzieli że to ten..... :)
      Zapomniałem napisać że pojazd ma cztery czujniki wykrywające przeszkodę. Po wykryciu pojazd zmienia tor jazdy i też ma robić to losowo. Np, raz wycofie się do tyłu na odległość np. 10cm, innym razem w reakcji na ten sam czujnik wycofie się na inna odległość, po prostu dłużej nieco ma jechać do tyłu. Jak długo, właśnie wygenerowana liczba losowa ma o tym stanowić
      • 2: CommentAuthormono
      • CommentTime23 Aug 2022 11:08
       
      Zerknij na LFSR (Linear Feedback Shift Register) ->link<- - to jest najczęściej wykorzystywana technika generowania liczb losowych (np. sprzętowo w Atari bo to kilka bramek :D). W asemblerze to kilka linijek, w C to jedna linijka.
      • 3: CommentAuthorświęty
      • CommentTime23 Aug 2022 11:08
       
      Vicdoom używa takiego algorytmu:

      ; R = (65*R + 73)%256
      lda prnd
      asl @
      asl @
      asl @
      asl @
      asl @
      clc
      adc prnd
      adc #169
      sta prnd
      rts

      Natomiast jeśli masz kilka timerów, jakiś licznik input compare czy cokolwiek czy licznik free run to możesz to wykorzystać do generowania liczby losowej , robiąc jakieś operacje arytmetyczno logiczne na wartości tych rejestrów licznika
      • 4:
         
        CommentAuthorjhusak
      • CommentTime23 Aug 2022 11:08 zmieniony
       
      Puść przetwornik AC na dużej częstotliwości, takiej 1-2 MHz i sampluj coś - dzielnik, referencję, albo jeszcze coś. Będziesz miał szum na najmłodszych bitach, którego użyjesz jako ziarno do ogólnie znanych generatorów pseudolosowych.

      Hm. Tylko że w datasheecie nie jest nic napisane o przetwornikach AC.

      Co możesz do tego dodać? Kondensator na komparator (ładować go i mierzyć czas do zadziałania komparatora)?
      • 5:
         
        CommentAuthorgienekp
      • CommentTime23 Aug 2022 12:08
       
      Jeżeli masz jakiś wolny BIT wejściowy na którymś porcie wejściowym to zrób go niestabilnym, żeby łapał śmieci z powietrza. Czasem wystarczy na PCB poprowadzić dłuższą ścieżkę do nikąd. Czasem niepoprawnie dolepić kondensator z pseudo cewką, a czasem tranzystor z mega wzmocnieniem. Generalnie elektromagnetyczne RANDOMy z powierza chyba są najlepsze :)
      • 6: CommentAuthorBarman
      • CommentTime24 Aug 2022 13:08
       
      @Zenon Nie wiem jak to jest w Atmelach, ale w I8051 zaraz po starcie (włączeniu zasilania) uC odczytanie nieskonfigurowanego portu dawało przypadkową wartość. Inny sposób to generator szumu na 2-ch tranzystorkach który przepuszczasz przez detektor - podwajacz napiecia na germanowych diodach np AAP152, sygnał podajesz na klucz tranzystorowy a z klucza prosto na któryś bit portu w Atmelku. Odczytujesz bit, wstawiasz do bajtu na odpowiednie pozycje powtarzasz 8 razy i masz...
      • 7: CommentAuthorZenon
      • CommentTime24 Aug 2022 17:08
       
      Półciemność jasna.... to najgorsza przypadłość.
      Szukam po całym świecie a rozwiązanie jest w samym modeliku.
      Start, i jedzie do przodu. Ale naładował się kondensator i rozładowuje się poprzez fotoopór. Czas rozładowania zależny jest od oświetlenia, które w każdym pomieszczeniu i miejscu jest inne. Uruchomiony licznik w procesorze doliczy do iluś tam i jest losowość o którą mi chodzi. Potem losowość wyznaczana jest czasem który potrzebny jest do dojechania do przeszkody. To też jest niepowtarzalne.
      Hm.... działa. Trasa jazdy za każdym razem jest inna, niepowtarzalna i nieprzewidywalna. Dopracować szczegóły w programie i będzie jak trzeba.
      Dziękuję za podpowiedzi, każda dobra a wybrać trzeba było tylko jedną.
      Teraz dylemat. Kogo "powiesić" w LIDLU?
      • 8: CommentAuthormono
      • CommentTime24 Aug 2022 18:08
       
      Wylosować :D
      • 9:
         
        CommentAuthorjhusak
      • CommentTime24 Aug 2022 20:08 zmieniony
       
      Czyż to nie ja zaproponowałem ten kondensator? a Ty @Zenon dodałeś fotoopornik.

      Ale mnie nie wieszaj, nie zasłużyłem na śmierć.
      • 10:
         
        CommentAuthorBca
      • CommentTime25 Aug 2022 00:08
       
      pamiętam taką apke bankową, koleś wymyślił aby liczbę randomową czytać z ruchów myszki i to wymusił na użytkowniku i było i RANDOMIZE i RND !
      • 11:
         
        CommentAuthorjhusak
      • CommentTime25 Aug 2022 13:08
       
      Tak się przecież klucze generuje, np. BTC.