Wenn die iCal-Datei bereits in das Web IO hochgeladen wurde, funktioniert der eingebaute Timer auch ohne verbundenes Netzwerk. Wird das Web IO über das Netzwerk verbunden, können die Einzelausgänge auch unabhängig von den Kalendereinstellungen des Browsers ein- oder ausgeblendet werden. Bis zum nächsten zeitgesteuerten Umschaltvorgang (oder der Benutzer greift über den Webbrowser wieder darauf zu) wird der ausgewählte Umschaltzustand beibehalten.
Das Web-IO-Modell, das diese Funktionalität unterstützt, ist weiterhin verfügbar.
Ein Timer kontrolliert alle Terminals individuell nach einem beliebig einstellbaren Zeitrahmen. Damit die Hardwaremöglichkeiten des c't Netzschalters voll ausgeschöpft werden können, ist es sinnvoll, ein wenig Zeit in die Firmwareprogrammierung zu stecken. Die Speicherung von Messdaten im nicht-flüchtigen Datenspeicher und die Erfassung der Stromaufnahme über die Analog-Digital-Wandler (ADU) des Microcontrollers sind ebenso wenig wie die Befragung einer IR-Fernbedienung ein Wunderwerk.
Während der Betriebszeit zeichnet das EEPROM (512 Bytes) die nach einem Spannungsausfall noch benötigten Informationen auf und alle Parameter werden im SRAM (512 Bytes) gespeichert. In der Sektion. Eeprom enden die Informationen unmittelbar im EEPROM. Unsere Beispielfirmware ist aus mehreren Bausteinen aufgebaut, so dass sie im Flash-Speicher Raum für eigene Ergänzungen gibt.
Wenn eine einzelne Funktionalität aus einer Mediathek einmal im Programmcode erscheint, wird die gesamte Mediathek im Binärformat verbreitet. Die Modelle ANmega16 (16 Kilobyte Flash, 512 Byte EEPROM, 1 Kilobyte SRAM) und ANmega32 (32 Kilobyte Flash, 1 Kilobyte EEPROM, 2 Kilobyte SRAM) sind sowohl kode- als auch pin-kompatibel zum ANmega8535 und sind nur geringfügig teurer.
Der c't Netzschalter muss mit seiner Software eine Vielzahl von Funktionen ausführen: Befehle, die der X-Port vom Netzwerk erhält und an die der Steuerung übergibt, müssen beantwortet werden. Ein Mal pro Sek. steht auch die Bewertung der Timerereignisse an. Die Hauptprogramme kümmern sich um den weiteren Ablauf und werten die von den ISRs erfassten Informationen aus.
Der Initialwert wird unmittelbar in das Timerregister geschrieben und die Unterbrechungen werden als letztes aktiviert: TCNT0 = 0; TIMSK |= _BV(OCIE0); sei(); Das OCIE0-Bit im TIMSK-Register stellt den Vergleichsinterrupt ein und das Macro sei(), das in avr/interrupt vorkommt. h, löst alle Interrupte anlagenweit aus. Bei der Durchführung der Funktionen sind alle anderen Unterbrechungen gesperrt.
DFIOR |= _BV(ADTS0)| _BV(ADTS2); ADCSRA |= _BV(ADATE); und startet eine neue Vermessung selbsttätig, sobald TCNT1 den in OCR1B eingestellten Messwert überschreitet. Die Hauptprogramme wählen hier einen Sender aus, dürfen aber die REFSx- und ADLAR-Bits nicht ändern, da sie die Bezugsspannung und die Anordnung der Messwerte wählen. edmux &= _bv(refs0)|_bv(refs1)|_bv(adlar); admx |= channel; Auf der Basisplatte des c't Netzschalters erfassen zwei Induktivstromsensoren den durch die Lasten fließenden Strombedarf an den Steckdosen 1 und 2 (siehe auch [1]).
Mit Hilfe des Trimmers PR1 kann die Gain Einstellung des Trimmers in Abhängigkeit vom Meßbereich optimiert werden. Bei regelmäßiger Messung des Stroms I(t) und der aus den beiden Halbwellelementen bestehenden U( ) kann die aktive Stromleistung P bestimmt werden: Die Aufrüstung des c't-Netzschalters zu einem Timer stellt ganz andere Herausforderungen: Sie erfordert eine verhältnismäßig präzise Uhr, die sekundengenaue, minutengenaue, stundengenaue, tagesgenaue und ähnliche Werte auswertet.
Bei geschickter Einstellung eines der drei Zeitgeber kann eine vollständige Echtzeit-Uhr (RTC) in der Simulation implementiert werden. Verfügt der Hauptschalter jedoch über einen Internetzugang, kann er bei Erfordernis seine Systemuhrzeit über das Netzwerk ausgleichen. Das HTTP-Protokoll hat den Vorzug, dass die Datenübertragung als lesbares ASCII-Zeichen erfolgt.
Dabei kann der Q-Port nicht nur auf einen TCP-Port hören und ankommende Informationen an den Microcontroller weiterleiten, sondern auch aktive Verbindungsaufbau betreiben. Dabei wird die örtliche Uhrzeitzone als Precompilerkonstante in der Konfigurationsdatei rtc. c gespeichert und der Variable rtc_hour hinzugefügt, wenn die Zeit (rtc_get_httptime()) gesetzt ist - in Deutschland wird das Resultat der rtc_summertime () auch zu rtc_hour hinzugefügt.
Es gibt den Zahlenwert "1" zurück, wenn das Tag zwischen dem letzen Sonntagabend im MÃ? und Okt. ist. Wenn eine exakte Systemuhrzeit zur Verfuegung steht, bleibt nicht mehr viel fuer einen bequemen Timer. Anschließend wird die function event_cron() aufgerufen und überprüft, ob eines der Ereignisse aus einer Eventliste gilt.
Eine C-Struktur beinhaltet alle erforderlichen Daten: Zeichensekunde, Minuten, Stunden; Zeichentag, Monat; int Jahr __attribute__ ((gepackt)); Zeichenwochentag; Aktion_t Aktion; } Ereignis_t; Ein Event tritt ein, wenn die ersten sieben Halbbilder dem System-Datum entsprechen. Um nicht nur Einmalereignisse zu ermöglichen, werden von der event_cron () function alle Eingabefelder ausgelassen, die den Namen TONTCARE beinhalten (#define TONTCARE 255).
Sie besteht aus drei Einzelparametern und hat eine Gesamtdicke von 16 bits - die Breite jedes Einzelteilfeldes liegt hinter dem Doppelpunkt: ohne Vorzeichen Zeichenkanal:7; ohne Vorzeichen Zeichen spezial:1; ohne Vorzeichen Zeichendaten:8; } actions_t; Solche Zeichenfelder sind speicherplatzsparend, da jede Variablen nur die tatsächlich benötigten Zeichen einnimmt. Die Zugriffe erfolgen wie gewohnt mit Structs über den Punkt oder den Dereferenzierungsoperator: Aktion. special=1; Der neue Werte für die Relays ist in Aktion. daten und in Aktion.
Falls action.special den Attributwert eins hat, beinhaltet action.data die auszuführenden Aktionen, wie z.B. die Aktualisierung der Zeit. Um die Ereignisliste nicht bei jedem erneuten Einschalten des c't-Netzschalters zu verlieren, speichert die Software sie im EEPROM. Die im EEPROM gespeicherten Werte sind permanent und leichter überschreibbar als im Blitz, aber nicht so leicht zugänglich wie im RAM.
Für die Beschreibung und das Lesen des EEPROMs stehen in den AVR-Bibliotheken eine ganze Palette von Programmen zur Verfügung. Der Compiler-Direktive __attribute__ ((section (". eeprom"))) setzt eine Variablen in das EPROM, die Routine eeprom_read_block(....) überträgt ein ganzes Element in den Speicher. Die Beschriftung des EEPROMs erfolgt durch eeprom_write_block(....): event_t eventEEPROM[MAXEVENT] __attribute__ ((section (". eeprom"))); event_t event; ohne Vorzeichen char eventPtr; ....
Eeproms Leseblock (&event, &eventEEPROM[eventPtr],sizeof(event_t)); Eeproms Schreibblock (&event, &eventEEPROM[eventPtr],sizeof(event_t)); Der C-Compiler kann das Eeproms auch mit Anfangswerten einrichten. Sie werden dann in der Ausführungsdatei mcu. cep gespeichert, die Pyrog unmittelbar in das EPROM des Microcontrollers einträgt. Die folgende Zuordnung bewirkt, dass der c't Netzschalter das Datum zehn Sekunden nach jedem Wiederanlauf und jeden Tag nach 24 Uhr aktualisiert: {10, 0.0, NICHT NICHT NICHT {10, 0.0, nicht nicht nicht vorhanden, DON, NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT N NICHT NICHT N NICHT NICHT N NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT NICHT N NICHT
Die dritte Schnittstelle des IR-Empfängers versorgt einen Freiport des ATmega (IO7, Pin 4 von P10) mit Messdaten. Für die Decodierung fordert die ISR von Timer2 die Prüffunktion ir_isr() alle 178 µs an. Weil Kanten an den Biträndern die Anwenderdaten nicht verändern, wird nur dann auf Pegelwechsel geachtet, wenn der Zählwert zwischen acht und zwölf beträgt - ein Signal ist 1.778 ms und damit fast exakt zehn lange ir_isr () Rufe.
Das jeweilige Datenbit korrespondiert - kurz nach dem Durchlaufen der Kante - mit dem umgekehrten Pegelwert am Eingaben. Dabei hat das erste Signalbit immer den Betrag "1" und dient dem Receiver zur Einstellung des Verstärkung. Mit jedem Tastendruck ändert das Umschaltbit (T) seinen Messwert, so dass Sie zwischen mehrmaligem Betätigen und Halten einer Taster unterscheiden können.
Der c't Netzschalter verfügt über eine viel größere Auswahl an Geräten. Mit dem Java-Applet werden alle wesentlichen Parameter auf den c't-Power-Switch übertragen, aber es bleibt noch viel Spielraum für Nachbesserungen.