Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 7 mar 2025, o 01:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 24 ] 
Autor Wiadomość
PostNapisane: 4 kwi 2020, o 09:21 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Cześć.
Oglądałem ostatnio poradnik Pana Mirka o grze w strzelanie w kowbojów i zaciekawiło mnie działanie randomizacji w uC.
Napisałem prosty kod wzorując się na poradniku
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I Diody zapalają się losowo. Jednak po każdym resetowaniu uC losowość zapalanych diod jest zawsze taka sama. Czy to jest normalne, że za każdym razem gdy zresetuję uC, to zawsze diody będą się włączać w tej samej kolejności? da się to jakoś zmienić?
Do randomizacji użyłem funkcji rand(), która jest już " wbudowana " w uC. Chciałem zbudować sobie prostą kostkę do gier planszowych, która będzie wyświetlała za pomocą diod odpowiednią liczbę od 0 do 6.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 09:47 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Możesz skorzystać z srand() a jako punkt startowy generatora użyć np liczby zwiększanej co obieg pętli while.

Wysłane ze srajfona

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 10:17 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2595
Pomógł: 128

Użyj odczytu z wiszącego ADC to 'startowania' RANDa. Będzie większa losowość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 11:10 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

michy, możesz to jaśniej dla mnie napisać?:)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 11:12 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2595
Pomógł: 128

Niepodłączona nóżka od wejścia ADC zbiera szumy - wykorzystuj to do zainicjalizowania RND.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 11:19 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

zrobię jeszcze tak, że trzeba będzie zainicjować losowanie i je wyłączyć, to powinno pomóc w losowości. Dzięki za podpowiedzi :)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 11:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Skoro to kostka to pewnie i jakiś przycisk będzie. Dodaj do obliczeń jakaś zależność od momentu włączenia procka do wciśnięcia przycisku (mierz czas). Oczywiście wykonaj na samym początku programu jakieś wstępne losowanie bez pokazywania wyniku.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 11:49 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2595
Pomógł: 128

Albo jak dlugo go trzymał :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 13:04 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

dobre pomysły. Nie wiem czy moje umiejętności mi na to pozwolą, ale zobaczę co mi z tego wyjdzie :)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 13:19 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2595
Pomógł: 128

Dlatego łatwiej chyba będzie z ADC :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 13:38 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

micky chodzi Ci o to, że jeśli nóżka ADC jest nie podłączona i zbiera różne wartości, to mam zastąpić funkcję rand() na ADC?
Proszę jeszcze po podpowiedź jak mam sprawić, aby np w case1 w kodzie uruchomić dwie diody na raz. Mam na to taki pomysł, ale cały czas mi wyskakuje błąd
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 13:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Prawie dobrze :)
PORTA |= (1<<PA1) | (1<<PA2)

_________________
http://www.sylwekkuna.com



Ostatnio edytowano 4 kwi 2020, o 13:45 przez SylwekK, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 13:45 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

wojciechgorzolka napisał(a):
micky chodzi Ci o to, że jeśli nóżka ADC jest nie podłączona i zbiera różne wartości, to mam zastąpić funkcję rand() na ADC?
Proszę jeszcze po podpowiedź jak mam sprawić, aby np w case1 w kodzie uruchomić dwie diody na raz. Mam na to taki pomysł, ale cały czas mi wyskakuje błąd
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wojtku, ale co oznacza zapis?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 1 minucie ]

SylwekK był szybszy ;-) tylko mały błędzik mu się wkradł...

------------------------ [ Dodano po: 2 minutach ]

No proszę i już wyedytował i poprawił :-)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 14:00 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

teraz działa :)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 14:14 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2595
Pomógł: 128

Możesz użyć ADC, zamiast rand, ale ja miałem na myśli srand(ADC), żeby 'zainicjować' generator.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 14:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Cytuj:
SylwekK był szybszy tylko mały błędzik mu się wkradł...

Pisanie na telefonie programów to nie jest to co lubię najbardziej :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 14:36 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

SylwekK napisał(a):
Cytuj:
SylwekK był szybszy tylko mały błędzik mu się wkradł...

Pisanie na telefonie programów to nie jest to co lubię najbardziej :)

Ale ja doskonale wiem, że to literówka była.
Chciałem tylko ostrzec Wojtka żeby potem nie było: "przepisałem jak napisałeś i nie działa" ;-)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 16:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2019
Posty: 145
Pomógł: 37

Wejście ADC jest mało losowe. Lepszą metodą jest event generowany przez użytkownika. Ciekawą opcją jest Arduino Entropy Library która korzysta z nieregularności zegara µC. Jeśli urządzenie jest odłączane od prądu interesującą opcją jest wykorzystanie SRAM. Pamięć musi być, oczywiście, niezainicjowana, więc przy małej pamięci w AVR/dużym wykorzystaniu pamięci posiew należy wyliczyć w startup code najpóźniej w sekcji .init3



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 18:44 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

chłopaki jesteście niemożliwi. To forum jest ekstra. Tylu ludzi pomaga :). Mam pytanie o funkcję srand(ADC); Co to jest? jest jakaś informacja na ten temat w literaturze Atnel? Pytam, bo nie spotkałem się jeszcze z tą funkcją.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2020, o 19:15 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

wojciechgorzolka napisał(a):
chłopaki jesteście niemożliwi. To forum jest ekstra. Tylu ludzi pomaga :). Mam pytanie o funkcję srand(ADC); Co to jest? jest jakaś informacja na ten temat w literaturze Atnel? Pytam, bo nie spotkałem się jeszcze z tą funkcją.

Możesz znaleźć na swoim dysku twardym. Jeśli zainstalowałeś standardowo to tu:
[url]file:///C:/Program%20Files%20(x86)/Atmel/AVR%20Tools/AVR%20Toolchain/doc/avr-libc/avr-libc-user-manual/group__avr__stdlib.html#gacceff9dc95bb3c5562dc9e61fc3d9075[/url]

------------------------ [ Dodano po: 8 minutach ]

A co to właściwie robi? Inicjuje ten generator pseudolosowy.
Jeśli jako parametr wpiszesz tam liczbę uint to będzie generował jakiś ciąg liczb. Jeśli wpiszesz inną liczbę to inny.
Dla tego samego uint'a będzie zawsze taki sam ciąg. Domyślnie jeśli w ogóle nie użyjesz tej procedury to domyślnie jest 1
I dlatego zawsze dostawałeś te same wartości i diody zapalały się w takiej samej kolejności.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2020, o 19:04 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Taki prosty kod napisałem dotyczący elektronicznej kostki. Działa, tak więc biorę się za projekt samej kostki :)



Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2020, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

A tak dla relaksu jest jeszcze inna prosta metoda na kostkę :)
Wystarczy uruchomić w pętli odtwarzanie po kolei wszystkimich kombinacji, a klawiszem zatrzymujesz aktualny stan. Ważne żeby to odtwarzanie odbywało się z dość wysoką częstotliwością, np. 1kHz albo jeszcze wyższą. Obejdzie się bez rnd, a gwarantuje Ci, że i tak nie da się kostki oszukać :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2020, o 21:44 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

Taki szkielet sobie wymyśliłem na kostkę, żeby za dużo kodu nie było
Jeden timer kręcący się w kółko jedna tablica.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2020, o 21:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27361
Lokalizacja: Szczecin
Pomógł: 1042

JarekB napisał(a):
uint8_t losuj =  TCNT0%5;

No proszę - w końcu w ruch idzie opcja "MIODULO" jak to ja ją nazywam ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 24 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO