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:37)
Als Antwort auf Re: Interrupt 2, INT_2 von Joerg - 21.09.2010 11:48
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.
> >
> > */
> >

>
> Hallo Klaus,
>
> ich plane zurzeit auch den Einsatz des PCF8574 und die Benutzung des Interrupts.
> Daher interessiert mich das ganze. In dem Datenblatt steht,
> das bei jeder �nderung am Eingang (fallende oder steigende Flanke) ein Interrupt ausgelöst wird.
>
> Ich verstehe die folgende Anweisung und dessen Kommentar nicht:
>
> I2C_Write(&H0F)    'setzen für fallende Flanke = Interrupt
>
> Anhand des Befehls würde ich sagen,  du setzt die 4 unteren Bits auf High,
> damit Du sie über einen Taster nach Null ziehen kannst.
> Aber was hat das mit einen fallenden Interrupt zu tun?
>
> Ich würde mal das Demo für EXT_INT1 nehmen,
> und dort den Befehl Ext_IntDisable einbauen und sehen, wie es sich verhält.
>
> Grü�e Jörg
>
Hallo Jörg

Vier I/O's sind dann 1 und vier sind 0. Die 16 Tasten sind in 4 ViererGruppen
verschaltet. Egal welche der 16 Tasten betätigt wird, einer der High I/O's wird
beim Betätigen einer Taste nach Null gezogen und löst damit den Interrupt aus.
Anschlie�end mu� gescannt werden, welche Taste betätigt ist. Das habe ich in
dem Programm zu Demonstration des Ext_IntDisable weggelassen.

Für Int_1 mu� ich die Interrupt Leitung umlegen. Werde ich eventuell in den
nächsten Tagen probieren.

Klaus


    Antwort schreiben


Antworten: