Hallo Mikrocontroller.net Community,
ich habe in Problem mit einem Charger IC BQ24745 und zwar versuche ich
dem IC über den SMBus den Ladestrom,Ladespannung und den max.
Eingangsstrom zu übergeben damit die Ladung starten kann.
Jetzt ist es so das ich ACK vom Slave bekomme aber es fängt einfach
nicht an zuladen welches ich über die MOSFETs (Q3 & Q4 keine Spannung am
Gate ) überprüfe die schaltet er einfach nicht durch (habe die standard
Schaltung aus dem Datenblatt genommen jedoch ist
bei mir VDDSMB auf 3,3V) -->
http://www.ti.com/lit/ds/symlink/bq24745.pdf.
Habe mal die Messung vom Oszi angehangen darauf sieht man,dass kurz vor
dem ACK immer eine komische Flanke auftaucht. Was kann das sein?
Ansonsten sieht es gut aus mit dem SMBus(ist ja fast I2C) Protokoll oder
könnt Ihr da einen Fehler entdecken.
Komme einfach nicht weiter bin mir aber sicher das die Software soweit
passen sollte. Vllt doch ein Hardwarefehler...
Kann dein Scope keine besseren Bilder bringen? Daß vor ACK eine
Ladekurve auftaucht, ist normal! Der Slave brauch ja eine bestimmte Zeit
bis er den Bus low-zieht.
Ist das dein erstes i2c-Projekt? Dann hänge mal einen einfacheren
Baustein an und teste erstmal den, z.B. EEPROM.
smBus hat auch einen time-out, der eventuell zuschlägt.
Abdul K. schrieb:> Kann dein Scope keine besseren Bilder bringen? Daß vor ACK eine> Ladekurve auftaucht, ist normal! Der Slave brauch ja eine bestimmte Zeit> bis er den Bus low-zieht.> Ist das dein erstes i2c-Projekt? Dann hänge mal einen einfacheren> Baustein an und teste erstmal den, z.B. EEPROM.> smBus hat auch einen time-out, der eventuell zuschlägt.
okay hab ich mir schon fast gedacht das es normal ist vor dem ACK.
laut Datenblatt kommt ein Time-out erst nach min 22ms zustande, davon
bin ich weit entfernt.
Komisch ist doch irgendwie das der Slave alles bestätigt aber das IC
will einfach nicht arbeiten.
ein EEPROM mit I2C habe ich leider nicht zur Hand.
hier sind noch mal die Oszi Bilder ich bin der Meinung das es mit dem
Schreiben klappen sollte.
Schema ist genau wie im Datenblatte Seite 21
-->http://www.ti.com/lit/ds/symlink/bq24745.pdf
Sieht einer einen Fehler oder hat einer eine Idee Warum der Charger
nicht "anspringt" ?
Eine Frage stell sich mir noch bei der Hardware ist der uC also der
Master mit 5 V versorgt das Charger IC hat aber 3,3V als
Spannungsversorgung. Ist das problematisch?
Chris schrieb:> hier sind noch mal die Oszi Bilder ich bin der Meinung das es mit dem> Schreiben klappen sollte.>> Schema ist genau wie im Datenblatte Seite 21> -->http://www.ti.com/lit/ds/symlink/bq24745.pdf>>> Sieht einer einen Fehler oder hat einer eine Idee Warum der Charger> nicht "anspringt" ?>
Hast du Register zurückgelesen und der Inhalt entspricht dem DB bzw. was
du reinschriebest?
>>> Eine Frage stell sich mir noch bei der Hardware ist der uC also der> Master mit 5 V versorgt das Charger IC hat aber 3,3V als> Spannungsversorgung. Ist das problematisch?
Eigentlich bei diesem Bus nicht, aber ich kenne das IC nicht.
Abdul K. schrieb:> Chris schrieb:>> hier sind noch mal die Oszi Bilder ich bin der Meinung das es mit dem>> Schreiben klappen sollte.>>>> Schema ist genau wie im Datenblatte Seite 21>> -->http://www.ti.com/lit/ds/symlink/bq24745.pdf>>>>>> Sieht einer einen Fehler oder hat einer eine Idee Warum der Charger>> nicht "anspringt" ?>>>> Hast du Register zurückgelesen und der Inhalt entspricht dem DB bzw. was> du reinschriebest?>>>>>>> Eine Frage stell sich mir noch bei der Hardware ist der uC also der>> Master mit 5 V versorgt das Charger IC hat aber 3,3V als>> Spannungsversorgung. Ist das problematisch?>> Eigentlich bei diesem Bus nicht, aber ich kenne das IC nicht.
das Auslesen könnte ich machen aber ich habe keine Ausgabe wie z.b ein
Display nur eine Duo LED.
Wie ist es denn bei I2C-Bus ist es dem Egal das der Master mit 5V
betrieben wird und der Slave mit 3,3V? Meiner Meinung nach ja da es ja
low aktiv ist ...
Kann sich bitte einer mal das Oszillogramm anschauen wenn ich mir schon
so viel Mühe mache ;-)
ich bin es mehrmals durchgegangen und kann keinen Fehler entdecken...
Das ist einfach die falsche Methodik! Mach dir eine Debug-Schnittstelle
in Form einer seriellen Ausgabe. Dann les die Register aus, nachdem du
was reinschriebst. Sorge dafür, daß nur dieses eine IC am Bus hängt
neben dem Master.
Was die Buslevel angeht: Schau in beide Datenblätter. Da findest du
irgendwo die Threshold der Eingänge. Wird wohl so bei echtem i2c bei
1,2V liegen.
Vielleicht hat dein Master gar keine echten i2c-Level und seine
Threshold ist bei 2,5V wie bei CMOS üblich für 5V? Selbst dann ginge es.
Die Diagramme sehen ok aus, aber ich kontrolliere nicht jedes Bit. Im
Allgemeinen rufe ich einfach meine uralte i2c-Routine auf und der Bus
läuft.
Vielleicht will der Ladecontroller auch noch irgendeine Freigabe?? Also
DB durchforsten.
Abdul K. schrieb:> Das ist einfach die falsche Methodik! Mach dir eine> Debug-Schnittstelle> in Form einer seriellen Ausgabe. Dann les die Register aus, nachdem du> was reinschriebst. Sorge dafür, daß nur dieses eine IC am Bus hängt> neben dem Master.>> Was die Buslevel angeht: Schau in beide Datenblätter. Da findest du> irgendwo die Threshold der Eingänge. Wird wohl so bei echtem i2c bei> 1,2V liegen.> Vielleicht hat dein Master gar keine echten i2c-Level und seine> Threshold ist bei 2,5V wie bei CMOS üblich für 5V? Selbst dann ginge es.>> Die Diagramme sehen ok aus, aber ich kontrolliere nicht jedes Bit. Im> Allgemeinen rufe ich einfach meine uralte i2c-Routine auf und der Bus> läuft.>
Das würde ich mir auch wünschen aber irgendwo ist noch ein bock drinne
und wie immer ist es die Frage Hardware oder Software.
> Vielleicht will der Ladecontroller auch noch irgendeine Freigabe?? Also> DB durchforsten.
Folgende Bedingungen müssen erfüllt sein damit der BQ24745 anfängt zu
Laden:
1.DCIN > 4,5 V & VDDSMB >2,5 V (erfüllt gemessen)
2. ACIN > 2,4V (erfüllt gemessen)
3. Akkuspannung > VDCIN - VFB (da bin ich mir nicht sicher da ich nicht
weiß was mit VFB gemeint ist??)
4.200 us delay ist abgelaufen nachdem ACIN>2,4 V ist (erfüllt)
5.SMBus ChargeVoltage,ChargeCurrent und InputCurrent DAC Register sind
richtig gesetzt ( weiß ich nicht genau aber das was ich mit dem Oszi
messe Siehe Anhänge oben müsste passen)
6. CE ist High (erfüllt gemessen)
7. 2 ms sind vergangen nach dem CE High geworden ist (erfüllt)
8. VDDP & VREF sind passend (erfüllt gemessen)
9. kein Thermische Abschaltung (erfüllt da die Temperatur nicht zu hoch
ist)
Habe jetzt mal versucht den wert den ich in das Charger IC rein schreibe
zu lesen dann zu vergleichen und wenn der Wert passt eine LED
einschalten.
Es sieht aber nicht gut aus nachdem senden der Slave Adresse zum zweiten
Mal bekomme ich keinen ACK (Was mir noch aufgefallen ist warum ändert
sich die Slave-Adresse im Datenblatt auf 0x14 davor war sie noch 0x12
ist das ein Fehler im Datenblatt?)
Bin für jeden Rat dankbar sitze schon seit 3 Tagen bei der Sache und
komme nicht weiter.
Wieso hast du denn nur eine LED und willst das auch nicht ändern?
VFB wird wohl Voltage Feedback meinen. Ich tippe auf Akkuspannung.
Stimmt der Spannungsteiler?
Ich kann dir da nicht weiterhelfen, denn ich kenne das IC nicht, müßte
also das DB selber durchackern. Und das willst du ja sicher nicht
bezahlen.
Was hast du für einen Controller/-board?
Wo wohnst du? Dann findest du vielleicht jemanden aus der Nähe, der sich
neben dich setzt. Hilft manchmal ungemein, vor allem bei zunehmender
Betriebsblindheit/Verzweifelung.
In jedem alten SAT-Receiver ist ein EEPROM. Oft auch i2c. Einfach
parallel ranklemmen und damit deinen i2c-Code testen. Und dann erst an
den dicken ärgerlichen Brocken!
Slave-Adresse:
Hm. Häng das IC ab, dann muß ein time-out kommen. Zweimal Slave-Adresse
hintereinander ist unzulässig bei i2c! Normal ist: Start, Slave-Adresse,
Registeradresse, Werte, Stop. Beachte auch, daß die Streams für Lesen
und Schreiben unterschiedlich bei i2c aussehen!
Abdul K. schrieb:> Wieso hast du denn nur eine LED und willst das auch nicht ändern?
weil die Hardware schon fertig ist und ich da relativ wenig ändern kann
und als ausgabe habe ich nur eine Duo LED zur verfügung.
> VFB wird wohl Voltage Feedback meinen. Ich tippe auf Akkuspannung.> Stimmt der Spannungsteiler?
welche Spannungsteiler meinst du ? da wird einfach die Spannung am Akku
abgegriffen.
> Ich kann dir da nicht weiterhelfen, denn ich kenne das IC nicht, müßte> also das DB selber durchackern. Und das willst du ja sicher nicht> bezahlen.
aber ein Blick kostet doch nichts würdest mir sehr weiter helfen ;-)
> Was hast du für einen Controller/-board?
Controller ist ein AVR Mega 88
> Wo wohnst du? Dann findest du vielleicht jemanden aus der Nähe, der sich> neben dich setzt. Hilft manchmal ungemein, vor allem bei zunehmender> Betriebsblindheit/Verzweifelung.> In jedem alten SAT-Receiver ist ein EEPROM. Oft auch i2c. Einfach> parallel ranklemmen und damit deinen i2c-Code testen. Und dann erst an> den dicken ärgerlichen Brocken!
auch wenn ich ein EEProm finden sollte müsste ich mich wieder mit dem DB
beschäftigen sprich Slave Adresse raus suchen etc. etc.
> Slave-Adresse:> Hm. Häng das IC ab, dann muß ein time-out kommen. Zweimal Slave-Adresse> hintereinander ist unzulässig bei i2c! Normal ist: Start, Slave-Adresse,> Registeradresse, Werte, Stop. Beachte auch, daß die Streams für Lesen> und Schreiben unterschiedlich bei i2c aussehen!
guck dir bitte mal die zwei Zustandsdiagramme an da habe ich es markiert
was ich meine mit der Änderung dr Slave- Adresse beim lesen ( aber
eigentlich muss ich dem IC nur die Werte für ChargeCurrent,
ChargeSpannung und InputCurrent übergeben dann sollte das "Ding schon
laden oder habe ich mich da beim low byte bzw. high byte vertan?)
Na wenn dir das Raussuchen der Adresse eines EEPROMs schon zuviel ist,
dann .... du verstehst. Und wieso Suchen? Man macht einen Bus-Scan und
der erste ACK ist dann richtig. Bliebe bei einem EEPROM nur noch die
Frage, ob 1-Byte oder 2-Byte Adressierung der Speicherzellen. So schwer?
Bei der Adressierung stimmt irgendwas nicht. Die Slave-Adresse besteht
aus konstant 7Bit (die virtuell nach links geshiftet werden) und das
dann übrigbleibende niedrigste (freie also) Bit dient dazu, dem Slave
den Status Schreiben oder Lesen mitzuteilen. Aus deinen Schreiben 0x12
muß dann also Lesen 0x13 werden. Prüfen!
Abdul K. schrieb:> Na wenn dir das Raussuchen der Adresse eines EEPROMs schon zuviel> ist,> dann .... du verstehst. Und wieso Suchen? Man macht einen Bus-Scan und> der erste ACK ist dann richtig. Bliebe bei einem EEPROM nur noch die> Frage, ob 1-Byte oder 2-Byte Adressierung der Speicherzellen. So schwer?>> Bei der Adressierung stimmt irgendwas nicht. Die Slave-Adresse besteht> aus konstant 7Bit (die virtuell nach links geshiftet werden) und das> dann übrigbleibende niedrigste (freie also) Bit dient dazu, dem Slave> den Status Schreiben oder Lesen mitzuteilen. Aus deinen Schreiben 0x12> muß dann also Lesen 0x13 werden. Prüfen!
das ist mir klar LSB bit 8 = 0 schreiben als 0x12 und LSB bit 8 = 1
lesen.
Aber ich möchte ja nur schreiben und ich gehe jetzt mal davon aus das
meine Programmierung stimmt da ich immer ein ACK bekomme und mich an das
Write Word Format gehalten habe.
ich gehe jetzt mal von einem Hardwarefehler aus. Kann mir jemand sagen
ob es ein Problem gibt wenn der Master also uC mit 5V vesorgt wird und
der Slave also das Lademanagement IC mit 3,3v ? Pull ups nach 3,3 V wert
jeweils 10 K.