PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TWI/I²C-Master Probleme



logbuch
23.09.2010, 20:26
Hallo Roboternetz,

Dass es Haufenweise Themen zu diesem Thema gibt, weiß ich, allerdings konnte mir keiner bisher helfen.
Ich versuche gerade einen SRF02 mittels Atmega32 anzusprechen. Zum Senden der der Daten kommt es allerdings gar nicht, da der µC scheinbar in der 1. While-Schleife der i2c_start Funkion hängen bleibt, Also die Daten gar nicht übertragen werden. In die Funktion habe ich mir inzwischen nach jeder Schleife die Ausgabe eines Bitmusters auf den LOW-aktiven LEDs an PortB zur Überwachung eingebaut.
Hauptprogramm: http://logbuch.lima-city.de/stuff/005_i2c.txt
i2c-funktionen: http://logbuch.lima-city.de/stuff/twimaster.txt

Wenn ich das Programm nun in den Controller spiele und starte, leuchtet erstmal gar nichts => folglich bleibt der µC in der While-Schleife hängen. Ziehe ich die die I²C-Leitungen aus den Buchsen, springt das Programm sofort weiter bis zur Ausgabe des Fehlers, also dass keine Übertragung möglich war. Stecke ich keine Leitungen an, also dass der µC alleine läuft, tut sich gar nichts. PullUp-Widerstände sind 5,6k.
Hatte schon irgendjemand vielleicht das selbe Problem und könnte mir helfen? Oder hab ich einfach nur irgendwas vergessen?
Schonmal Danke für die Antworten.

Gruß Michael

damfino
23.09.2010, 22:18
Hallo,
hab bemerkt dass der F_CPU Wert im TWI Master noch auf 4Mhz steht, vielleicht eine (eher unwahrscheinliche) Ursache?
Je länger die Anschlusskabel desto kleiner kann man die Pull-up Widerstände wählen, es sind bis ca 1.8k möglich.

Ich verwende die gleiche Lib für einen Kompass ohne Probleme, aber mit einem Attiny Slave sieht es leider gleich aus wie bei Dir.

Der funktionierende Code für den Kompass:


i2c_start_wait(0xc0);//192 // start I2C bus
i2c_write(1); // register

i2c_rep_start(0xc1); // restart
kompass_akt = (short)i2c_readNak(); //neuen Wert lesen;
i2c_stop();


LG!

logbuch
06.10.2010, 21:37
Danke, aber bei mir funktioniert der Code einfach nicht, bei Verwendung der i2c_start_wait-Funktion kann ich gleich gar nicht mehr compilieren. Verschiedene, Pinkompatible Controller (Mega644, Mega16) brachten auch keinen Erfolg. Ich lass es einfach mal, den Sensor in C ansprechen zu wollen, C war eh noch nie so meins.
Also wieder zurück zu Assembler. :)

Gruß Michael