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ß
Der Takteingang liegt auf Gnd, brauch der nicht einen Quarz zum Arbeiten?
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.
Was ist eigentlich mit GPIO1 bis GPIO3. Liegen alle auf GND. Haben die gar keine Funktion?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.