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ć
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.
; 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
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)?
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 :)
@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...
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?