Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Random generator u CCS C koristeci funkcije srand() i rand()

[es] :: Elektronika :: Mikrokontroleri :: Random generator u CCS C koristeci funkcije srand() i rand()

[ Pregleda: 2576 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Seme
Miroslav Bozic
Nis
Elektronski fakultet
Nis, Zajecar

Član broj: 43158
Poruke: 390
*.dynamic.isp.telekom.rs.

Sajt: www.ebuyelektronika.co.cc


+5 Profil

icon Random generator u CCS C koristeci funkcije srand() i rand()02.11.2011. u 22:06 - pre 151 meseci
Zdravo,
za potrebe projekta razvijam Motion controller sa PIC18F4431. Plan je da napravim kontroler koji ce moci da kontrolise kretanje DC motora po brzini, momentu i poziciji i omogucim simultano kretanje dva motora sa dva drajvera tako sto ce jedan od drajvera biti MASTER a drugi SLAVE. MASTERU ce se zadati parametri kretanja kao sto su brzina, momenat na vratilu i pozicija, a zadatak SLAVE drajvera je da sto vernije kopira kretanje MASTERA. Veza drajvera sa PC aplikacijom za monitoring ili nekom embeded aplikacijom je putem RS485 magistrale. Na ovu magistralu moguce je povezati vise drajvera. Veza izmedju dva drajvera radi ostvarivanja MASTER - SLAVE simultanog kretanja je putem I2C magistrale. Pozicija, brzina i ubrzanje estimira se sa enkodera HEDS 5540 koji je povezan da radi u kvadraturi. Ok ovo je ukratak uvod u prijekat, vreme je da se vratim na naslov teme, srad() i rand().

Naime s obzirom da je na RS485 half duplex magistralu moguce povezati vise drajvera zelim da napravim univerzalni algoritam za identifikaciju drajvera. PC softver ce u ovom slucaju biti MASTER uredjaj a drajveri SLAVE - ovi. Prilikom svakog paljenja adresa SLAVE uredjaja se menja. PC softver salje tkz. HELLO_ALL paket. Ovim paketom PC kaze svim SLAVE uredjajima (drajverima) da se identifikuju. Ideja je da kada SLAVE uredjaji prime HELLO_ALL paket generisu random broj u opsegu od 1 - 255, i posalju taj broj kao predlog za svoju adresu. Da ne bi doslo do kolizije tj. da vise SLAVE uredjaja predje u mod za slanje u istom trenutku predvideo sam pauzu pre slanja od N milisekundi, gde N predstavlja prethodno generisani radnom broj. Kada PC primi predlog adrese on odgovara potvrdno ili paketom za promenu adrese ukoliko je predlozena adresa zauzeta. Ukoliko se desi da dodje do kolizije, CRC primljenog paketa ce biti los tako da ce nakon isteka od 255ms sto je maksimalno vreme koje je potrebno da se svi slave uredjaji jave, PC ponovo poslati HELLO_ALL, cime ce SLAVE uredjaji koji nisu inicijalizovali svoju adresu ponovo generistai random broj i dati predlog itd. dok se svi uredjaji ne identifikuju.

Ono sto je problem u ovom trenutku je da svi SLAVE uredjaji imaju isti source code i da prilikom paljenja generisu isti random broj u zavisnosti od zadatog seed - a. Problem je sto funkcije srand() i rand() generisu pseudo random broj tako da ce pri paljenju uvek biti isti prvi broj. Moje pitalje je da li neko zna kako da generisem pravi random broj koji nece biti isti pri svakom paljenju?

Nadam se da sam bio jasan sta radim i sta mi predstavlja problem. Svaka sugestija ce mi koristiti.

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.41.*

Sajt: mysql.rs


+2377 Profil

icon Re: Random generator u CCS C koristeci funkcije srand() i rand()02.11.2011. u 23:36 - pre 151 meseci
Ja sam "pravi" random resavao tako sto sam seed-ovo random sa ADC-a a na ADC sam vezivao parce zice, dakle ili na adc pin vezes komad zice ili napravis jedan track na pcb-u od adc porta min 3cm duzine.. procitas ADC i to uzmes kao seed za rand... dalje picis klasicno, svi ce dobijati razlicite random nizove posto ce svi imati razlicite seed-ove
 
Odgovor na temu

m51
tu i tamo

Član broj: 244167
Poruke: 73
*.dynamic.isp.telekom.rs.



Profil

icon Re: Random generator u CCS C koristeci funkcije srand() i rand()03.11.2011. u 05:45 - pre 151 meseci
Ovo je u stvari pitanje za autora.

Projekat je interesantan , pa me zanima da li je komercijalni ili za potrebe fakulteta.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Random generator u CCS C koristeci funkcije srand() i rand()03.11.2011. u 09:34 - pre 151 meseci
Xmm, kakav je to motion controller kod koga se nikad ne zna koji je koji slave?

Nego, zasto ne bi implementirao CAN? jeste da je nesto skuiplji u hardveru, ali taj hardver se sam bakce kolizijom? Ovo je ocigledno vise teoretska stvar nego prakticna.

Sto se originalnog pitanja tice, Bogdan ti je objasnio kako da "posejes" random generator. Jedna od veoma cesto koriscenih tehnika na vecini uC-a koji imaju ADC.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

Seme
Miroslav Bozic
Nis
Elektronski fakultet
Nis, Zajecar

Član broj: 43158
Poruke: 390
*.amres.ac.rs.

Sajt: www.ebuyelektronika.co.cc


+5 Profil

icon Re: Random generator u CCS C koristeci funkcije srand() i rand()03.11.2011. u 11:39 - pre 151 meseci
Resio sam problem na nacin koji je bogdan kecman predlozio.

m51:
projekat radim za fakultet. Tacnije drajver je deo projekta na kome radi nekoliko nas.

ZAS011:
Zna se koji je koji slave na osnovu konfiguracije drajvera. Nakon inicijalizacije adrese svaki drajver salje svoja podesavanja masteru. Pri prvom paljenju drajver salje fabricka podesavanja (ona koja sam postavio). Nakon toga USER moze da konfigurise drajver kako zeli pomocu master programa. Parametri se pamte u EEPROM mikrokontrolera. Po sledecem paljenju menja se samo adresa drajvera sve ostalo ostaje isto. Nisam implementirao CAN zato sto ce drajver biti postavljen na vec napravljenu maketu koja nema CAN. Kada sve bude gotovo program na maketi ce upravljati radom drajvera.

Hvala na odgovorima.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Random generator u CCS C koristeci funkcije srand() i rand()03.11.2011. u 19:32 - pre 151 meseci
Bez ljutnje, al' sto sebi komplikujes? Sta ce ti slave sa nekom random adresom kad ces ionako na posletku da mu pridodelis jednu. Svaki drajver svoju adresu i nemas glavobolje oko citanja konfiguracije da bi saznao koji je koji, osim ako profesori nisu resili da vam malko zakomplikuju :)
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

Seme
Miroslav Bozic
Nis
Elektronski fakultet
Nis, Zajecar

Član broj: 43158
Poruke: 390
*.dynamic.isp.telekom.rs.

Sajt: www.ebuyelektronika.co.cc


+5 Profil

icon Re: Random generator u CCS C koristeci funkcije srand() i rand()03.11.2011. u 20:24 - pre 151 meseci
Ma kakva ljutnja, :) taman posla. Kontam sta pricas, ali zelim da napravim univerzalnu stvar, tacnije vec sam je napravio. Ovo sto sam napravio radi odlicno sa randum generatorom koji je predlozen u ovoj temi. Napravio sam algoritam koji ce i kasnije da mi koristi u narednim projektima. Napravio sam dinamicki buffer za serisku komunikaciju koji moze da se siri koliko memorija mikrokontrolera dozvoljava, osmislio komunikacioni protokol sa CRC8 algorritmom za generisanje kontrolnog bajta. Sada radim na paketima koji ce se slati izmedju mastera i slejvova (mislim na osnovne pakete za konfigurisanje). Zatim cu sve to da spakujem u posebnu biblioteku zajedno sa opisom protokola i da ga u narednim projektim includ - ujem ukoliko imam potrebe. Mogao sam da napravim identifikaciju tako sto se jedan po jedan drajver kaci na PC softver i tako ozivljava u ciklusima. Prvi koji se zakaci dobije adresu i zapamti je. Zatim drugi itd. Hocu da mogu da nakacim koliko god zelim drajvera bez nekog posebnog procesa identifikacije. Jednostavno plug&play.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Random generator u CCS C koristeci funkcije srand() i rand()

[ Pregleda: 2576 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.