Ik ben nu ondertussen al een tijdje bezig in AVR C maar nu krijg ik het niet (goed) voor elkaar om een random nummer te genereren.
Het vreemde van alles is als ik de functie in de do while loop uitvoer dat ik wel een random nummer krijg en als ik de functie maar 1 keer aanroep niet.
random_number is uint8_t
buffer is char [20]
Vaste waarde:
srand(0x0505);
random_number = rand();
while(1)
{
// Check if on PINA only PINA7 is high
do
{
lcd_gotoline(1);
lcd_writetext("Value of password: ");
lcd_gotoline(2);
itoa(random_number, buffer, 10);
lcd_writetext(buffer);
}
while(PINA == 0x01);
Geen vaste waarde ( in loop ):
srand(0x0505);
while(1)
{
// Check if on PINA only PINA7 is high
do
{
random_number = rand();
lcd_gotoline(1);
lcd_writetext("Value of password: ");
lcd_gotoline(2);
itoa(random_number, buffer, 10);
lcd_writetext(buffer);
}
while(PINA == 0x01);
Groeten,
Jerry
[Bericht gewijzigd door Henry S. op (1%)]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
die source is echt heeeeel vaag zonder ubbcode
vaste waarde:
random_number is uint8_t
buffer is char [20]
srand(0x0505);
random_number = rand();
while(1)
{
// Check if on PINA only PINA7 is high
do
{
lcd_gotoline(1);
lcd_writetext("Value of password: ");
lcd_gotoline(2);
itoa(random_number, buffer, 10);
lcd_writetext(buffer);
}
while(PINA == 0x01);
onregelmatige waarde:
random_number is uint8_t
buffer is char [20]
srand(0x0505);
while(1)
{
// Check if on PINA only PINA7 is high
do
{
random_number = rand();
lcd_gotoline(1);
lcd_writetext("Value of password: ");
lcd_gotoline(2);
itoa(random_number, buffer, 10);
lcd_writetext(buffer);
}
while(PINA == 0x01);
in de laatste komt er als het goed is elke keer als pina7 hoog is een nieuwe waarde gecreeërd.(althans als dat geen commentaar regel was maar gewoon code)
als ik het goed snap moet alleen bij init(dus bij een reset) een random waarde creeërt worden.
waarom het zo niet werkt weet ik niet
* timmie gromt iets over streamwriter en VB
maar waarom in je init geen do loop integreren dan zou het moeten werken
init
//einde init
do
{
random_number = rand();
}
//rest van je code
of een do while loop:
db is boolean
//init code
db = 1;
//einde init
do
{
random_number = rand();
}
while(db != 0);
//rest van je code
ja ik weet dat men code een beetje ransig is maar het is even het beste wat ik kon verzinnen eigenlijk
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Helaas is de term AVR C te vaag. Er bestaat niet zoiets als AVR C. Uiteraard kan je code in C programmeren voor een AVR, maar er is zeker geen standaard. Er zijn diverse C compilers voor AVR met hun eigen library methodes en verschillen in syntax.
Er maar even vanuit gaande dat het dan AVRGCC betreft. Hoewel dat in de meeste gevallen ook op zal gaan voor andere compilers.
De rand() methode is een pseudo random nummer generator. Dat houdt in dat dezelfde seed altijd hetzelfde resultaat geeft. Zo staat het ook beschreven in de library reference http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ge2…
Een goed begin kan zijn om je laatste random nummer op te slaan en de eerst volgende keer als start seed te gebruiken. Echt echt random, d.w.z. onvoorspelbaar zal de reeks nooit zijn, maar je krijgt dan in elk geval vanaf het begin niet steeds dezelfde reeks.
Voor echt random zou je de ruis van de ADC kunnen gebruiken. Daar is onlangs nog een discussie over geweest.
Trucjes met do loops zijn alleen maar work arrounds en geen echte oplossing. De loops van timmy zijn daarbij ook nogal oneindig.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
maar waarom geeft het in de do loop dan een andere waarde dan als je hem maar een keer aanroept er buiten(dus eigelijk het verhaal van wafelijzer)?
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
De functie geeft wel elke aanroep een nieuwe waarde, maar de reeks is steeds hetzelfde. Het feit dat de loop loopt zolang PA0 hoog is kan daar nog een externe (random) factor aan toevoegen. Start je vanuit een init functie, dan begin je dus steeds met het eerste getal van die constante reeks. Dat getal is dus altijd hetzelfde zolang de seed hetzelfde blijft.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide