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

Re: Interrupt 2, INT_2 Kategorie: Programmierung Basic (von Klaus - 21.09.2010 17:46)
Als Antwort auf Re: Interrupt 2, INT_2 von PeterS - 20.09.2010 22:59
Ich nutze:
C-Control Pro Mega32
> > Hallo
> >
> > Ich verwende die Mega32 für eine eigene Anwendung mit dem
> > Project Board und IDE1.71. (Nur auf einem Rechner läuft
> > überhaupt noch WindowsME, das nicht mt den neueren IDE Versionen
> > zusammen arbeiten will.)
> >
> > Die Tastatur(en) sind über PCF8574 angeschlossen. Durch
> > einen Tastendruck wird zunächst ein Interrupt ausgelöst, der das
> > Programm zum Erkennen der betätigten Taste startet.
> >
> > Damit über den I2C Bus andere Anwendungen ungestört bearbeitet
> > werden können, möchte ich den Interrupt unterbinden, wenn der Bus
> > belegt ist. Dazu wollte ich das Kommando Ext_IntDisable(2) benutzen.
> > Das scheint aber nicht zu funktionieren, wie das unten stehende
> > Programm zeigt. Ist der Interrupt 2 einmal aktiviert, kann er nicht
> > mehr abgeschaltet werden.
> >
> > Ist das Verhalten mit den neuen IDE Versionen anders?
> > Liegt ein Fehler vor?
> >
> > Klaus
> >
> >
> > Dim Text(30) As Char
> > Dim irqcnt As Byte
> >
> > Sub Zeiten()
> > Text ="doch anders"
> > irqcnt = Irq_GetCount(2)
> >
> > End Sub
> >
> > Sub main()
> > ' Definition Interrupt Eingang
> >  Port_DataDirBit(10,0)  'Interrupt Eingang
> >  Port_WriteBit(10,1)    'interner Pullup eingeschaltet
> >
> >  I2C_Init(I2C_100kHz)
> >  Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD19200)
> >  AbsDelay (50)
> >
> >  ' Interrupt definieren
> >  Irq_SetVect(2,Zeiten)
> >  Ext_IntEnable(2,0) 'Interrupt 2, fallende Flanke
> >
> > '  PCF8574 vorbereiten für externen Interrupt
> > '  Tastendruck erzeugt Interrupt
> >  I2C_Start()
> >  I2C_Write(70)      'eingestellte Adresse
> >  I2C_Write(&H0F)    'setzen für fallende Flanke = Interrupt
> >  I2C_Stop()
> >
> >  Text ="Text soll gleich bleiben"
> > ' externer Interrupt wird abgeschaltet
> >  Ext_IntDisable(2)
> >
> >     Do
> >         Serial_WriteText(0,Text)
> >         Serial_Write(0,&H0D)
> >         Serial_Write(0,&H0A)
> >     Loop While True
> > End Sub
> > /*
> > Ergebnis vor Druck auf Taste des Tastatur
> >
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > Text soll gleich bleiben
> > doch anders
> > doch anders
> > doch anders
> > doch anders
> >
> > Ext_IntDisable verhindert nicht, daÃ? der Sprung ins Interrupt
> > Programm "Zeiten" stattfindet.
> >
> > */
> >

>
> Gib doch bitte mit Msg_WriteText() einen String in Zeiten aus, ob die Interruptroutine
> mehrfach getriggert wird, oder ob es ein einmaliger glitch sein könnte, das der Interrupt
> aufgerufen wird.
>
> Gruss Peter

Hallo Peter

Wozu?

Egal wie oft der Kontakt schaltet, wenn mit Ext_IntDisable der Interrupt
abgeschaltet wird, spielt es doch keine Rolle mehr, wie oft er ausgelöst wird.

AuÃ?erdem glaube ich nach der Beschreibung des PCF8574 nicht, daÃ? durch
Tastenprellen mehrere Interrupts ausgelöst werden. Man mu� einen einmal
ausgelösten Interrupt des Bausteins erst durch erneutes Schreiben der
I/O's zurück setzen. Das geschieht im richtigen Programm durch Scannen
um zu erkennen, welche Taste betätigt ist.

Klaus


    Antwort schreiben


Antworten:

Re: Interrupt 2, INT_2 (von Klaus - 21.09.2010 22:30)
    Re: Interrupt 2, INT_2 (von Joerg - 22.09.2010 8:08)
        Re: Interrupt 2, INT_2 (von Klaus - 23.09.2010 20:23)
        Re: Interrupt 2, INT_2 (von PeterS - 22.09.2010 12:04)
            Re: Interrupt 2, INT_2 (von Torsten - 22.09.2010 18:33)
                Re: Interrupt 2, INT_2 (von PeterS - 22.09.2010 19:40)
                    Re: Interrupt 2, INT_2 (von Jörg - 22.09.2010 21:42)
                       Re: Interrupt 2, INT_2 (von PeterS - 23.09.2010 9:38)