Forum: Mikrocontroller und Digitale Elektronik AVR 1281V als I2C Host, TI Bq20z65-r1 SM-Bus Slave


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Mikrocontroller.net-Familie!

Bei einem Projekt ist es meine Teilaufgabe das Akkumanagement für einen 
LIPO-Akku zu realisieren. Dabei verwende ich den TI FuelGauge IC 
bq20z65-r1 sowie den Charger IC bq24735. Um die wichtigsten Parameter 
des LIPOs immer sehen zu können, sollen dementsprechend verschiedene 
Parameter vom im Projekt zum Einsatz kommenden Atmel AVR 1281V abgefragt 
werden.

Ich habe mich sehr ausführlich mit den beiden Protokollen I²C und SMBus 
beschäftigt und bin der Meinung alle Bedingungen damit beide Protokolle 
miteinander kompatibel sind, zu erfüllen:

-) Ich betreibe alle IC's mit 3V Vcc.
-) Die Pull-up Widerstände für SCL und SDA habe ich mit 10k bemessen.
-) Ich betreibe den Bus mit 50kHz

Ich arbeite mit dem I²C Master Driver AVR315 von Atmel, habe den 
Source-Code für den AVR-GCC Compiler entsprechend angepasst.

Im Anhang sieht er ein Bild, wie der derzeitige Versuch einen Slave 
anzusprechen aussieht: Bis auf das, dass nach der START-Condition doch 
sehr viel Zeit vergeht, bis die 9 Zyklen des Clocks beginnen und ebenso 
wieder sehr viel Zeit vergeht bis SCL und SDA wieder in den High-Zustand 
wechseln, wird kein Timing verletzt. All meine Versuche sind bisher 
gescheitert ein Acknowledge vom Slave zu erhalten, wie Ihr seht erhalte 
ich immer ein NACK und ich weiß einfach nicht wieso! Nach dem ersten 
Sendeversuch wird permanent ein REPEATED START initiiert da eben kein 
Slave antwortet...

Hat jemand Ideen, bzw. sieht jemand einen essentiellen Fehler im Code?

Vielen Dank für eure Hilfe,

Stefan

von c. m. (Gast)


Lesenswert?

das ist bis jetzt das beschissenste bild das mir hier im forum 
untergekommen ist.
steht aufm kopf (linkshänder?), ist riesengroß und der herr stefan 
spiegelt sich darin.

kann man da nicht ein wenig mitdenken und ordnung walten lassen?

von Stefan K. (batigool07)


Angehängte Dateien:

Lesenswert?

Sorry, kein Grund gleich an die Decke zu gehen =). War in Eile, und 
hatte im Nachinhein erst bemerkt, dass das Bild verkehrt rum ist! Hab 
mir die Mühe gemacht und habe nun einen USB-Stick aufgetrieben, hier 
hast du nun einwandfreie Bilder direkt vom Oszilloskop.

von Stefan (Gast)


Lesenswert?

Ich habe lediglich gelesen, dass Bilder nur in JPEG Format hochgeladen 
werden sollen, das habe ich auch gemacht. Das hier auch so großer Wert 
auf eine passende Auflösung gelegt wird habe ich nicht gewusst.

Auf jeden Fall kotzt es mich an, wie hier auf einen Erst-Poster 
eingedroschen wird. Mein zweiter Post soll keine Ausrede sein, sondern 
war Fakt. Anscheinend ist dieses Forum hier sehr penibel, was ich auf 
eine gewisse Art und Weise selbstverständlich verstehe um hier eine 
gewisse Qualität zu wahren...jedoch verstehe ich es nicht, dass man hier 
einem User der zum ersten Mal postet, eine derartige Unfreundlichkeit 
entgegenbringt, obwohl ich mich eigentlich in meinem zweiten Post 
entschuldigt habe. Diese Unfreundlichkeit habe ich wiederum bis dato in 
keinem anderen Forum gesehen, man wird nach meinen bisherigen 
Erfahrungen nach, zuerst freundlich ermahnt...würde es in diesem Forum 
eine Editierfunktion für bereits veröffentlichte Beiträge geben, hätte 
ich diese sowieso bei bermeken meines Missgeschickes verwendet...

Da ich scheinbar durch den Upload des Bildes ein derartiges Entsetzen 
ausgelöst habe, möchte ich mich (noch einmal) dafür entschuldigen, nicht 
in eurem gewünschten Sinne gepostet zu haben.

Hilfe darf ich hier scheinbar sowieso keine mehr erwarten und da hier 
wahrscheinlich eher weitere Beiträge hinzukommen werden, die mit dem 
eigentlichen Sinn dieses Beitrages nichts zu tun haben, werde ich den 
Webmaster bitten, diesen Beitrag zu löschen.

von Gerhard G. (g_g)


Lesenswert?

Hallo,

ich habe mal deinen Code mit einem Atmega644 und einen RTC-Baustein 
(DS1307) getestet.

TWI_Master_Initialise();
sei(); // sets the Global Interrupt Enable Bit to allow Interrupts


messageBuf[0] = 0xD0; // Slave_Adress_DS1307 = 0xD0;
messageBuf[1] = 0x0;  // Startadresse
messageBuf[2] = 0x0;  // sekunde
messageBuf[3] = 0x30; // minute
messageBuf[4] = 0x23; // stunde
messageBuf[5] = 0x05; // tagnr
messageBuf[6] = 0x17; // tag
messageBuf[7] = 0x08; // monat
messageBuf[8] = 0x12; // jahr
messageBuf[9] = 0x90; // run

TWI_Start_Transceiver_With_Data( messageBuf, 10);
TWI_operation = REQUEST_DATA;

while(1)
{
nop();
}

Die Sache funktioniert nur, wenn ich
Slave_Adress_BQ20Z65R1(0x16)aleine sende!
also <<TWI_ADR_BITS) | (FALSE<<TWI_READ_BIT);weglasse.

Zum Testen habe ich all Abfragen mal weggelassen, war mir zu 
unübersichlich.

Veruche es doch mal!

Gruß G.G.

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
Noch kein Account? Hier anmelden.