Skocz do zawartości

Losowe wybieranie - bascom AVR


Kaytec

Pomocna odpowiedź

Jest funkcja RND.

Pozatym możesz sobie brać szumy za diodą zenera przy pomocy ADC zczytywać i to da ci jakieś losowe wyniki. Wynik zawsze będziesz miał w określonym przedziale wiec zrobic pseudo tabelke która bedzie przypisywała wartość pomiaru do długości odstępu.

Link do komentarza
Share on other sites

RND kawałek z helpa:

Uwaga! Liczby są generowane przez odpowiedni kod programu. Każdy restart systemu, powoduje, że sekwencja tych liczb będzie taka sama.

Znaczy to że np jak to będzie projekt kostki do gry, czyli zakres I = Rnd(5) to gra będzie zawsze taka sama po wyłączeniu i włączeniu urządzenia? Trochę bezsensu, mógłby ktoś przedstawić jakieś rozwiązanie?, to ma być tylko fragment projektu wiec nie może to zajmować nóżek procesora.

[ Dodano: 20 Paź 09 12:53 ]

W sumie mógłby być to ten patent z diodą i ADC

było by to tak?:


Config Adc = Single , Prescaler = Auto , Reference = Internal 
Dim ___rseed As Word
Dim I As word 

Start Adc

___rseed = Getadc(0)
I = Rnd(2500)


i tutaj pytanie co i jak podłączyć pod ADC

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ja zrobiłbym tak:

Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim losowa As Word
Dim I As word

Start Adc

'pobieranie wartości losowej z adc
losowa = Getadc(0)
losowa= losowa/250 'wartość wyssana z palca, dzielnik trzeba wybrać na podstawie wartości adc

waitms losowa 'czekaj przez ilość wylosowanych ms
portb.1 = 1 'po wylosowanym czasie na pb1 pojawi się jedynka

Aczkolwiek nie jestem pewien, czy dobrze Cię zrozumiałem 😉

edit: No i podepnij diodę zenera katodą do vcc, a anodą do adc0. Najlepiej by było, gdyby dioda miała napięcie przebicia około 1V, wtedy podczas dzielenia pomiaru tak ważne dla nas jedności nie zgubiłyby się nigdzie.

Link do komentarza
Share on other sites

BoBBy, ok ale dzięki instrukcji Rnd(2399) mamy dokładny przedział od 0ms do 2500ms. bo ona generuje liczby na podstawie jakieś innej podstawy i właśnie ta podstawa musi być losowa. Możecie wytłumaczyć jeszcze dokładnie o co kaman z tą diodą?

Link do komentarza
Share on other sites

Z tego co pamiętam to te szumy trzeba wzmocnić to raz, dwa, że to napięcie nie jest w zakresie 0-5V tylko powiedzmy 4,98-5V więc trzeba by było przesunąć ten zakres użyteczny na coś bardziej zbliżonego do 0-5V.

Na szybko znalazłem ten temat na elektrodzie.

Link do komentarza
Share on other sites

Ale poco cokolwiek wzmacniać?. Wydaje mi sie że nie do końca rozumicie idee rozwiązania z diodą zenera.

A więc 10-bitowy ADC ma rozdzielczosc przy napięciu odniesienia 5V 0.0049V.

Teraz jeśli szumy mieszczą się w 0.02V to jest faktycznie problem ale możemy przecież sprawdzić dodatkowo częstotliwość sygnałów 🙂. Bo przecież sygnał za diodą bedzie miał też swoje szumy 😃.

Ale dobra dla tych którym nie wsmak bawić sie w takie coś, faktycznie lepiej zrobić prosty wzmacniacz dwustopniowy na tranzystorach. Proste rozwiazanie, pare rezystorów dwa tranzystory i mamy generator szumów na pełnym paśmie akustycznym, z rozpiętością napięcia zależną od zastosowanego wzmocnienia.

Ale trzeba w takim wypadku uważać na samowzbudzanie się układu. Ale to taka ciekawostka 🙂.

Pozdrawiam

Edit, albo tak jak w rozwiązaniu tej konsoli do której linka dał Sabre.

T

Link do komentarza
Share on other sites

Kurde, problem jest taki że układ jest już wykonany i nie ma na nim miejsca na dodatkowe elementy. Myślałem żeby zapisywać wartość do eepromu ale wytrzyma to około 100000 cykli włączenia wyłączenia, urządzenie ma pracować około 50 razy dziennie i nie ma paść po 5ciu latach.

Link do komentarza
Share on other sites

A masz w urządzeniu zegar czasu rzeczywistego? albo jakiś inny zmienny sygnał? Może da się go wykorzystać do inicjalizacji generatora.

Zresztą nawet jeśli będziesz zapisywał do eeprom za każdym razem, powinno być ok:

5 lat x 365 dni x 50 = 91250 - więc powinno działać.

Możesz jeszcze zrobić inaczej - zapisywać do kilku komórek pamięci (cyklicznie). Wtedy zamiast 100k cykli możesz uzyskać np. 500k czy 1m i urządzenie 5 lat spokojnie podziała

Link do komentarza
Share on other sites

A sposób z licznikiem? Czy da się w bascomie odliczać np od zera do 25? Klikając guzik licznik by stawał i liczba była by od razu "przekazywana" do następnej pętli.

[ Dodano: 21 Paź 09 07:09 ]

Wpadłem na inny pomysł. W układzie mam zasilacz z wieloma uzwojeniami wtórnymi. Na jednym z nich jest sinusoida 5V(-2.5 +2.5). Można by to wykorzystać jako podstawę do ___rseed = Getadc(0) - nigdy nie wiadomo jaka byłą by wartość w momencie naciśniecia przycisku. Tylko teraz pytanie, jakie napięcie odniesienia dać do układu?

[ Dodano: 21 Paź 09 10:29 ]

A co myślicie o tym aby zostawić nogę ADC niepodłączoną? stan nieokreślony - przetwornik będzie szaleć i o to chodzi.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.