Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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)