Gast
#433770
Hallo! Ich habe ein Problem bei der Verbingung zw. meinen AtMega32 und dem Temperatursensor TC74. Bein schon einige Variaten durchgegangen, doch leider noch zu keinen Ergebnis gekommen. Offenbar habe ich etwas übersehen. Ziel ist es, die vom TC74 gemessene Temperatur zum MC zu übertragen. Bitte helft mir weiter. Untenstehend der verwendete Code. Bin auch schon verschiedene Varianten der einzelnen Flags durchgegangen (Transmitter, Receiver) doch leider ohne Ergebnis. Der Start am Bus wird gesendet und mit einem ACK bestätigt. Beim nächsten Schritt, nämlich dem finden des TC74 hängt das ganze. Habe auch schon eine Schleife mit allen möglichen Adressen darüber laufen lassen, bekomme jedoch immmer ein NACK zurück. Der Bauteil wird also definitiv nicht gefunden. Danke für Eure Hilfe. #define F_CPU 10000000 #include <avr/io.h> int START = 0x08; int MT_SLA_ACK = 0x40; int MT_DATA_ACK = 0x50; int temperaturgemessen; int main(void) { //TWI Start TWBR = 0b10; TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Sendet Start while(!(TWCR & (1<<TWINT))) //Wartet bis Startbit übertragen ; if ((TWSR & 0xF8) != START) //Statusregister wird überprüft Error(); TWDR = 0b10011010; //SLA_W bzw. SLA_R wird geladen TWCR =(1<<TWINT) | (1<<TWEN); //Übertragung vorbereiten while(!(TWCR & (1<<TWINT))) //Wartet bis Übertragung abgeschlossen ; if((TWSR & 0xF8) != MT_SLA_ACK) //Übertragung wird überprüft Error(); TWCR = (1<<TWINT) | (1<<TWEN); //Datenübertragung starten while (!(TWCR & (1<<TWINT))) //Wartet bis Datenübertragung zu ende ; if((TWSR & 0xF8) != MT_DATA_ACK) //Datenübertragung erfolgt? Error(); temperaturgemessen = TWDR; //Data wird geladen TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Übertragung abgeschlossen //TWI Ende return 0; }