Nach Angabe des Herstellers kann der INA219 ohne Einstellung verwendet
werden. Auf der kleinen Platine ist ein Widerstand als SMD drauf. Die
Spannung und der Strom wird korrekt angezeigt. Habe es mit einem
externen Messgerät verglichen. Anzeigen entsprechen der wirklichen
Messung. Es werden auch kein anderen Anzeigen gemacht oder falsche Werte
für Power angezeigt.
Hallo Peter,
das Verhalten, steht doch im Datenblatt, RFM.
*8.5 Programming*
/An important aspect of the INA219 device is that it measure current or
power if it is programmed based on the system. The device measures both
the differential voltage applied between the IN+ and IN- input pins and
the voltage at IN- pin. In order for the device to report both current
and power values, the user must program the resolution of the Current
Register (04h) and the value of the shunt resistor (RSHUNT) present in
the application to develop the differential voltage applied between the
input pins. Both the Current_LSB and shunt resistor value are used in
the calculation of the Calibration Register value that the device uses
to calculate the corresponding current and power values based on the
measured shunt and bus voltages.
After programming the Calibration Register, the Current Register (04h)
and Power Register (03h) update accordingly based on the corresponding
shunt voltage and bus voltage measurements. Until the Calibration
Register is programmed, the Current Register (04h) and Power Register
(03h) remain at zero./
Hallo Peter,
schaut man erneut in das Datenblatt, sieht man unter 8.6.1 Register
Information, dann die Register mit der Anmerkung (2) immer als Null
gelesen werden.
Wer nun denkt, man muss da nicht einstellen, der irrt!
*8.6.1 Register Information*
/(2) The Power register and Current register default to 0 because the
Calibration register defaults to 0, yielding a zero current value until
the Calibration register is programmed./
Peter schrieb:> // Powermessung> i2c_start(adr_ina219); // Angabe Adresse> i2c_write(0x03); // Power> 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
Mal unabhängig vom eigentlichen Problem: Warum strukturierst Du Deinen
Code nicht sinnvoll?
Das Auslesen von Registerwerten scheint ja immer nach dem gleichem
Schema zu verlaufen. Das lohnt sich eine eigene Funktion, z.B.:
Hallo Tom
Danke für deinen Code.
Eigentlich ist das ganze Projekt so geplant (immer gleiche Hardware)
1. Inbetreibnahme einfach und Anzeige LCD (alle Funktionen und lesen
I2C)
2. Setzen der Register für unterschiedlicher Auflösung z.B. 16V 200mA
3. Bedienung mit Drehgeber für Auswahl der Bereiche (Einknopfbedienung)
4. Eingabe Kalibrierung
Da passt dein Code sehr gut dazu. Für den Rest ist noch genug zu machen.
LG Pt
Karl M. schrieb:> schaut man erneut in das Datenblatt, sieht man unter 8.6.1 Register> Information, dann die Register mit der Anmerkung (2) immer als Null> gelesen werden.>> Wer nun denkt, man muss da nicht einstellen, der irrt!> *8.6.1 Register Information*> /(2) The Power register and Current register default to 0 because the> Calibration register defaults to 0, yielding a zero current value until> the Calibration register is programmed./
Hallo Karl
das Stück hatte ich leider überlesen. Wenn ich das richtig verstanden
habe, steht das Register der Powermessung beim Einschalten immer auf 0
bis das Kalibrierregister programmiert ist. Nach meinem Plan sollte das
aber erst später kommen. Dann werde ich das mal vorziehen. Bleibt nur
die Frage wie mach ich das?
LG PT
Peter schrieb:> Dann werde ich das mal vorziehen. Bleibt nur> die Frage wie mach ich das?
Es gibt zwei Möglichkeiten:
1.) Man muss raten.
2.) Es steht im Datenblatt.
Was denkst du welche Möglichkeit die wahrscheinlichere ist?
Es gibt eine Formel im DB in die man den verwendeten Shunt einsetzt und
dann fällt da ein Registerwert raus. Den trägt man ein. Dann kann der
INA den Strom und damit auch Leistung messen.
Es sollte dir doch klar sein dass der INA nicht wissen kann was für
einen Shunt du genau einsetzt oder? Und das er somit niemals den
korrekten Strom anzeigen kann bevor du ihm das nicht mitgeteilt hast?
Ja? Nein?
Kannst du dir nicht mal angewöhnen das scheiß PDF einfach mal ordentlich
zu lesen. Anstatt immer nur widerwillig einen Absatz wenn es hoch kommt.
Da steht auch viel erklärende Prosa. Warum müssen das andere für dich
tun?
Und falls es noch nicht klar ist: Eine fertige Platine ersetzt diesen
Vorgang nicht. Der INA kann nicht vorprogrammiert werden. Du musst alle
Einstellungen selbst vornehmen. Das nimmt dir kein "Hersteller" ab. Das
nur weil du immer darauf rumreitetest du hättest eine fertige Platine
gekauft.
Hoffe das ich das PDF jetzt richtig gelesen habe.
Einstellung Konfigirationsregister, Beispiel:
0000 00x1 1101 1111
16V, 40mV, 12 Bit, 8 Samples Mode
0011 10x0 0110 1111
32V, 320mV, 9 Bit, 32 Samples, Mode
Bleibt nur noch die übertragung zum INA. Wie kann ich diese relativ
grosse Zahl übertragen?
Peter schrieb:> Bleibt nur noch die übertragung zum INA. Wie kann ich diese relativ> grosse Zahl übertragen?
Hallo,
nun das sind ja keine Zahlen...
Und keiner kann Dir ohne Schaltplan sagen, wie er die "Zahlen" berechnen
würde.
In welchem Kontext stehen die "Zahlen".
Generell sagt/ zeigt Dir auch das Datenblatt, wie man über I2C Daten um
INA219 übertragen muss.
Wie man nun eine 16 Bit Zahlen in MSB und LSB zerlegt, ist wider so ein
"C Ding" - mit Schieben und Maskieren.
Karl M. schrieb:> Wie man nun eine 16 Bit Zahlen in MSB und LSB zerlegt, ist wider so ein> "C Ding" - mit Schieben und Maskieren.
Vor allem bei Konstanten... Da musst du gar nichts machen.
Aber zum TE fällt mir nichts mehr ein.
Peter schrieb:> Bleibt nur noch die übertragung zum INA. Wie kann ich diese relativ> grosse Zahl übertragen?
I2C ist byteorientiert. Du musst deine "Words" in zwei Byte auftrennen
und in der richtigen Reihenfolge an den Chip senden.
Cyblord -. schrieb:> Vor allem bei Konstanten... Da musst du gar nichts machen.
Ja korrekt, die Zerlegung kann jeder direkt ablesen, bis auf diese "X"
...
Das x bedeutet "egal" nach DB.
Die Zahlen habe ich nicht berechnet, die stehen in einer Tabelle des
Herstellers und sollen das Reg. einstellen. Dazu gibt es auch keinen
Schaltplan. Die Werte geben an was der IC machen soll. Danach erfolgt
erst die Berechnung.
Karl M. schrieb:> Wie man nun eine 16 Bit Zahlen in MSB und LSB zerlegt, ist wider so ein> "C Ding" - mit Schieben und Maskieren.
Das bedeutet das ich die 16 Bit Zahl in zwei 8 Bit verwandle und als MSB
und LSB übertrage zum IC. Ist die reihenfolge beim senden genau so wie
beim Empfang?
Hallo
Peter schrieb:> Das bedeutet das ich die 16 Bit Zahl in zwei 8 Bit verwandle und als MSB> und LSB übertrage zum IC. Ist die reihenfolge beim senden genau so wie> beim Empfang?
Ja das liebe INA216 Datenblatt:
ich finde auf Seite 16 im Diagramm 15 das I2C Protokoll für "Timing
Diagram for Write Word Format".
Damit solltest Du, nach dem die Formel (1) unter 8.5.1 Programming the
Calibration Register berechnet wurde, den passenden 16 Bit Wert für das
Calibration Register.
Nach den angebenen Daten auf Seite 16 erfolgt
- Adresse
- MSB
- LSB
damit ist die reihenfolge der übertragung klar.
Bleibt noch die Formel auf Seite 12 Nr 1.
Die Eingabe von R Shunt ist klar. Bei meinem Teil sind 0,1 Ohm drin. Was
trage ich für Current_LSB ein. Im Calb. Register ist nicht vermerkt wo
was steht.
Irgendwas verstehe ich nun nicht mehr. Du bindest libraries ein
Peter schrieb:> #include "i2cmaster.h"> #include "INA219.h"
und willst trotzdem zu Fuß abfragen?
Die Adresse finde ich ungewöhnlich,
Peter schrieb:> #define adr_ina219 0x80 // Adresse des INA219 0x81
sollte eher 0x40 sein?
Manfred schrieb:> Irgendwas verstehe ich nun nicht mehr. Du bindest libraries ein> Peter schrieb:>> #include "i2cmaster.h">> #include "INA219.h"
Der i2cmaster wird für die übertragung aller Module verwendet. Stammt
von Peter und verwende es in fast jedem Programm. die INA219 ist
vorhanden, nutze sie aber noch nicht. Wenn die einzek^lnen Teile laufen
wird dort hin einiges ausgelagert
Peter schrieb:> die INA219 ist vorhanden, nutze sie aber noch nicht.
Ehrgeiz oder Platzprobleme?
Ich habe gerade ein Projekt mit zwei INA219 durch, Arduino. Da frage ich
die Library nach den Werten, bekomme sie geliefert und sehe keinerlei
Grund, das selbst zu machen, ebenso wenig wie die Ansteuerung meines
LCDs, der DA-Wandler und meiner SD-Karte ... ich habe genug eigenes Zeug
drumherum.
Manfred schrieb:> Ich habe gerade ein Projekt mit zwei INA219 durch, Arduino.
Hallo Manfred.
Ich probiere momentan 4 Ina219 in einem Arduino Mega Projekt mit 5 DHT22
gemeinsam zum Laufen und zur Anzeige auf TFT zu bringen.
Als absoluter Anfänger wäre ich für funktionierende Beispiele dankbar,
denn daran kann man am besten die Logik der Programmierung
nachvollziehen und vielleicht begreifen.
Würdest Du den Code für deine 2 INA´s zur Verfügung stellen?
MfG
Hermann
Hallo,
ein INA219 oder weiter ist doch das selbe!
Jeder benötigt eine eigene I2C Adresse, dann lässt er sich adressieren
und die Daten auswerten.
Zeig doch mal, was Du hast.
Hallo Kerl,
ich möchte mit 4 INA219 und 5 DHT22 und einem oder 2 Arduino Mega 2560
vier Bordbatterien ( je 12V, 120AH) in einem WoMo über Relais
überwachen, Ausgabe und Anzeige über TFT (UTFT).
Mein Problem dabei ist dass ich fast keine Ahnung im Programmieren habe
und auf passende Beispiele angewiesen bin, die ich dann anzupassen
versuche.
Beim Auslesen der Werte aus den 4 INAs und deren Anzeige auf dem TFT
stecke ich momentan fest. Zwar zeigt der Serial Monitor die Werte an,
aber wie bekomme ich diese für spätere Kapazitätsberechnungen
gespeichert und in welcher Form kann ich diese am TFT anzeigen?
Gruß
Hermann
Was meinst Du, wieso beim Klicken auf den Antworten-Button folgendes
erscheint:
************************************************
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
Formatierung (mehr Informationen...)
1
C-Code
[...]
************************************************
Eine Idee?