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

Re: Interruptproblem Kategorie: Sonstige Hardware (von PeterS - 15.04.2009 10:22)
Als Antwort auf Interruptproblem von Andreas Pantle - 14.04.2009 17:54


Hi,

ich sehe hier zumindest nichts grundlegend falsches. Man muÃ? aber nicht den eigenen Interrupt sperren,
sondern kann ihn weiterlaufen lassen. Was passiert denn genau? Kommt immer nur derselbe Interrupt,
oder kommt nur einmal ein Interrupt und dann nie wieder? Hast Du mal Breakpoints gesetzt um das zu
verifizieren?

Gruss Peter

> 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: