Pfad: Home => AVR-DE => Anwendungen => Experimentell => Experimentierboard m324pa => Stromzaehler m324   This page in english: Flag EN Logo
Stromzaehler-Logger mit m324pa AVR-Anwendungen

Stromzähler-Logger mit Experimentalboard ATmega324PA


Entwicklungsprojekt! Unfertig! Ungetestet! Software noch in Entwicklung!

Stromzähler mit ATmega324PA

Moderne Stromzähler haben eine Infrarot-Diode (im Bild oben Mitte), die pro verbrauchter kWh 10.000 mal an- und ausgeht. Warum also nicht diese Impulse zählen, in einem AVR speichern und die Ergebnisse einmal pro Woche (oder einmal alle drei Monate) mit einem RS232-Adapter im Keller abholen?

Und das Beste: für diesen Dienst braucht man weder die Pin des Stromzählers noch einen Lese-/Schreib-Adapter für schlappe 40 Euro. Das braucht man, um mit dem Zähler in der IR-Schnittstelle unten rechts zu kommunizieren. Und das machen die Meisten, nur wir brauchen das hier alles gar nicht.

Schaltbilder und andere Zeichnungen gibt es in der LibreOffice-Draw-Datei hier, Flussdiagramme in der LibreOffice-Draw-Datei hier, Berechnungen in der LibreOffice-Calc-Datei hier.

Top Funktionsweise Hardware Aufbau Software Algorithmen

1 Funktionsweise

