Forum: Mikrocontroller und Digitale Elektronik TWI mit Interrupts


von Martin Haller (Gast)


Lesenswert?

Hi,

seit ein paar Wochen beschaeftige ich mich mit dem Atmel ATMega8
Controller. Ich moechte zwei dieser Controller ueber TWI/I2C mit
einander sprechen lassen.

Dazu verwende ich die I2C Routinen aus der AVRLib. Nachdem ich
keinerlei Kommunikation zustande gebracht hatte, habe ich testweise
einen 24C64 (kleiner 64kB EEPROM) ueber I2C angebunden. Dabei habe ich
festgestellt, dass die interrupt-losen Funktionen (i2cMasterSendNI()
bzw. i2cMasterReceive()) einwandfrei arbeiten, nur die
Interrupt-Versionen funktionieren nicht.

Ich habe testweise einen rprintf Befehl in den Interrupt-Handler (die
SIGNAL() Routine in i2c.c) eingebaut und dabei festgestellt, dass nie
ein Interrupt ausgeloest wird.

i2cInit() wird aber zu anfangs aufgerufen und darin wird sowohl der
TWI-Interrupt enabled (sbi(TWCR, TWIE);) als auch global Interrupts
eingeschaltet (sei();).

Hat jemand einen Tip, warum keine Interrupts ausgeloest werden ?

Vielen Dank,

Gruss Martin

von Hagen (Gast)


Lesenswert?

probier mal

#include <signal.h>

in deiner Main.c aus.

Gruß Hagen

von Martin Haller (Gast)


Lesenswert?

Hi Hagen,

nein, hilft leider nichts. i2c.c included es auch schon:

#include <avr/signal.h>
#include <avr/interrupt.h>

Daran lags leider nicht. Ich hab zwischenzeitlich nochmal ueberprueft,
ob ich ueberhaupt Interrupts ausloesen kann - das funktioniert
prinzipiell, denn ein Handler fuer den Overflow Interrupt vom Timer
wird aufgerufen. Es scheint also vermutlich ein TWI-spezifisches
Problem zu sein.

Tappe weiterhin im Dunkeln...

Weitere Ideen ?

von Peter D. (peda)


Lesenswert?

Ohne C-Quelltext (Dateianhang) keine Hilfe möglich.


Zu oft wurde behauptet, man hätte irgendeinen XY-Code völlig
unverändert genommen und später stellt sich das dann als Lüge heraus.


Auch ist es nicht nett, wenn der Helfende eine XY-Lib erst suchen muß,
ganz abgesehen davon, daß es bestimmt mehrere Versionen der Lib gibt.


Peter

von Martin Haller (Gast)


Angehängte Dateien:

Lesenswert?

Hi Peter,

"Ohne C-Quelltext (Dateianhang) keine Hilfe möglich.

Zu oft wurde behauptet, man hätte irgendeinen XY-Code völlig
unverändert genommen und später stellt sich das dann als Lüge heraus.

Auch ist es nicht nett, wenn der Helfende eine XY-Lib erst suchen muß,
ganz abgesehen davon, daß es bestimmt mehrere Versionen der Lib
gibt."

eine Library-Versionsangabe habe ich leider bei der AVRlib nicht
gefunden. Es gibt aber eine Versionsangabe in die i2c.* Files:
Verion 0.9.

Ich habe mal die relvanten Files und das Makefile zusammengepackt und
angehaengt. In den Files der AVRlib habe ich folgende Dinge
veraendert:

1) Die Zeile "#include "uart2.h"" ein einen #ifdef Block gepackt:

        #ifdef I2C_DEBUG
        #include "uart2.h"
        #endif

2) Im Interrupt-Handler eine Debug-Zeile eingefuegt:

    // Debug-Code: Wird der Interrupt-Handler ueberhaupt
    // ausgefuehrt ?
    rprintf("Interrupt-Handler called\r\n");

Die Details bzgl. der I2C-Calls stehen in der main().

Danke schon mal !

Gruss Martin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.