Hallo zusammen,
ich arbeite gerade an einem RC5-ferngesteuerten Schalter der auch per Taster bedient werden kann.
Den Taster will ich per Interrupt (an PinB.0=PCINT0) auswerten. Leider funktioniert die Interruptfunktion überhaupt nicht, ich habe schon zahlreiche Varianten ausprobiert. Momentan bin ich beim angehängten Code (noch ohne RC5 und anderes).
Kann mir jemand sagen, was ich bei der Interruptauswertung falsch mache???
Ich habe mich zuletzt an diesem Thread orientiert http://www.avr-praxis.de/forum/showthread.php?t=304&highlight=pcint, was mich aber auch nicht wirklich weiterbringt.
Eigentlich kann es doch nicht schwierig sein...?
Danke
Timo
ich arbeite gerade an einem RC5-ferngesteuerten Schalter der auch per Taster bedient werden kann.
Den Taster will ich per Interrupt (an PinB.0=PCINT0) auswerten. Leider funktioniert die Interruptfunktion überhaupt nicht, ich habe schon zahlreiche Varianten ausprobiert. Momentan bin ich beim angehängten Code (noch ohne RC5 und anderes).
Kann mir jemand sagen, was ich bei der Interruptauswertung falsch mache???
Code:
'
' Name: Audio-Switch
' Rev: 1.0
' Hardware: 'tr026-2009' ab R01
'
' Date: 12.08.09
'
' Description:
' - Umschaltung von in Summe fünf Audioquellen
' - Umschalten kann über Tastendruck oder per IR RC5-Code vorgenonmmen werden
' - externer I²C-Bus kann ebenfalls Steuerung übernehmen
'
' Belegung µC
' PB0 Input Taster MOSI Pin 5
' PB1 MISO Pin 6
' PB2 Input IR-Sig SCK Pin 7
' PB3 BI SDA Pin 2
' PB4 Input SCL Pin 3
' PB5 RST Pin 1
' ------------------------- µC-Setup ------------------------------------------
$regfile = "ATtiny45.DAT"
$crystal = 1000000
$hwstack = 32
$swstack = 8
$framesize = 24
' ------------------------- µC-Setup Ende--------------------------------------
' ------------------------- Konfiguration -------------------------------------
Config Pinb.0 = Input ' Taster
Config Pinb.2 = Input ' IR-Empfänger (extern)
Config Sda = Portb.3 ' I²C-Anschluss festlegen
Config Scl = Portb.4
Const Max4550_adr = 152
Dim Kanal As Byte
Config Int0 = Falling 'Interrupt konfigurieren und einstellen
' Gimsk = &B00100000
Pcmsk = &B00000001
On Int0 Isr_pcint0 ' wenn Taste gedückt wid, löst INT aus
' ------------------------- Konfiguration Ende --------------------------------
'
' ------------------------- Subroutinen Deklaration ---------------------------
Declare Sub Schalten ' (byval Kanal As Byte)
' ------------------------- Subroutinen Deklaration Ende ----------------------
' ------------------------------------------------------------------------------
' ------------------------- START ----------------------------------------------
Kanal = 1
Wait 1
Call Schalten ' Initialisierung auf Defaultwerte (Kanal und LED)
Enable Int0
Enable Interrupts
Do 'Endlosschleife Hauptprogramm
Loop
End
' ------------------------- Subroutinen --------------------------------------
Sub Schalten ' (byval Kanal As Byte)
Local Commandwort As Byte
Local Datawort As Byte
If Kanal > 4 Then Kanal = 0 'auf den gültigen Bereich einschränken
Commandwort = &B00000101 ' , COM1B, COM1A sind ausgewählt
Datawort = &B00000001
Shift Datawort , Left , Kanal ' den richtigen Kanal durch Schiebbefehle auswählen
I2cstart
I2cwbyte Max4550_adr
I2cwbyte Commandwort
I2cwbyte Datawort
I2cstop
Commandwort = &B00010000
Datawort = &HFF - Datawort ' weil LED mit inverser Logik arbeiten
I2cstart
I2cwbyte Max4550_adr
I2cwbyte Commandwort
I2cwbyte Datawort
I2cstop
End Sub
' ------------------------------------------------------------------------------
' ------------------------- Interrupt Service Routine --------------------------
Isr_pcint0: ' Interrupt da Taster an PB0 gedrückt wurde
Kanal = Kanal + 1
Call Schalten
Waitms 500 ' um zu Entprellen
Return
Ich habe mich zuletzt an diesem Thread orientiert http://www.avr-praxis.de/forum/showthread.php?t=304&highlight=pcint, was mich aber auch nicht wirklich weiterbringt.
Eigentlich kann es doch nicht schwierig sein...?
Danke
Timo