Hallo alle,
mein I2C-Logger legt eine bestehende, funktionierende I2C-Verbindung lahm, sobald er (heiß oder kalt) zugeschaltet wird. Die I2C-Verbindung ist mein erstes, der Sniffer mein zweites I2C-Projekt - ich habe also s..wenig Erfahrung.
Die bestehende Verbindung geht von einem BMA020-Steckbrettaufbau an eine Experimentierplatine mit mega168/20 MHz und LCD, Aufbau siehe hier. Dieser Aufbau zeigt sauber, glaubwürdig und zuverlässig Messwerte und Statusbytes am Display, die Modi "messen" und "Stati melden" lassen sich problemlos schalten. Dieser Aufbau und die unten beschriebene Platine sind getrennt mit Akkublocks versorgt, GND ist verbunden (testweise auch offen mit gleichem Misserfolg).
Der Logger stammt aus dieser Bauanleitung, realisiert mit tiny2313/16 MHz auf einer Experimentierplatine. Ports des USI und des Software-UART wurde dem t2313 angepasst. Die Ausgabe erfolgt über eine USB-Verbindung mit FTDI-Chip, Software-UART über PB1, 115k2 Bd, Terminal v1.9b - by Br@y. Die FIFO beim tiny musste ich von 256 Byte auf 64 verkleinern. Der Anmeldestring wird sauber übertragen. Vermutlich kneifen diese Zeilen:
Code:
Auszug aus definitionen vor main.h
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define SCL SBIT( PORTB, 7 )
#define SCL_DDR SBIT( DDRB, 7 )
#define SCL_PIN SBIT( PINB, 7 )
#define SDA SBIT( PORTB, 5 )
#define SDA_DDR SBIT( DDRB, 5 )
#define SDA_PIN SBIT( PINB, 5 )
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Auszug aus I2Cs.c
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init_i2c( void )
{
SCL = 1;
SCL_DDR = 1; // force busy waiting
SDA = 1;
SDA_DDR = 0; // listen only, no ACK, no data
USICR = 1<<USIWM1^1<<USIWM0; // I2C, no counter
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Beim Start mit zugeschaltetem Logger kann ich nicht mal ein einziges Statusbyte lesen - der BMA-Messaufbau verweigert offensichtlich den Lesevorgang eines Bytes und bleibt hängen. Bei laufenden BMA-Messaufbau wird eine laufende Messung nach Zustecken von SCL oder SDA des Tiny13 unterbrochen - es werden im Display keine Zeichen mehr angezeigt (die Anzeigezeile "Werte" wird bei mir stets zwischen zwei Messvorgängen gelöscht).
Kann bitte jemand helfen? Danke im Voraus.
Lesezeichen