Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:meters:power:kd_302

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hardware:channels:meters:power:kd_302 [2011/09/12 03:31] – [Hardware] stv0ghardware:channels:meters:power:kd_302 [2018/03/25 11:06] (aktuell) – alte Version wiederhergestellt (2014/02/26 20:23) jau
Zeile 1: Zeile 1:
 ====== Energiekostenmessgerät KD 302 ====== ====== Energiekostenmessgerät KD 302 ======
 +
 +<note info>
 +das KD302 ist inzwischen nichtmehr lieferbar. der grundaufbau ist jedoch bei vielen aehnlichen geraeten der gleiche, die auch auf chips von cirrus logic basieren.
 +</note>
 ===== Features ===== ===== Features =====
-  * preisgünstig (z.B. bei [[http://www.reichelt.de/?;ARTICLE=88135|Reichelt]]+  * preisgünstig (z.B. bei [[http://www.reichelt.de/?;ARTICLE=88135|Reichelt]] für ca. 10 €)
   * hohe Messgenauigkeit   * hohe Messgenauigkeit
   * Reverse-Engineering freundlich   * Reverse-Engineering freundlich
-  * bekannt aus dem Test in [[http://www.heise.de/artikel-archiv/ct/2008/24/226_kiosk|c't 2008/24]] (der c't Artikel ist bei Reichelt kostenlos zu haben!) +  * bekannt aus dem Test in [[http://www.heise.de/artikel-archiv/ct/2008/24/226_kiosk|c't 2008/24]] [[http://www.heise.de/ct/artikel/Pulsmesser-291796.html|leseprobe]] (der c't Artikel ist bei Reichelt [[http://www.reichelt.de/?ACTION=7;INDEX=0;FILENAME=D100%252FCT2408226231.pdf|kostenlos zu haben]]!)
-  * [[http://www.heise.de/newsticker/meldung/8-Euro-Stromkosten-Messgeraet-mit-Messfehler-214515.html|Artikel von Heise]]+
  
 ===== Motivation ===== ===== Motivation =====
Zeile 15: Zeile 18:
 Bei einem Eigenbau solch eines Gerätes währe idr. schon alleine das Gehäse (oder ein Mess-IC, so man eins verwendet) teurer, als das ganze KD302! Bei einem Eigenbau solch eines Gerätes währe idr. schon alleine das Gehäse (oder ein Mess-IC, so man eins verwendet) teurer, als das ganze KD302!
  
-Der verwendete CS5460A beinhaltet A/D Konverter für Strom/Spannung mit 4k Samples/Sek (bei 4.096Mhz Taktung, mit einer schnelleren Taktung des CS5460A liesse sich das ggfs. noch erhöhen.) (4k Samples/Sek entspricht 80 Samples/Vollwelle, man vergleiche die ärmlichen 16 des [[http://www.ladyada.net/make/tweetawatt/parser.html|tweet-a-watt]]).  +Der verwendete CS5460A beinhaltet A/D Konverter für Strom/Spannung mit 4k Samples/Sek. Bei 4.096Mhz Taktung, mit einer schnelleren Taktung des CS5460A ließe sich das ggfs. noch erhöhen. 4k Samples/Sek entsprechen 80 Samples/Vollwelle. Man vergleiche die ärmlichen 16 des [[http://www.ladyada.net/make/tweetawatt/parser.html|tweet-a-watt]]). 
-diese Daten lassen sich auslesen, so dass man die Strom/Spannungs-kurven angeschlossener Geräte ermitteln kann.+ 
 +Diese Daten lassen sich auslesen, so dass man die Strom/Spannungs-kurven angeschlossener Geräte ermitteln kann.
  
 ===== Umbau ===== ===== Umbau =====
Zeile 69: Zeile 73:
 ===== hardware / reverse engineering ===== ===== hardware / reverse engineering =====
  
-==== controller: EM78P468N ("LCD Type"==== +==== LCD Controller ==== 
-  * http://www.emc.com.tw/eng/st_8bit.asp +  * EM78P468N ("LCD Type"
-  * http://www.saiyimcu.com/products/upfile/2007611212810.pdf  http://www.datasheetcatalog.org/datasheets2/15/1527527_1.pdf +  * Datenblätter & Infos: [[http://www.emc.com.tw/eng/st_8bit.asp|1]], [[http://www.saiyimcu.com/products/upfile/2007611212810.pdf|2]], [[http://www.datasheetcatalog.org/datasheets2/15/1527527_1.pdf|3]] 
-  * OTP (one time programmable) ROMinkl. schutz gegen auslesen des programmcodes (wer lust hat kann ausprobieren ob der benutzt wird)+  * OTP (One Time Programmable) ROM 
 +    * inkl. Schutz gegen Auslesen des Programmcodes (wer Lust hat kann ausprobieren ob er benutzt wird ;))
  
-==== EEPROM: 24c02 ==== +==== EEPROM ==== 
-{{:hardware:channels:meters:power:kd320:kd302_eeprom.jpg?450 }} +{{:hardware:channels:meters:power:kd320:kd302_eeprom.jpg?450}} 
-{{ :hardware:channels:meters:power:kd320:eeprom_pinout.png?450}}+{{:hardware:channels:meters:power:kd320:eeprom_pinout.png?450}}
  
-  * Standard I<sub>2</sub>C EEPROM (2kbit)+  * 24c02: Standard I<sub>2</sub>C EEPROM (2kbit)
   * [[http://www.dzsc.com/uploadfile/company/51028/2007122112831434.pdf|Datenblatt]]   * [[http://www.dzsc.com/uploadfile/company/51028/2007122112831434.pdf|Datenblatt]]
   * hier dürften die Kalibrationsdaten für den CS5460A abgelegt sein   * hier dürften die Kalibrationsdaten für den CS5460A abgelegt sein
Zeile 90: Zeile 95:
 Es geht auch ohne die Leitungen zu aufzutrennen (natürlich ist I<sub>2</sub>C multimaster-fähig, wenn korrekt implementiert, außerdem greift der Controller im Betrieb wohl eh nicht auf das EEPROM zu). Es geht auch ohne die Leitungen zu aufzutrennen (natürlich ist I<sub>2</sub>C multimaster-fähig, wenn korrekt implementiert, außerdem greift der Controller im Betrieb wohl eh nicht auf das EEPROM zu).
  
-{{:hardware:channels:meters:power:kd320:kd302_eeprom_buspirate.jpg?450 }} +{{:hardware:channels:meters:power:kd320:kd302_eeprom_buspirate.jpg?450}} 
-{{ :hardware:channels:meters:power:kd320:kd302_eeprom_buspirate_2.jpg?450}}+{{:hardware:channels:meters:power:kd320:kd302_eeprom_buspirate_2.jpg?450}}
  
 <note tip>Das Alignment der Daten sieht etwas nach einem off-by-one in der Addresse aus?! Liegt wohl daran, dass 3-Byte Werte gespeichert werden und an chinesischen Programmierern...</note> <note tip>Das Alignment der Daten sieht etwas nach einem off-by-one in der Addresse aus?! Liegt wohl daran, dass 3-Byte Werte gespeichert werden und an chinesischen Programmierern...</note>
Zeile 169: Zeile 174:
 </code> </code>
  
-==== "CS5460A : Single-Phase, Bi-Directional Power/Energy IC" ==== +==== Messcontroller ==== 
-  * http://www.cirrus.com/en/products/cs5460a.html  +  * CS5460A : Single-Phase, Bi-Directional Power/Energy IChttp://www.cirrus.com/en/products/cs5460a.html 
-  * http://www.cirrus.com/en/pubs/proDatasheet/CS5460A_F5.pdf +  * Datenblatt: http://www.cirrus.com/en/pubs/proDatasheet/CS5460A_F5.pdf 
-  * anbindung ueber <html><del>i2c bus</del></html> serielles interface (lt. datenblatt spi kompatibel) +  * Anbindung über serielles Interface (lt. Datenblatt SPI kompatibel) 
-  * kalibrierung per software+  * kalibrierung per Software
  
-{{:cs5460a.png}} +{{:cs5460a.png?600}} 
-{{:kd302_signals.jpg?400}}+{{:kd302_signals.jpg?300}}
  
-=== messungen === +=== Messungen === 
-<note warning>bei messungen im betrieb ist vorsicht geboten, mangels galvanischer trennung liegt quasi alles im geraet auf netzpotential!</note> +<note warning>Bei Messungen im Betrieb ist Vorsicht geboten, mangels galvanischer Trennung liegt quasi alles im Gerät auf Netzpotential!</note> 
-<note>es empfiehlt sich einfach die 220V anschluesse frei zu lassenund stattdessen eine externe 5V versorgung anzuschliessen (zB einfach an die aeusseren pins von J1), dann laeuft das geraet, auch wenn es natuerlich keine sinnvollen messwerte mehr produziert. +<note>Es empfiehlt sich einfach die 220V Anschlüsse frei zu lassen und stattdessen eine externe 5V Versorgung anzuschliessen (z.B. einfach an die äußeren Pins von J1).\\ Dann läuft das Gerät, auch wenn es natürlich keine sinnvollen Messwerte mehr produziert. Messungen im Netzbetrieb sollte man dann darauf reduzieren können zu prüfen ob das Verhalten im Netzbetrieb übereinstimmt.</note>
-messungen im netzbetrieb  sollte man dann darauf reduzieren koennen zu pruefen ob das verhalten im netzbetrieb uebereinstimmt.</note>+
  
-soweit:+Im Betrieb ca. einmal pro Sekunde ein Signal auf INT, und (daraufhin?) eine kurze Kommunikation auf dem seriellen Interface (vermutlich signalisiert der CS5460A die Verfügbarkeit neuer Daten, die der Controller dann abholt).
  
-im betrieb ca einmal pro sekunde ein signal auf INT, und (daraufhin?) eine kurze kommunikation auf dem seriellen interface. +{{:kd302_spi-clock.jpg?300|Messung SCLK signal... (Nachahmung dieses Aufbaus nicht empfohlen!}} 
-(vermutlich signalisiert der CS5460A die verfuegbarkeit neuer daten, die der controller dann abholt.)+{{:kd320_sdo_safe.jpg?300|Messung SDO signal... (sichere Methode!)}} 
 +{{:hardware:channels:meters:power:kd320:kd302_spi_buspirate.jpg?300}}
  
-|{{:kd302_spi-clock.jpg?512|messung SCLK signal... (nachahmung dieses aufbaus nicht empfohlen!}}|{{:kd320_sdo_safe.jpg?512|messung SDO signal... (sichere methode!)}}| +Folgende schöne Ansicht ergibt sich im [[http://dangerousprototypes.com/docs/Logic_analyzer_mode|Logic Analyzer Modus]], getriggert auf das INT Signal auf Kanal 4:
-|bild: messung SCLK signal... (nachahmung dieses aufbaus nicht empfohlen!)|bild: messung SDO signal... (sichere methode!)|+
  
-<html><del>als naechstes muss dann ein spi-sniffer her...</del></html>+{{ :hardware:channels:meters:power:kd320:kd302_spi_cycle_v2.png?900 }}
  
-{{:hardware:channels:meters:power:kd320:kd302_spi_buspirate.jpg?512|}}+^Controller -> CS5460A^CS5460A -> Controller^Beschreibung^ 
 +| 0x5E / 0b01011110 | - | Write Register 15 (SREG) (Datenblatt 4.1.7) | 
 +| 0x80 / 0b10000000 ,0x00,0x00 | - | oberstes Bit im SREG = DRDY, Flag für Daten verfügbar, wird durch Schreiben einer 1 gelöscht.\\ So dass das Interruptsignal zurück gesetzt wird (siehe Kanal 4, Datenblatt 3.4 , 5.11) | 
 +| 0x16 / 0b00010110 | - | Read Register 11 (RMS current) | 
 +| - | 0x00,0x04,0x74 | 24-bit signed-int Wert (Datenblatt 4.6) | 
 +| 0x18 / 0b00011000 | - | Read Register 12 (RMV voltage) 
 +| - | 0x01,0x0C,0x94 | 24-bit signed-int Wert (Datenblatt 4.6) | 
 +| 0x14 / 0b00010100 | - | Read Register 10 (E (energy))| 
 +| - | 0xFF,0xFF,0xFE | 24-bit signed-int Wert (Datenblatt 4.6) | 
 +<note>Werte nicht sinnvoll da keine Netzspannung angeschlossen!</note>
  
-folgende schoene ansicht ergibt sich im [[http://dangerousprototypes.com/docs/Logic_analyzer_mode|logic analyzer modus]], getriggert auf das INT signal auf kanal 4: +Irgendwann lief dann auch mal der [[http://dangerousprototypes.com/docs/SPI#SPI_Bus_sniffer|SPI Sniffer Mode]]...
- +
-{{:hardware:channels:meters:power:kd320:kd302_spi_cycle.png?400|}} +
- +
-bei der auswertung ergeben sich hier folgende fehler: miso/mosi vertauscht, bit-reihenfolge rueckwaerts, ausserdem timingangaben falsch weil eine hohe vom buspirate nicht unterstuetzte samplerate eingestellt war. +
- +
-fixed: +
- +
-{{:hardware:channels:meters:power:kd320:kd302_spi_cycle_v2.png|}} +
- +
-| controller -> CS5460A | CS5460A -> controller | was | +
-| 0x5E / 0b01011110          -                | write register 15 (status-reg) (datenblatt 4.1.7) | +
-| 0x80 / 0b10000000 ,0x00,0x00    |      -                | oberstes bit im status register = DRDY, flag fuer daten verfuegbar, wird durch schreiben einer 1 geloescht, damit wird das interruptsignal zurueckgesetzt (siehe kanal 4) (datenblatt 3.4 , 5.11) | +
-| 0x16 / 0b00010110 |    -    | read register 11 (RMS current) | +
-|    - | 0x00,0x04,0x74 | 24-bit signed-int wert (datenblatt 4.6) (wert nicht sinnvoll da keine netzspannung angeschlossen!) | +
-| 0x18 / 0b00011000 | - | read register 12 (RMV voltage) +
-|    - | 0x01,0x0C,0x94 | 24-bit signed-int wert (datenblatt 4.6)(wert nicht sinnvoll da keine netzspannung angeschlossen!) | +
-| 0x14 / 0b00010100 | - | read register 10 (E (energy))| +
-|    - | 0xFF,0xFF,0xFE | 24-bit signed-int wert (datenblatt 4.6)(wert nicht sinnvoll da keine netzspannung angeschlossen!) | +
- +
-irgendwann lief dann auch mal der [[http://dangerousprototypes.com/docs/SPI#SPI_Bus_sniffer|spi sniffer mode]]...+
 <code> <code>
 $ serialclient -r 115200 /dev/ttyUSB0 $ serialclient -r 115200 /dev/ttyUSB0
Zeile 267: Zeile 260:
 [0x00(0x14)0xFF(0xFF)0xFF(0xFF)0xFF(0xFF)] [0x00(0x14)0xFF(0xFF)0xFF(0xFF)0xFF(0xFF)]
 </code> </code>
-(das sind die gleichen anfragen wie oben) 
  
-und dann nach einem reset des controllers, endlich die gesuchte initialisierungssequenz (hier aus meinem geraet nr. 1, der dazugehoerige eeprom inhalt siehe obe):+Das sind die gleichen anfragen wie oben. Und dann nach einem Reset des Controllers, endlich die gesuchte Initialisierungssequenz (Hier aus meinem Gerät Nr. 1, dazugehöriger EEPROM Inhalt siehe oben): 
 <code> <code>
 [0x00(0x46)0x00(0x15)0x00(0x8C)0x00(0x71)0x00(0x42)0x00(0xFF)0x00(0xB5)0x00(0x62)] [0x00(0x46)0x00(0x15)0x00(0x8C)0x00(0x71)0x00(0x42)0x00(0xFF)0x00(0xB5)0x00(0x62)]
Zeile 280: Zeile 273:
 (...) (...)
 </code> </code>
-nach datenblatt:+ 
 +Nach Datenblatt: 
 <code> <code>
 [ [
Zeile 333: Zeile 328:
 0xE8 0b11101000 start conversions! continuous mode 0xE8 0b11101000 start conversions! continuous mode
 </code> </code>
- 
- 
 ==== Impulsausgang ==== ==== Impulsausgang ====
-EOUT/EDIR ist ein impulsausgang ("S0-Ausgang"), im einfachsten fall <html><del>kann</del></html> koennte man den benutzen, +EOUT/EDIR ist ein Impulsausgang ("S0-Ausgang"). Im einfachsten Fall <del>kann</del> könnte man ihn benutzen, sofern er vom Controller sinnvoll initialisiert <del>wird</del> werden würde:
-sofern er vom controller sinnvoll konfiguriert <html><del>wird</del></html> wuerde:+
  
 +Zitat Datenblatt:
 > 3.1 Pulse-Rate Output > 3.1 Pulse-Rate Output
 > As an alternative to reading the real energy through the serial port, the EOUT and EDIR pins provide a simple interface with which signed energy can be accumulated. Each EOUT pulse represents a predetermined quantity of energy. The quantity of energy represented in one pulse can be varied by adjusting the value in the Pulse-Rate Register. > As an alternative to reading the real energy through the serial port, the EOUT and EDIR pins provide a simple interface with which signed energy can be accumulated. Each EOUT pulse represents a predetermined quantity of energy. The quantity of energy represented in one pulse can be varied by adjusting the value in the Pulse-Rate Register.
  
-nachdem ich bei ersten messungen keine impulse auf EOUT gesehen hatte, nahm ich an meine last war zu klein, und versuchte es mit mehreren kW last, was auch nichts brachte. dann stellte ich fest, das meine last _zu_gross_ war... +Nachdem ich bei ersten Messungen keine Impulse auf EOUT gesehen hatte, nahm ich an, dass meine Last zu klein war, und versuchte es mit mehreren kW Last. Leider ohne ErfolgErst dann stellte ich fest, das meine Last **zu groß** war!
- +
-das "pulse-rate register" wird vom controller definitiv nicht sinnvoll programmiert, vermutlich steht es auf null o.ae.. +
- +
-(update: an der oben analysierten initialisierungssequenz ist abzulesen: das pulse-rate register wird nicht beschrieben, und dazu wird netterweise noch die pulsweite auf extra lang eingesstellt, was das problem noch begunstigt...)+
  
-die impulsrate liegt ueber 1 impuls pro **wattsekunde**, schon ab ca 2 Watt laufen die impulse aufgrund der impulslaenge ineinander, und es entsteht ein dauerpegel!+Das "pulse-rate register" wird vom Controller definitiv nicht sinnvoll programmiert. Vermutlich steht es auf Null o.ä.
  
-{{:hardware:channels:meters:power:kd320:kd320_eout_0w0.jpg?384}}{{:hardware:channels:meters:power:kd320:kd320_eout_0w5.jpg?384}}{{:hardware:channels:meters:power:kd320:kd320_eout_1w3.jpg?384}}{{:hardware:channels:meters:power:kd320:kd320_eout_1w8.jpg?384}}+(**Update:** an der oben analysierten Initialisierungssequenz ist abzulesendas pulse-rate register wird nicht beschriebenDazu wird netterweise noch die Pulsweite auf extra lang eingesstellt, was das Problem noch begünstigt.)
  
-somit ist der Impulsausgang ohne aenderungen an der programmierung definitv nicht nutzbar.+Die Impulsrate liegt über 1 Impuls pro **Wattsekunde**, schon ab ca 2 Watt laufen die Impulse aufgrund der Impulslaenge ineinander, und es entsteht ein Dauerpegel!
  
-andererseits bedeutet dies auch, dass er vom vorhandenen controller wohl nicht benutzt wird (obwohl er angeschlossen ist!), und somit fuer eigene zwecke umprogrammiert werden kann, soweit moeglich+{{:hardware:channels:meters:power:kd320:kd320_eout_0w0.jpg?450}} 
-__moeglicherweise__ ist es moeglich ueber aenderungen der daten im eeprom den wert im pulse-rate register zu aendern.+{{:hardware:channels:meters:power:kd320:kd320_eout_0w5.jpg?450}}
  
-(updatedie eeprom daten sehen nicht danach aus, als ob man irgendwo einen wert fuer das pulse-rate register eintragen koennte.)+{{:hardware:channels:meters:power:kd320:kd320_eout_1w3.jpg?450}} 
 +{{:hardware:channels:meters:power:kd320:kd320_eout_1w8.jpg?450}}
  
-ansonsten wird man um den einbau eines eigenen controllers nicht herumkommen.+Somit ist der Impulsausgang ohne Änderungen an der Programmierung definitv nicht nutzbar. Andererseits bedeutet dies auch, dass er vom vorhandenen Controller wohl nicht benutzt wird (obwohl er angeschlossen ist!). 
 +__Möglicherweise__ ist es möglich über Änderungen der Daten im EEPROM den Wert im pulse-rate register zu ändern.
  
 +(**Update:** die EEPROM Daten sehen nicht danach aus, als ob man irgendwo einen Wert für das pulse-rate register eintragen könnte.)
  
-alternativ koennte man den standalone-betrieb des CS5460A nutzen, bei dem er seine konfiguration aus einem eeprom liest: controller (und display) hinauswerfen, das eeprom umprogrammieren und direkt mit dem CS5460A verbinden.+Ansonsten wird man um den Einbau eines eigenen Controllers nicht herum kommen. Alternativ könnte man den Standalone-Betrieb des CS5460A nutzen, bei dem er seine Konfiguration aus einem EEPROM liest: Controller (und Display) hinauswerfen, das EEPROM umprogrammieren und direkt mit dem CS5460A verbinden.
  
 ==== Netzteil ==== ==== Netzteil ====
-  * nicht galvanisch getrenntes netzteil+  * nicht galvanisch getrenntes Netzteil
  
-todo: ausmessen, verfuegbaren strom fuer moegliche einbauten ermitteln!+<note>TODO: ausmessen, verfügbaren Strom für mögliche Einbauten ermitteln!</note>
  
 ==== Anschlüsse ==== ==== Anschlüsse ====
hardware/channels/meters/power/kd_302.1315791075.txt.gz · Zuletzt geändert: 2011/09/12 03:31 von stv0g