Ein IR-Foto-Transistor nimmt die IR-LED-Impulse auf, formt sie ein wenig um und gibt sie an den 16-Bit-Zähler TC1 im ATmega324PA weiter. Dieser zählt sie über 15 Minuten lang und speichert den Zählerstand dann im SRAM. Die gespeicherten Werte entsprechen einer Zehntel Wattstunde (0,1 Wh). Alle Zählwerte bleiben, auch im Maximalfall (d.h. wenn alle drei Stromphasen mit 16 Ampere laufen, z. B. weil alle Platten eines Herdes gleichzeitig an sind, unterhalb von 32.768 und sind deshalb an dem gelöschten Bit 15 erkennbar (warum das wichtig ist, siehe nächster Absatz).

Für den Zeitstempel der Messwerte wird eine Uhr mit Datum in TC0 betrieben. Immer wenn ein neuer Tag beginnt, wird das Datum als Datumszeitwert in den SRAM-Puffer eingefügt. Die Datumszeitwerte sind die Tage ab 1.1.1900 und sind erkennbar am gesetzten Bit 15.

Um den Stromverbrauch zu minimieren, sind die LCD, das serielle Interface sowie das eventuell angeschlossene DCF77-Modul normalerweise mit einem Schalter ausgeschaltet. Wird der Schalter eingeschaltet, dann werden Datum, Uhrzeit sowie der letzte und der aktuelle Zählerstand auf der LCD angezeigt, und die serielle Schnittstelle aktiviert und das DCF77-Modul mit Strom versorgt.

Am angeschlossenen RS232-Interface wird dann eine Eröffnungsmeldung ausgegeben und die Schnittstelle wartet auf Eingaben. Auf Wunsch werden die Werte eines bestimmten Tages oder auch alle gespeicherten Werte, mit Tabulator getrennt, auf der Schnittstelle ausgegeben. Im Maximalfall ist das in knapp 18 Sekunden erledigt (mit 9k6, Parität und einem Stopbit). Im Maximalfall dauert es 150 Sekunden für die Daten aus 84 Tagen.

Top Funktionsweise Hardware Aufbau Software Algorithmen

2 Hardware

Schaltbild der Adapter Das hier sind alle nötigen und unnötigen Adapter, die das Experimentierboard so braucht, um den Stromzähler mitzulesen. Im Einzelnen sind das:
  1. der Infrarot-Empfangs-Transistor: dieser empfängt die IR-Signale der IR-LED und gibt sie an den 16-Bit-Zähler TC1 weiter. Damit man bequem das Trimmpoti von 100k einstellen kann, ist noch ein Vierfach-Schmitt-Trigger-NAND dazu geschaltet. Wenn beide grünen 2mA-LEDs leuchten, ist der Empfang korrekt eingestellt, leuchtet nur eine der beiden, muss das Trimmpoti nachjustiert werden.
  2. das Poti mit 100k braucht man nur, wenn man die Uhrzeit und das Datum manuell einstellen möchte. In diesem Fall drückt man die Forward-Taste einmal, stellt mit dem Poti das Jahr ein, wenn fertig drückt man die Forward-Taste ein weiteres Mal und stellt mit dem Poti den Monat ein. Als weiteres stellt man den Tag, die Stunde und die Minute ein. Verlässt man mit dem weiteren Drücken der Forward-Taste die Einstellung, werden das eingestellte Datum und die Uhrzeit in die interne Uhr übernommen. Mit der Backward-Taste kommt man bei fehlerhafter Eingabe jeweils zurück, bei der Eingabe des Jahres wird die Datums- und Uhrzeit-Eingabe verlassen und es bleibt beim bisherigen Datum und Uhrzeit.
  3. das DCF77-Modul ist ebenfalls optional: wird es angeschlossen und mit Strom versorgt, stellt das DCF77-Modul nach fehlerfreiem und erfolgreichem Empfang Datum und Uhrzeit ein.


Schaltbild des M324PA-Experimentierboards Das ist das Schaltbild des Experimentierboards. Gegenüber der Grundversion in m324pa_lcd wurde nur der zweite VCC-Anschluss geändert: der zweite VCC dient nun zum Einschalten der LCD beim Einstellen von Datum und Uhrzeit sowie zum Einschalten des seriellen Interfaces beim Kommunizieren und Auslesen des Speichers.

Mit dem Schalter, der VCC2 einschaltet, werden LCD, serielle Schnittstelle und das angeschlossene DCF77-Modul eingeschaltet. Im Aus-Zustand ist der Stromverbrauch minimiert, so dass das Board für einige Tage aus Batterien oder Akkus versorgt werden kann.

Wird die Versorgung über VCC2 eingeschaltet, dann erhält der Controller einen INT0-Interrupt. Dadurch werden die LCD-Leitungen (Daten- und Kontrollbus) sowie die seriellen Anschlüsse RXD und TXD aktiviert bzw. deaktiviert.

Wer die Speicherkapazität noch drastisch erweitern möchte, nimmt statt des ATmega324PA einen ATmega1284. Der ist pin-kompatibel und hat gigantische 16kB an SRAM und kann daher die Daten aus fast 3 Monaten speichern.

Top Funktionsweise Hardware Aufbau Software Algorithmen

3 Aufbau

TBD

Top Funktionsweise Hardware Aufbau Software Algorithmen

4 Software

TBD

Top Funktionsweise Hardware Aufbau Software Algorithmen

5 Algorithmen

TBD

5.1 Datum und Uhrzeit

Die Uhrzeit und das Datum werden mit Hilfe des 8-Bit-Zählers TC0 erzeugt. Dazu dienen im SRAM die Zeilen

sDate:
sYr:
  .byte 1 ; Year
sMo:
  .byte 1 ; Month
sDay:
  .byte 1 ; Day
sTime:
sHr:
  .byte 1 ; Hour
sMin:
  .byte 1 ; Minute
sSec:
  .byte 1 ; Second
sSec10:
  .byte 1 ; Ten ints per second
sIntValCnt:
  .byte 2 ; Counter interval for 15 minutes 

Die gesamte Struktur wird beim Prozessorstart mit Voreinstellwerten belegt.

Der Timer TC0 wird mit folgenden Werten gestartet:
ParameterSymbolWertKommentar
Taktfrequenzclock2,4576 MHzDefault-Quarzfrequenz
VorteilercPresc1.024Takten des TC0 mit 2.400 Hz
CS-BitsTCCR0B(1<<CS02)|(1<<CS00)in das TCCR0B-Portregister
CTC-TeilercCtcDiv240Teilen der 2.400 Hz durch 240 = 10 Hz
Compare-AOCR0A239TC0-Neustart nach 240 Takten
SekundenuhrsSec1010für die Sekunden-Anzeige
ZählintervallcIntVal15 Minuten
900 Sekunden
Dauer der IR-Signal-Zählung
ZählerwertsIntValCnt9.000900 Sekunden mit 10 Hz

5.2 Zähler

TBD

5.3 Datumsstempel

Um Mitternacht, wenn es 00:00 Uhr ist und der neue Tag beginnt, fügt die Uhr einen Datumsstempel in den Datenstrom im SRAM ein. Das ist eine 16-Bit-Zahl, die die Anzahl Tage seit dem 1.1.1900 angibt. Jede Tabellenkalkulation versteht diese Zahl sofort als Datum (wenn man ein Datumsformat drauflegt).

Die Umrechnung des Datums in drei Bytes in das Datumsformat ist hier eingehend beschrieben und braucht hier nicht wiederholt werden. Auch die Umwandlung zurück, die für die Anzeige von Datumsstempeln verwendet wird, ist dort beschrieben.

5.4 Datums- und Uhrzeit-Einstellung

TBD

5.5 DCF77-Auswertung

TBD

5.6 RS232-Senden/Empfang

TBD

Top Funktionsweise Hardware Aufbau Software Algorithmen



Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte per Email an mich (info und die Web-URL-Adresse), ich freue mich über alle Arten von Rückmeldungen.

©2023 by http://www.avr-asm-tutorial.net