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.
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.
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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.