Zeitschleife mit Variablen

#1305261
Lesenswert?

Hallo Zusammen,
Ich programmiere gerade den Atmega 8 mit Bascom mit einem selbstgebauten 
seriellen Programmieradapter.
Ich bin noch recht unerfahren im Programmieren und habe deshalb eine 
Frage: Wie mache ich das, dass ich eine Schleife habe die z.B. 4 Leds 
abwechselnd einschaltet bzw auslässt :
Do
waitms 2
Portd.0 = A    // LED 1 wenn A = 1 led an
Waitms 2
Portd.0 = 0
Portd.1 = B    // LED 2
Waitms 2
Portd.1 = 0
Portd.2 = C    // LED 3
Waitms 2
Portd.2 = 0
Portd.3 = D    // LED 4
Waitms 2
Portd.3 = 0
Loop

Und das nebenbei ein anderes Programm läuft das die Variablen ABCD 
verändert um so ein Muster oder ein Lauflicht zu erzeugen! Allerdings 
sollte der Schaltvorgang mit den LEDs so schnell gehen das man kein 
Flackern oder dergleichen sieht! Im Grunde ist das nur kleines 
Multiplexing da ich mir demnächst einmal einen LED Cube programmieren 
will. Ich habe schon im Internet gesucht und Teillösungen gefunden, wie 
Unterprogramme oder der Gleichen. Ich will das auch versthen und nicht 
ein komplettes fertiges Programm für das Multiplexen. Oder geht das noch 
einfacher und ich mache mir da zu viel Aufwand?
Leider bin ich gerade noch am Einarbeiten in die Programmiersprache 
daher solch eine Frage


MFG Fabian
#1305732
Lesenswert?

Vielen Dank!
habe das nun auch umgesetzt und wollte jetzt mal fragen ob das auch no 
kürzer geht, wiel die Outputs X und y die die leds dann auf ground 
ziehen mittels transistor jedesmal ein aus und so  zu schalten, 
verbraucht eine Menge an Flashspeicher
Code :
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim X As Byte
Dim Y As Byte

Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portc.5 = Output
Config Portc.4 = Output

Config Timer0 = Timer , Prescale = 256
Enable Timer0
On Timer0 Timer0_isr

Enable Interrupts


Do
X = 1
A = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
A = 0
X = 1
B = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
B = 0
X = 1
C = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
C = 0
X = 1
D = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
D = 0

Loop
End




Timer0_isr:
 Portc.5 = X
 Portc.4 = Y
 Portd.0 = A
 Waitms 2
 Portd.0 = 0
 Portd.1 = B
 Waitms 2
 Portd.1 = 0
 Portd.2 = C
 Waitms 2
 Portd.2 = 0
 Portd.3 = D
 Waitms 2
 Portd.3 = 0
 Portc.5 = 0
 Portc.4 = 0



Return

Sry wegen der Länge!
Gruß Fabian
#1305837
Lesenswert?

@  Fabian Kluge (fabian1)

>habe das nun auch umgesetzt und wollte jetzt mal fragen ob das auch no
>kürzer geht, wiel die Outputs X und y die die leds dann auf ground

Logisch, man nehme ein Array. Und wie bereits gesagt, du musst dich mal 
grundlegend über Interrupts informieren. So geht das nicht.

Und lange Codes gehören in den Anhang. Augen auf! Steht direkt hier 
drüber!

Siehe Anhang. Ist NICHT getestet, es fehlt auch noch die Initialisierung 
des Array, hab ich auf die Schnelle im Handbuch von BASCOM nicht 
gefunden.

MFG
Falk
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren