INA 219 - Strommessung

Wenn der Sensor gerade frisch am Netz hängt, und du noch keine weitere Kommunikation mit ihm aufgebaut hast, sprich du hast noch nichts an die Adresse "0x00" gesendet. Was bekommst du von dieser Adresse?
Lies bitte einmal den aktuellen Inhalt, direkt nach dem einschalten aus. Dieses Register sollte den eben erwähnten Wert beeinhalten.
 
Laut Angabe im DB kann man an der Adresse/register 00 nur schreiben, lesen nicht möglich.
Bin auch an der Adresse 05 Calibration dran. Es ist eine Formel angegeben, in der man seinen R Shunt eintargen soll. Zusammen mit ein paar anderen Angaben bekommt man den Wert dazu.
 
Laut Table2 auf Seite 18 kannst Du alle sechs Register lesen. Schreiben kannst Du nur das Configurations- und das Calibrationsregister.
(Nach dem PowerUp ist ersteres mit 0x0399 beladen, letzteres mit 0x0000 - bis Du was anderes reinschreibst...)
 
Habe gerade 00 ausgelesen. Es kommt -17636 raus umgerechnet 44E4.
Der IC antwortet. Habe die Adresse mit einem Bus Scanner kontrolliert. Adresse ist 80. Kann die Spannung und Streom korrekt auslesen. Es wird 4,937V und 7mA (1xLED) angezeigt. Erhähe ich den Verbrauch sinkt die Spannung und Strom steigt
 
Habe gerade 00 ausgelesen. Es kommt -17636 raus umgerechnet 44E4.
Der IC antwortet. Habe die Adresse mit einem Bus Scanner kontrolliert. Adresse ist 80. Kann die Spannung und Streom korrekt auslesen. Es wird 4,937V und 7mA (1xLED) angezeigt. Erhähe ich den Verbrauch sinkt die Spannung und Strom steigt
Du musst alle Register lesen können.
Wenn du nichts in das Config. Register geschrieben hast, ist der von dir ausgelesene Wert falsch. Vorallem kann er nicht negativ sein!!! Wie liest du das Register aus? Zeig mal deinen Kode.
 


CodeBox C
// Strommessung
       i2c_start(adr_ina219);           // Angabe Adresse
       i2c_write(01);                   // Strom
       i2c_stop();
       i2c_start(adr_ina219 +1);       // Auslesen Adresse + 1
       msb_strom = i2c_readAck();       //...speichere oberes Bit
       lsb_strom = i2c_readNak();       //...speichere unteres Bit
       i2c_stop();
       strom_wrd = (msb_strom << 8 | lsb_strom);  // Zusammensetzung von o. & u. Byte
       strom_anz = strom_wrd / 8;
       
       if (strom_anz == 8191)
         {
           strom_anz = 0;
         }    
       
       utoa(strom_anz, Buffer, 10 );
       lcd_printlc(2,10,"     ");  
       lcd_printlc(2,11,Buffer);
       
       // Spannungsmessung
       i2c_start(adr_ina219);                   // Angabe Adresse
       i2c_write(0x02);                       // Register Spannung
       i2c_stop();
       i2c_start(adr_ina219 +1);               // Auslesen Adresse + 1
       msb_spannung = i2c_readAck();           //...speichere oberes Bit
       lsb_spannung = i2c_readNak();           //...speichere unteres Bit
       i2c_stop();
       spannung_wrd = (msb_spannung << 8 | lsb_spannung);  // Zusammensetzung von o. & u. Byte
       spannung_anz = spannung_wrd / 2;       // Wert Spannung / 2
       
       spannung_anz1 = spannung_anz % 10;       // 4. Zahl ok
       spannung_anz2 = spannung_anz / 10;
       spannung_anz3 = spannung_anz2 % 10;       // 3. Zahl
       spannung_anz4 = spannung_anz2 / 10;
       spannung_anz5 = spannung_anz4 % 10;       // 2. Zahl
       spannung_anz6 = spannung_anz4 / 10;
       spannung_anz7 = spannung_anz6 % 10;       // 1. Zahl
       
       itoa(spannung_anz7, Buffer, 10 );       // 1. Zahl
       lcd_printlc(3,10," ");
       lcd_printlc(3,10,Buffer);
       
       itoa(spannung_anz5, Buffer, 10 );       // 2. Zahl
       lcd_printlc(3,12," ");
       lcd_printlc(3,12,Buffer);
       
       itoa(spannung_anz3, Buffer, 10 );       // 3. Zahl
       lcd_printlc(3,13," ");
       lcd_printlc(3,13,Buffer);
       
       itoa(spannung_anz1, Buffer, 10 );       // 4. Zahl
       lcd_printlc(3,14," ");
       lcd_printlc(3,14,Buffer);
       
       
       // Powermessung
       i2c_start(adr_ina219);           // Angabe Adresse
       i2c_write(0x03);                   // Power 03
       i2c_stop();
       i2c_start(adr_ina219 +1);       // Auslesen Adresse + 1
       msb_power = i2c_readAck();       //...speichere oberes Bit
       lsb_power = i2c_readNak();       //...speichere unteres Bit
       i2c_stop();
       power_wrd = (msb_power << 8 | lsb_power);  // Zusammensetzung von o. & u. Byte
       power_anz = power_wrd;       // Wert Spannung / 2 100
       itoa(power_anz, Buffer, 10 );
       lcd_printlc(4,10,"     ");
       lcd_printlc(4,10,Buffer);
 
Ich sehe nirgends das Register 0x00..
 
Hatte einfach in der Powermessung statt der 0x03 die 0x00 eingetragen. Hatte bei der Berechnung der Werte für das Cali. Register weiter gemacht und eine Berechnung für einigs gefunden. Dabei ergab sich 0x8555 und habe das ins Register 05 eingetragen. Damit bekomme ich einen Anzeige bei Power. Muss noch klären wie ich sie berechne und wie Anzeige sein muss.
Bei der anderen Sache bin ich noch dran.
Zwischenfrage:
- Adresse
- MSB
- LSB
so soll die Datenübertragung laufen. Adresse ist klar, vom Wert 0x8555 ist was was? 85 - MSB und 55 LSB?
 
Die meisten Sensoren schicken erst das MSB und dann das LSB. Das sollte auch im Datenblatt stehen.

Demnach sollte das so sein.
 
Habe gerade die Berechnung überprüft. Das Ergebnis was kommt durch 4 geteilt werden. Damit ergeben sich auch die Berechnung so mit ca. +/- 10%. Habe mit einer LED von ca. 8mA und einem Display von ca. 150mA gemessen und berechnet. Scheint zu stimmen. Bleibt noch die Frage wie kann ich unterschiedliche Messbereiche einstellen (über 0x00) und wie korrigiere ich die Messergebnisse um es abzugleichen

LG achim
 
Du solltest erstmal versuchen das Register 0x00 anständig zu lesen.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)