trotzdem vielen dank
kennt sich vielleicht einer der C-Programmierer unter euch mit dem TWI aus?
ich schildere nochmal kurz die momentane Lage:
der Aktivierungs-TWI-Code des Masters:
der Code, den der Master ausführt, um Daten zu senden:Code:TWAR = 0xFD; //TWI-Addresse des Masters festlegen TWSR &= 0b11111100; //Prescaler auf 1 setzen, Bit 1 und 0 auf 0 TWBR = 0xC; //Bitrate auf 12 setzen sei(); //Interrupts global aktivieren
Slave-Init-Code:Code:TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); //START senden while (!(TWCR & (1<<TWINT))); //warten bis TWINT gesetzt //wenn START gesendet, dann "1" an den PC senden if ((TWSR & 0xF8) != 0x08) USART_transmit_string("1"); //Addresse des Slaves angeben TWDR = 0xFE; TWCR = (1<<TWINT) | (1<<TWEN); //Addresse senden while (!(TWCR & (1<<TWINT))); //warten bis TWINT gesetzt //wenn erfolgreich, 2 an PC senden if ((TWSR & 0xF8) != 0x18) USART_transmit_string("2"); //0 ins Datenregister schreiben TWDR = 0x0; //Daten senden TWCR = (1<<TWINT) | (1<<TWEN); //warten bis TWINT gesetzt while (!(TWCR & (1<<TWINT))); //wenn erfolgreich, dann 3 an PC senden if ((TWSR & 0xF8) != 0x28) USART_transmit_string("3"); //STOP senden TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
dann soll bei einem Interrupt, eine LED eingeschaltet werdenCode:TWAR = 0xFE; TWCR = 0b11000101; TWBR = 0xC; TWSR &= 0b11111100; sei();
nun zu den Symptomen:
1 wird nie gesendet
(der Rest nur, wenn der Slave-µC nicht mit dem Master verbunden ist)
der Rest wird auch nie gesendet
die LED beim Slave geht nie an
wenn der SlaveµC angeschlossen ist, bleibt der Master in der dritten Schleife "hängen", wenn der Slave nicht angeschlossen ist, bleibt der Master in keiner der drei Schleifen hängen, allerdings werden bei beiden Varianten nur NACKs empfangen, der Slave antwortet also nie
weiß jemand vielleicht, wo der Fehler zu suchen ist?
Edit: siehe Symptome







Zitieren
Lesezeichen