PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallsgenerator über mehrere Ports?



Brantiko
22.12.2006, 22:07
Moin,
Ich habe an meinem ATmega16 vierundzwanzig LEDs angeschlossen und möchte diese nach und nach zum aufleuchten bringen. Alle 10s soll eine LED angehen, bis dann nach 240s alle LEDs an sind.
Den Programmcode hatte ich schon geschrieben, er hat aber nicht funktioniert.
Ich habe ich so rationalisiert bis folgende Zeilen übrig blieben:


Dim A As Integer

Porta = &B11111111 ' Alle LEDs aus (Invertierung wegen Transistor)
Portb = &B11111111
Portc = &B11111111
Portd = &B11111111

Do
A.3 = 0
Gosub Portbestimmung
Loop
End

Portbestimmung:
Portb.4 = A.1
Portb.3 = A.2
Portb.2 = A.3
....
Portd.1 = A.23
Portd.0.= A.24
Return


Eigentlich sollte jetzt die LED an Portb.2 an gehen.
Stattdessen gehen alle an.
Kann mir jemand sagen wo der fehler liegt?

Ich habe die Ports so bestimmt, damit ich mit einer Schleife später z.b alle LEDs durchlaufen lassen kann.

Gruss

Alex

Brantiko
22.12.2006, 22:53
Ich bins nochmal.
Besonders ärgerlich ist nun, dass die Invertierte Version meiner Idee funktioniert:
Nach dem Anschalten sind alle LEDs an und gehen nach und nach aus, bis alle 24 LEDs aus sind:



Do

Zufall:
For P = 1 to 24 '24 mal soll er es tun
N = Rnd(25) ' Zufallszahl 0-24
N = N+1 'Addiere 1 dazu um eine Null zu vermeiden
If A.N = 1 Then 'Ist die gewünschte LED schon aus?
Goto Zufall ' Wähle eine neue Zufallszahl
Else
A.N = 1 'Ansonsten schalte die LED aus
Gosub Portbestimmung
End IF
Wait 1 'Warte eine Sekunde
Next p

Loop
End


Um das ganze umzudrehen müsste ich doch nur ALLE LEDs am anfang Ausschalten und die LEDs EIN statt AUSschalten.
Das klappt aber nicht.

Weiß jemand warum?

alex

Brantiko
22.12.2006, 23:11
Selbst ist der Mann!

So funktioniert es:

Do

For P = 1 to 24
A.P = 1
Next P

Zufall:
For P = 1 to 24
N = Rnd(25)
N = N+1
If A.N = 0 Then
Goto Zufall
Else
A.N = 0
Gosub Portbestimmung
End IF
Wait 1
Next p

Nächtlichen gruss

Alex