YaNnIk
07.01.2010, 15:19
Hi Leute..
Also es geht (wieder) um eine Beleuchtungsteuerung..
Und zwar soll folgendes passieren :
1. An Int0 liegt das Signal eines PWM empfängers an.
2. Sobald das signal an Int0 wechselt wird die ISR "Messen" ausgelöst. Diese startet Timer0 und sobald das signal wieder wechselt wird der Timer gestoppt. So habe ich dann einen Wert zwischen 62,5 und 125..
Bis hierhin schonmal den Code :
$regfile = "m644def.dat"
$crystal = 16000000
Config Porta = Output
Config Portc = Output
Config Portd.2 = Input
Dim Reading As Bit
Dim Empf_wert As Byte
Reading = 0
Config Timer0 = Timer , Prescale = 256
Enable Timer0
Stop Timer0
On Timer0 Error
Config Int0 = Change
On Int0 Messen
Enable Interrupts
Enable Int0
Do
Loop
End
Messen:
If Reading = 0 Then
Start Timer0
Reading = 1
Else
Stop Timer0
Empf_wert = Timer0
Timer0 = 0
Reading = 0
End If
Return
Error:
Stop Timer0
Return
So, nun will ich in der ISR "Messen" zwei verschiedene "Sprünge auswählen"
Undzwar geht es um folgendes : Wenn der Wert < 95 ist soll ein Programm ablaufen und wenn der wert > 95 ist soll ein ANDERES programm ablaufen..
Also ich will im Prinzip durch den im Interrrupt ermittelten Wert zwei unterschiedliche Programme starten.. Das erste Programm soll einfach sein, das alle LEDs auf High gesetzt werden und das zweite soll ein Lauflicht werden..
Da kommt aber noch ein Problem hinzu.. Undzwar wird das Signal am Empfänger ja mehrere mal in der Sekunde gesendet und jedes mal die ISR "Messen" ausgelöst.. Das Problem ist das nur, das wenn der Wert > 95 ist, würde das Lauftlicht-Programm jedes mal neu starten.. Das soll aber nciht passieren, es soll an der Stelle weiterlaufen wo es aufgehört hat..
Leider weiß ich noch nicht so ganz wie ich das realisieren soll..
Hoffentlich könnt ihr mir helfen..
Danke im Vorraus ;-)
Mfg Yannik
Also es geht (wieder) um eine Beleuchtungsteuerung..
Und zwar soll folgendes passieren :
1. An Int0 liegt das Signal eines PWM empfängers an.
2. Sobald das signal an Int0 wechselt wird die ISR "Messen" ausgelöst. Diese startet Timer0 und sobald das signal wieder wechselt wird der Timer gestoppt. So habe ich dann einen Wert zwischen 62,5 und 125..
Bis hierhin schonmal den Code :
$regfile = "m644def.dat"
$crystal = 16000000
Config Porta = Output
Config Portc = Output
Config Portd.2 = Input
Dim Reading As Bit
Dim Empf_wert As Byte
Reading = 0
Config Timer0 = Timer , Prescale = 256
Enable Timer0
Stop Timer0
On Timer0 Error
Config Int0 = Change
On Int0 Messen
Enable Interrupts
Enable Int0
Do
Loop
End
Messen:
If Reading = 0 Then
Start Timer0
Reading = 1
Else
Stop Timer0
Empf_wert = Timer0
Timer0 = 0
Reading = 0
End If
Return
Error:
Stop Timer0
Return
So, nun will ich in der ISR "Messen" zwei verschiedene "Sprünge auswählen"
Undzwar geht es um folgendes : Wenn der Wert < 95 ist soll ein Programm ablaufen und wenn der wert > 95 ist soll ein ANDERES programm ablaufen..
Also ich will im Prinzip durch den im Interrrupt ermittelten Wert zwei unterschiedliche Programme starten.. Das erste Programm soll einfach sein, das alle LEDs auf High gesetzt werden und das zweite soll ein Lauflicht werden..
Da kommt aber noch ein Problem hinzu.. Undzwar wird das Signal am Empfänger ja mehrere mal in der Sekunde gesendet und jedes mal die ISR "Messen" ausgelöst.. Das Problem ist das nur, das wenn der Wert > 95 ist, würde das Lauftlicht-Programm jedes mal neu starten.. Das soll aber nciht passieren, es soll an der Stelle weiterlaufen wo es aufgehört hat..
Leider weiß ich noch nicht so ganz wie ich das realisieren soll..
Hoffentlich könnt ihr mir helfen..
Danke im Vorraus ;-)
Mfg Yannik