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 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
     
    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
     
    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 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
     
    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
     
    @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
     
    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
     
    Wylosować :D
    • 9:
       
      CommentAuthorjhusak
    • CommentTime24 Aug 2022 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
     
    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
     
    Tak się przecież klucze generuje, np. BTC.