Hallo,
habe hier ein kleines I2c-Problem, wahrscheinlich nur ein kleiner Fehler den ich übersehe, wäre nett wenn jemand mal drüberherschauen könnte, zuerst mal mein Code:
die twi.c :das Hauptprogramm sieht folgendermaßen aus:Code:char twi_wait(void) { while (!(TWCR & (1<<TWINT))); uart_putc(TWSR & 0xF8); return (TWSR & 0xF8); } void twi_start(void) { TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); } void twi_stop(void) { TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); } char twi_send_byte(char wert, char addr) { char status,error=0; twi_start(); status=twi_wait(); if((status==0x08) || (status==0x10)) { TWDR = (addr & 0xFE); TWCR = (1<<TWINT) | (1<<TWEN); status=twi_wait(); if((status==0x18) || (status==0x20)) { TWDR=wert; TWCR = (1<<TWINT) | (1<<TWEN); status=twi_wait(); if((status==0x28) || (status==0x30)) { error=0; } else { error=status; error=0x30; } } else { error=status; error=0x31; } twi_stop(); } else { TWCR=0b10000100; error=status; error=0x32; } return error; }
ausschnitt aus der main.c :Das Problem ist nun, das ich die adresse schicke, und der status dann weder 0x2Code:... Twcr = &B00000100 Twsr = 0 Twbr = 72 sei() tmp=twi_send_byte(wert, 0x40) ...noch 0x30 ist, also in der Variablen error steht der wert 0x31.
Ansteuern möchte ich damit einen PCF8574. also ich möchte einige Status-LEDs, die an ihm angeschlossen sind an oder aus machen.
Sieht jemand grade den Fehler?
MFG!







Zitieren

Lesezeichen