Ich wollte mal eine Steuerung für Taschenlampen bauen.
Diese soll nur einen Taster haben, über den der Zustand gesteuert wird.
Es gibt 4 Zustände :
1. Aus (µc im Powerdown)
2. Led über PWM auf ca. 40% (Wert: 100/255)
3. Led über PWM auf ca. 70% (Wert: 188/255)
4. Led über PWM auf ca. 100% (Wert: 255/255)
Momentan steckt alles auf dem myavr Testboard mit nem Atmega8 als µc.
Taster hängt an PortD.2
Led hängt am PWM-Port OCA1 also PortB.1
Das Problem ist, dass das Aufwecken aus dem Powerdown nur über den Interrupt bei Low Level geht und leider nicht wenn ich den Interrupt bei Falling auslösen lasse.
Mein Code, den ich bis jetzt habe hänge ich mal an. Bei Druck auf den Taster wird der Leuchtzustand willkürlich durcheinander verändert, aber nicht so wie es sein sollte.
Ich hoffe ihr könnt mir vielleicht helfen und ein Weg zeigen, wie es richtig funktioniert.
$regfile = "m8def.dat"
$crystal = 3686400
Config Portd = Input
Config Portb = Output
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Enable Timer1
Start Timer1
Dim W As Word
Dim P As Byte
Dim T As Byte
Config Int0 = Low Level
Enable Interrupts
Enable Int0
On Int0 On_int0
Portd.2 = 1
P = 0
W = 0
T = 0
Main:
Do
If T = 1 And P = 0 Then
P = 1
T = 0
End If
If T = 1 And P = 1 Then
P = 2
T = 0
End If
If T = 1 And P = 2 Then
P = 3
T = 0
End If
If T = 1 And P = 3 Then
P = 0
T = 0
End If
If P = 1 Then W = 188
If P = 2 Then W = 100
If P = 3 Then Powerdown
If P = 0 Then W = 255
Compare1a = W
Loop
On_int0:
T = 1
Return
Alles anzeigen