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
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 ?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.