PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer soll bei jedem überlauf +1 machen



hardstyleroxx
26.11.2005, 16:01
Ich möchte mir gerade ein kleines Lauflicht mit einem Timer Programmieren.

Der Timer1 ist so eingestellt das er jede 0.5s überläuft.
Bei jedem Überlauf soll er nun einen Wert um +1 erhöhen bis er bei 8 angekommen ist.
So kann ich immer bei jedem Wert eine LED Leuchten lassen und habe ein Lauflicht.

If wert = 0
then LED1 = 1
if wert = 1
then LED2 = 1
usw...


ontimer1:
incr wert
if wert = 8 then
wert = 0
end if


Blos was muss ich als wert nehmen? Ich habe mal "dim wert as byte" versucht aber das klappt irgentwie nicht.

Danke schonmal für die Hilfe.

Marco78
26.11.2005, 16:09
Blos was muss ich als wert nehmen? Ich habe mal "dim wert as byte" versucht aber das klappt irgentwie nicht.
Sollte aber.


If wert = 0
then LED1 = 1
if wert = 1
then LED2 = 1
usw...
Hast du die End IF da auch alle geschrieben?

Einfacher wäre:
If Wert = 0 Then LED1 = 1
If Wert = 1 Then .....

Da brauchst du kein End If

hardstyleroxx
26.11.2005, 17:31
hmm dann liegt der Fehler sicher woanders. Ich werde nochmal ein bischen rumprobieren und wenn ich nicht drauf komme melde ich mich nochmal.

Marco78
26.11.2005, 17:57
Wenn du dich nochmal meldest, dann am besten den ganzen Code schreiben.
Hast du die Interrupts denn aktiviert?

hardstyleroxx
27.11.2005, 13:47
Es funktioniert nun einigermaßen. Ein Großer Fehler ist noch vorhanden den ich einfach nicht finden kann.

Das Lauflicht soll in folgender Reihenfolge ablaufen:

LED_gr an
0.5s
LED_gr aus
LED_ge an
0.5s
LED_ge aus
LED_ro an
0.5s
LED_ro aus
LED_gr an
usw.

Blos leuchtet bei meinem Programm LED_ro fast dauerhaft. Sie geht nach zufall mal an und mal aus hab ich das Gefühl.




$regfile = M8def.dat
$crystal = 3686400

Ddrd = &B11100000 'PD7, PD6, PD5 als Ausgänge festlegen, rest Eingang


Dim Zler As Byte


On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64 'Timertakt = Crystal / 64
Enable Timer1 'Timer1 einschalten
Enable Interrupts 'Interrupts Global einschalten
Const Timervorgabe = 36736 'Hat mir rnAVR so berechnet


'###Deklarationen###

Led_gr Alias Portd.7 'LED Grün
Led_ge Alias Portd.6 'LED Gelb
Led_ro Alias Portd.5 'LED Rot



'###Hauptschleife###

Do
If Zler = 1 Or Zler = 4 Or Zler = 7 Then
Set Led_gr
Else
Reset Led_gr


If Zler = 2 Or Zler = 5 Or Zler = 8 Then
Set Led_ge
Else
Reset Led_ge


If Zler = 3 Or Zler = 6 Or Zler = 9 Then
Set Led_ro
Else
Reset Led_ro



End If
End If
End If
Loop
End

'###OnTimer1###

Ontimer1:
Timer1 = Timervorgabe
Incr Zler 'Zler + 1
If Zler = 10 Then 'Wenn Zler = 9 dann...
Zler = 1 '...Zler = 0
End If

Return

linux_80
27.11.2005, 14:02
Hallo,

probier mal die End Ifs nach jedem If-Block zu schreiben, nicht alle am ende, denn jetzt werden die in Abhängigkeit zur verherigen ausgeführt, was evtl. Probleme macht.

hardstyleroxx
27.11.2005, 14:12
wow nun gehts!! Vielen dank :D

Auf was man alles achten muss ist echt nicht mehr schön ... -_-

EDIT: Aber warum bitte fängt der von hhinten an? Erst Leuchtet Led_ro dann Led_ge dann Led_gr

Marco78
27.11.2005, 16:02
Auf was man alles achten muss ist echt nicht mehr schön ... -_-


Einfacher wäre:
If Wert = 0 Then LED1 = 1
If Wert = 1 Then .....


Noch einfacher wäre es hier unter Bascom nach Lauflicht zu suchen.
Das Thema hatten wir schonmal. Da wurde nur dem Port eine andere Zahl zugeordnet. Wenn du es nicht findest such ich es nachher mal raus.