Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > 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 > > > > > > <basic> > > > 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. > > > > > > */ > > > </basic> > > > > 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