Hallo, ich möchte zum ersten Mal den I2C-Bus mit einem ATmega48 in Betrieb nehmen. Allerdings klappts bei mir noch ganz und gar nicht. Es geht darum, einen Drucksensor auszulesen, der einen Wert mit 15-Bit-Auflösung sendet. Die Adresse des Drucksensors ist "1111 000". Ich möchte den Drucksensor nur auslesen. void I2C() { unsigned int low_byte = 0; unsigned int high_byte = 0; unsigned int value = 0; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); //TWSTA = TWI Start Condition Bit while (!(TWCR & (1<<TWINT))); TWDR = (0xF1); //Slave-Adresse 7 bit lang: 1111 000, 1 am Ende für Master Receiver Mode TWCR = (1<<TWINT) | (1<<TWEN); //Adresse und "Read" senden ---> hier in der while-Schleife bleibt der Debugger hänger: while (!(TWCR & (1<<TWINT))); //warten bis TWINT-Flag gesetzt wurde high_byte = TWDR; while (!(TWCR & (1<<TWINT))); //warten bis TWINT-Flag gesetzt wurde low_byte = TWDR; TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Stopbit senden while (TWCR & (1<<TWINT)); //warten bis Stopbit gesendet wurde value = ((256*high_byte) + low_byte); } Irgendwie finde ich im Internet kein Beispiel, wo mal ein Sensor ausgelesen wird. Evtl. kennt ihr ja ein Beispiel, an dem ich mich orientieren könnte?!
Hallo, Dein Debugger bleibt wahrscheinlich hängen, weil dein Sensor nicht weiss, was er tun soll (Der Sensor gibt kein ACK zurück und blockiert so den Bus). Ich hab das Datenblatt nicht, kenne das aber von AD Wandlern. Du musst dem Sensor im Master_Transmitter Mode mitteilen, welches Register du lesen willst. Dann folgt ein Repeated Start mit der Slave Adresse + Read Kommando. Dann kannst du erst was auslesen. Gruß, Jens
Debugger? Läuft das Ganze auf der realen Hardware oder auf dem PC (ATMEL-IDE, Simulator)? Wenn auf Simulator, dann ist die Lösung einfach: Gehe an die reale Hardware, denn der Simulator unterstützt die I/O-Peripherie des AVR nur sehr rudimentär. Das TWI-Interface wird z.B. nicht unterstützt. Bernhard
ich debugge das mit Hilfe des AVR DRagon, also direkt die Hardware. Hab mir jetzt aber die Application Notes von der Atmel-Seite runtergeladen und versuche es lieber damit...
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.