Hallo,
ich habe ein Programm zur Ansteuerung eines mit LEDs bestückten Schildes für einen Mega8 erstellt.
In diesem Programm zähle ich mit einem Timerüberlauf eine Variable hoch, mit der ich dann über Select Case verschiedene Muster ansteuere (Lauflicht usw.)
Zur Zeit ändere ich die Lichtmuster mit einem BCD-Codierschalter und möchte nun auf die Bedienung mit einer IR-Fernbedienung mit RC5 Code umstellen.
Das Problem ist nun, das mir der Befehl Getrc5 natürlich das Programm extrem ausbremst und die Abfolge der LED Ansteuerung unansehnlich macht.
Meine Frage ist nun, ob es eine Möglichkeit gibt Getrc5 einzubinden unohne das des Programm ausgebremst wird?
Ich habe es schon versucht mit dem Int0 Interrupt (an dem auch der IR-Sensor angeschlossen ist), leider ohne Erfolg.
Code mit dem Versuch habe ich mal angehängt. Unabhängig von meinem Code bin ich natürlich auch an anderen Lösungsansätzen interessiert.
Danke schon einmal für eure Hilfe
Code:$regfile = "m8def.dat" $crystal = 8000000 Config POrtB.1 = Output Config PORTB.2 = Output Config portb.3 = Output Config portb.4 = Output Config portb.5 = Output Config portC.0 = Output Config portC.1 = Output Config PORTD.5 = Input 'BCD 1 Config PORTD.6 = Input 'BCD 2 Config PORTD.7 = Input 'BCD 4 Config PORTB.0 = Input 'BCD 8 Config PORTD.2 = Input 'Eingang Int0 für RC5 Auswertng PortD.2 = 1 'PullUp einschalten Config Timer2 = TIMER , PRESCALE = 1024 'Timer2 zur erzeugung der Blink- und Blitzsteuerwelle Config RC5 = PinD.2 Config INT0 = CHANGE On Int0 Int0_isr On OvF2 Tim2_isr Enable Interrupts Enable Timer2 Enable INT0 Dim dbzaehler as word 'Zähler für Blitzer Dim Ausgangsbyte1 as byte 'Zusammenfassung der Ausgänge Dim BCDstellung as Byte 'Byte für Stellund ses BCD Schalters Dim Fernbedienung as Bit 'Merker für eingegangenes Fernbedienungssignal Dim Adresse as Byte 'Adresswariable von Fernbedienung Dim Komando as Byte 'Komandovariable von Fernbedienung Dim SteuerZeichen as Byte 'Variable für empfangendes Fernbedienungszeichen Const Timerwert = 177 'Konstante für Voreinstellung Timerregister Timer0 Timer2 = Timerwert 'Timerregister voreinstellen 'Vergabe von Aliasnamen Ring1 Alias PortB.1 Ring1A Alias PortB.2 Ring2 Alias PortB.3 Ring2A Alias PortB.4 Ring3 Alias PortB.5 Ring3A Alias portC.0 Ring4 Alias portC.1 BCD1 Alias PIND.5 BCD2 Alias PIND.6 BCD4 Alias PIND.7 BCD8 Alias PINB.0 'Voreinstellen von Variablen dbZaehler = 0 Fernbedienung = 0 Ausgangsbyte1 = &B00000000 Do If Fernbedienung = 1 then GetRC5(Adresse , Komando) If Adresse = 30 then SteuerZeichen = Komando and &B01111111 Fernbedienung = 0 Enable INT0 End IF End IF BCDstellung.0 = BCD1 BCDstellung.1 = BCD2 BCDstellung.2 = BCD4 BCDstellung.3 = BCD8 If BCDstellung = 0 then Ausgangsbyte1 = 0 End IF '****************************************************************************** If BCDstellung = 1 or Steuerzeichen = 1 then 'Lauflicht bis alle Ringe an, dann 2x alle blinken und wieder von vorne Select Case dbzaehler Case 30 : Ausgangsbyte1 = &B00000011 Case 60 : Ausgangsbyte1 = &B00001111 Case 90 : Ausgangsbyte1 = &B00111111 Case 120 : Ausgangsbyte1 = &B01111111 Case 150 : Ausgangsbyte1 = &B00000000 Case 180 : Ausgangsbyte1 = &B01111111 Case 210 : Ausgangsbyte1 = &B00000000 Case 240 : Ausgangsbyte1 = &B01111111 Case 270 : Ausgangsbyte1 = &B00000000 End SELECT 'Rücksetzbedingung für den DB-Timer If dbzaehler => 300 then dbzaehler = 0 End If End IF '****************************************************************************** '****************************************************************************** If BCDstellung = 2 then 'Alle Ringe blinken Select Case dbzaehler Case 30 : Ausgangsbyte1 = &B01111111 Case 90 : Ausgangsbyte1 = &B00000000 End SELECT 'Rücksetzbedingung für den DB-Timer If dbzaehler => 120 then dbzaehler = 0 End If End IF 'Ausgangssignale ansteuern Ring1 = Ausgangsbyte1.0 Ring1A = Ausgangsbyte1.1 Ring2 = Ausgangsbyte1.2 Ring2A = Ausgangsbyte1.3 Ring3 = Ausgangsbyte1.4 Ring3A = Ausgangsbyte1.5 Ring4 = Ausgangsbyte1.6 Loop 'Interruptrotiene Timer2 Overflow Tim2_isr: Timer2 = Timerwert 'Timerregister voreinstellen incr dbzaehler Return Int0_isr: Disable Int0 Fernbedienung = 1 Return End
Lesezeichen