Interruptproblem Kategorie: Sonstige Hardware (von Andreas Pantle - 14.04.2009 17:54) | |
| |
Hallo Zusammen, ich habe an einem C-Control Mega 32 drei Drehimpulsgeber angeschlossen. Jeweils A der drei Geber gehen auf die drei Interrupt Eingänge des C-Control. Jetzt ist es so, dass nach dem Einschalten alle drei funktionieren (so scheint es jedenfalls). Sobald ich einen der drei Drehe (richtung scheint egal zu sein) dann geht ein anderer nicht mehr. Also der Interrupt wird nicht ausgelöst. Ich bin relativ am Anfang der programmierung. Kann sein, dass ich ein Denkfehler habe. Ich habe die aktuelle Beta als auch die letzte Release der IDE getestet. Macht keinen Unterschied. Hier ist mein Testcode: 'Drehgeber Test '2009_04_14 'LED an PC4 #define LED1_Ein Port_WriteBit(15,True) #define LED1_Aus Port_WriteBit(15,False) 'Schalter Eingang #define SW1 Port_ReadBit(8) #define SW1_A Port_ReadBit(26) #define SW1_B Port_ReadBit(28) #define SW2_A Port_ReadBit(27) #define SW2_B Port_ReadBit(29) #define SW3_A Port_ReadBit(10) #define SW3_B Port_ReadBit(30) Dim zaehler1, zaehler2, zaehler3 As Integer Sub main() zaehler1 = 10 zaehler2 = 20 zaehler3 = 30 Port_DataDirBit(8,PORT_IN) Port_DataDirBit(26,PORT_IN) 'SW_A Schalter auf Eingang Port_DataDirBit(28,PORT_IN) 'SW_B Schalter auf Eingang Port_DataDirBit(27,PORT_IN) 'SW_A Schalter auf Eingang Port_DataDirBit(29,PORT_IN) 'SW_B Schalter auf Eingang Port_DataDirBit(10,PORT_IN) 'SW_A Schalter auf Eingang Port_DataDirBit(30,PORT_IN) 'SW_B Schalter auf Eingang Port_DataDirBit(15,PORT_OUT) 'LED auf Ausgang Irq_SetVect(INT_0, Dreh1) Ext_IntEnable(INT_0,1) Irq_SetVect(INT_1, Dreh2) Ext_IntEnable(INT_1,1) Irq_SetVect(INT_2, Dreh3) Ext_IntEnable(INT_2,1) Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD9600) Do While True /* '1. Schaltertest If SW1 Then LED1_Aus Else LED1_Ein End If */ End While End Sub Sub Dreh1() Dim irqcnt1 As Integer Ext_IntDisable(INT_0) 'INT2 sperren 'Thread_Delay(10) If SW1_B <> SW1_A Then zaehler1 = zaehler1 + 1 Else zaehler1 = zaehler1 - 1 End If Serial_Write(0,zaehler1) Ext_IntEnable(INT_0,1) '// INT1 freigeben irqcnt1=Irq_GetCount(INT_0) End Sub Sub Dreh2() Dim irqcnt2 As Integer Ext_IntDisable(INT_1) 'INT2 sperren 'Thread_Delay(10) If SW2_B <> SW2_A Then zaehler2 = zaehler2 + 1 Else zaehler2 = zaehler2 - 1 End If Serial_Write(0,zaehler2) Ext_IntEnable(INT_1,1) '// INT1 freigeben irqcnt2=Irq_GetCount(INT_1) End Sub Sub Dreh3() Dim irqcnt3 As Integer Ext_IntDisable(INT_2) 'INT2 sperren 'Thread_Delay(10) If SW3_B <> SW3_A Then zaehler3 = zaehler3 + 1 Else zaehler3 = zaehler3 - 1 End If Serial_Write(0,zaehler3) Ext_IntEnable(INT_2,1) '// INT1 freigeben irqcnt3=Irq_GetCount(INT_2) End Sub | |
Antwort schreiben Antworten: Re: Interruptproblem (von PeterS - 15.04.2009 10:22) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum