Forum: Mikrocontroller und Digitale Elektronik LTC2946 I2C antwortet nur 0x18


von Heinz St. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier folgendes Power Measurement IC

http://cds.linear.com/docs/en/datasheet/2946fa.pdf


angeschlossen wie, auf dem angefügten Bild!

Ich nutze zwei dieser ICs auf demselben I2C-Bus und kann mit beiden 
reden.

Adressen:  0b1101001 und 0b1101111


Leider antworten mir beide nur mit "0x18" egal was ich für einen Wert 
abfragen möchte!

Kann das damit zu tun haben, dass ich "SDAI" und "SDAO" zusammengelegt 
hab?

ist allerdings ja auch so laut Datenblatt zu machen!


VG

von Florian P. (ol1cr0n)


Lesenswert?

Hallo,

wie sieht denn die andere Seite des I2C-Busses aus? Hast du evtl. die 
PullUp-Widerstände vergessen?

Könntest du ein Bild mit dem gesamten Bus anhängen?

Gruß

von Manfred (Gast)


Lesenswert?

Der Takteingang liegt auf Gnd, brauch der nicht einen Quarz zum 
Arbeiten?

von Florian P. (ol1cr0n)


Lesenswert?

Manfred schrieb:
> Der Takteingang liegt auf Gnd, brauch der nicht einen Quarz zum
> Arbeiten?



Zitat Datenblatt:


CLKIN:
Clock Input. Connect to ground to use the internal
±5% clock. For improved accuracy, connect to an external
crystal oscillator circuit or drive with an external clock.

CLKOUT:
Clock  Output.  Connect  to  an  external  crystal
oscillator circuit. Leave open if unused.

von Manfred (Gast)


Lesenswert?

Florian K. schrieb:
> CLKIN:
> Clock Input. Connect to ground to use the internal
> ±5% clock. For improved accuracy, connect to an external
> crystal oscillator circuit or drive with an external clock

Ok, wenn das so da steht, ich habe mir nur das Anschlussbild angeschaut.

von Manfred (Gast)


Lesenswert?

Was ist eigentlich mit GPIO1 bis GPIO3. Liegen alle auf GND. Haben die 
gar keine Funktion?

von Heinz St. (Gast)


Lesenswert?

Manfred schrieb:
> Was ist eigentlich mit GPIO1 bis GPIO3. Liegen alle auf GND. Haben
> die
> gar keine Funktion?

Ja die möchte ich nicht nutzen bzw. wüsste nicht wofür,
von daher möchte ich nur power measurement machen und eventuell auch 
noch GPIO3 nutzen!!!!

VG

von Florian P. (ol1cr0n)


Lesenswert?

Womit sprichst du das IC an? Könntest du vlt. deine I2C Routinen posten 
falls ein µC der Master ist?

0x18 ist der Standardwert vom CTRLA-Register an Registeradresse 0x00.

Vielleicht liest du immer nur dieses Register aus.

von Heinz St. (Gast)


Lesenswert?

Florian K. schrieb:
> Womit sprichst du das IC an? Könntest du vlt. deine I2C Routinen
> posten
> falls ein µC der Master ist?

Ich nutzen einen STM32F4 µC.

folgendes führe ich zyklisch aus: -->

LTC2946_I2C_addr = 0b1101001;

LTC2946_Transmit_buf[0] = 0x01;

HAL_I2C_Master_Transmit(&hi2c1, LTC2946_I2C_addr<<1,
&LTC2946_Transmit_buf[0], 1, (uint16_t) 1000);

    HAL_I2C_Master_Receive(&hi2c1, LTC2946_I2C_addr<<1, 
&LTC2946_Receive_buf[0], 4, (uint16_t) 1000);


Die Kommunikation klappt so, wenn ich mit einem anderen, 
unterschiedlichen Gerät (RTC) auf demselben Bus kommunizieren möchte!

von Florian P. (ol1cr0n)


Lesenswert?

Ich kenne leider den STM32F4 nicht bzw. habe noch nichts mit den 
ARM-Controllern gemacht.

Vergleiche mal die I2C Protokolle im Datenblatt mit Dem was dein 
Controller macht.

Seite 19ff in deinem verlinkten Datenblatt beschreibt sehr gut was der 
Sensor auf dem Bus sehen möchte.

Gruß
ol1cr0n

von Heinz St. (Gast)


Lesenswert?

Florian K. schrieb:
> Seite 19ff in deinem verlinkten Datenblatt beschreibt sehr gut was der
> Sensor auf dem Bus sehen möchte.

wenn ich das recht sehe, ist das lediglich das 
Standard-I2C-Protokoll.....
?

von Heinz St. (Gast)


Lesenswert?

Ich hab gerade folgenden Forumeintrag gefunden

https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=126374


geht zwar um den RPi aber

das Problem klingt ähnlich, nur verstehe ich nicht genau, wie
der "work around" dort gemeint ist?

d.h. einfach direkt nacheinander alle REgister bis (eininschließlich) 
zum eigentlich gewünschten Register lesen?

also

0x00
.
.
.
0x03

wenn ich nur das Status register auslesen möchte?

das klappt so nämlich leider auch nicht!

Hmmh....

von Florian P. (ol1cr0n)


Lesenswert?

Guten Morgen,


Das klingt nach genau deinem Problem.

Der schöne Weg wäre natürlich deine I2C-Routinen anzupassen damit ein 
"RESTART" anstatt "STOP" gesendet wird nachdem du die Registeradresse 
übertragen hast.


> d.h. einfach direkt nacheinander alle REgister bis (eininschließlich)
> zum eigentlich gewünschten Register lesen?

Wenn du nach dem ersten Lesen kein "STOP" sonder "ACK" sendest, wird der 
Registerpointer im LTC2946 hochgezählt und der Inhalt des nächsten 
Registers wird gesendet, solange bis der Master "STOP" auf den Bus legt.


Gruß

von Heinz St. (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab mal versuch die HAL I2C transmit und receive
funktionen zu verändern......
die Stop-Condition ändern o.ä.

jedoch ist das ziemliches Gepfutsche ohne genau zu wissen, was da 
geschieht!

von Heinz St. (Gast)


Lesenswert?

Hallo,

kurze Rückmeldung, um das hier abzuschliessen.

Ich hab nun es wie folgt gemacht:

Ich lese, wenn ich ein bestimmtes Register haben will einfach
alle Register bis einschl. dem gewünschten aus.

Wie in dem anderen Forenbeitrag beschrieben.

Zum Register schreiben klappt direkt, also wie es eigentlich über I2C 
vorgesehen ist.

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.