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
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ß
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.
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.
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
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.
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,
<C2946_Transmit_buf[0], 1, (uint16_t) 1000);
HAL_I2C_Master_Receive(&hi2c1, LTC2946_I2C_addr<<1,
<C2946_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!
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
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.....
?
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....
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ß
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!
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.
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.