Hallo,
da im PIC noch ein wenig Platz war und Andreas beim Programmieren des Plugins kaum zu bremsen ist, habe ich mal ein paar Erweiterungen vorgenommen. Ohne Änderungen an der Hardware des Extension Boards ist nun folgendes möglich:
- Alle Status-LEDs können nun auch blinken
- Das Extension Board unterstützt nun einen Hardware-Wakeup
Durch eine kleine Zusatzschaltung (siehe hier) können außerdem noch 8 weitere LEDs angeschlossen werden (mit den gleichen Eigenschaften wie die ersten 6 LEDs inklusive Dimmfunktion).
Benötigt wird dazu eine neue PIC-Firmware ( 1.08 ), eine neue lircd.conf, eine neue Plugin-Version sowie ein Shutdownscript. Plugin und Shutdownscript wird Andreas im Anschluss noch vorstellen. Die Installation der neuen Firmware erfolgt wie gewohnt per Downloader. In der vorhandenen lircd.conf werden einfach SECTION 2 und 3 ausgetauscht (Hinweise in der neuen lircd.conf.extb). Die beiden Files liegen hier.
Zur Funktionsweise des Hardware-Wakeups:
Da der Microcontroller (PIC16F870) des Extension Boards weder eine eingebaute noch eine externe RTC (Realtime-Clock) besitzt, wird einfach ein Countdowntimer im PIC getartet, sobald der VDR im Standby ist. Der Timerwert wird wie alle anderen Steuerbefehle per RC5 an den PIC gesendet (hier als 6-stellige HEX-Zahl); das übernimmt das Shutdownscript. Damit ist theoretisch eine Zeitspanne von 102 Tagen möglich. Die Genauigkeit wird dabei einzig von der Genauigkeit des 4MHz-Quarzes des PICs bestimmt. Der Quarz hat Typischerweise eine Ungenauigkeit von ± 50ppm und ± 5ppm pro Jahr Alterung. Rechnen wir mal mit 100ppm, dann sind das pro Monat im schlechtesten Fall 4,3 Minuten Abweichung. Das kann also leicht durch einen kleinen Zeitpuffer von 5 oder 10 Minuten aufgefangen werden, so wie auch bei nvram-wakeup üblich ist. Der Wert dafür ist im Shutdownscript einstellbar.
Aufgrund der fehlenden RTC und der ebenso fehlenden Batterie-Pufferung vergisst der PIC bei einem Netzausfall den Wert des Countdowntimers. Aus diesem Grund wird der VDR nach einem Netzausfall hochgefahren und sofort anschließend per Shutdownscript wieder herutergefahren. Damit erhält der PIC dann wieder den aktuellen Countdowntimer-Wert. Liegt beim Hochfahren zufällig ein Timerevent an, verhindert VDR das Herunterfahren automatisch. Ob überhaupt ein Countdowntimer gesetzt ist, wird im nichtflüchtigen EEPROM des PICs gespeichert. Dadurch wird ein unnötiges Hochfahren nach einem Netzausfall verhindert. Die Bicolor-Status-LED (üblicherweise dauerrot im Standby) geht alle 4 Sekunden für 0,5 Sekunden aus, wenn ein Timer gesetzt wurde.
Der Countdowntimer im PIC wird nur dann gesetzt und gestartet, wenn ihm per Shutdownscript ein Wert übermittelt wird. Es muss also nichts beachtet werden, wenn die neue Hardware-Wakeupfunktion nicht genutzt werden soll.
Bei Messungen an meinem ATX-Netzteil (und auch an Andreas’ Netzteil, danke!) hat sich gezeigt, dass es bei einem Netzausfall recht lange (im Bereich von einigen 10s) dauern kann, bis die Restspannung der +5V-Standby Versorgung auf Null abfällt. Der PIC hat eine eingebaute Resetschaltung, deren Funktion aber einen Start mit nahezu 0 Volt erfordert. Bei zu hoher Restspannung kann der Reset fehlschlagen und das PIC-Programm läuft nicht. Aus diesem Grund empfehle ich, einfach einen 47R/0,5W (besser 1W) Widerstand dauerhaft zwischen +5V_STBY und GND anzuschließen (direkt am WOL-Stecker oder z.B. an CON7), dann geht die Standby-Spannung bei Netzausfall sehr schnell gegen Null. Das ermöglicht einen zuverlässigen Reset. Bei einigen Netzteilen wird dieser Widerstand nicht notwendig sein; wer möchte, kann das durch einen Test herausfinden. Ansonsten einfach einbauen, die 0,5W Verlustleistung im Standby sind zu vernachlässigen.
Getestet werden kann folgendermaßen (nach Update auf die neue Firmware etc.!)
- VDR runterfahren mit einem gesetzten Timer
- PWR-Leitung von CON4 abziehen bzw. Jumper JP1 ziehen, damit der VDR nicht laufend startet
- Netz unterbrechen (Netzstecker/Netzschalter) mit unterschiedlicher Dauer (wenige Sekunden bis zu einer Minute). Besonders im Bereich von 2 ... 10 Sekunden sehr häufig wiederholen! Die LED muss jedes Mal, wenn das Netz wieder anliegt, grün blinken!
- Wenn gelegentlich kein grünes Blinken kommt, sondern die LED rot wird oder sogar andere LEDs angehen, ist kein sauberer Reset erfolgt. Dann den Test mit dem 47R-Widerstand wiederholen, und bei Erfolg dauerhaft einbauen.
Hier noch einmal alle Änderungen der Firmware 1.08 gegenüber 1.04:
- Anzahl der Status LEDs auf 14 erhöht (Hardwareerweiterung mit 1 Schieberegister für 8 LEDs notwendig)
- Blinkmodus für alle LEDs
- Hardware-Wakeup
- PWR-Taste der Fernbedienung und PWR-Taste an der Gerätefront können nun auch zum Abbruch des Shutdowns verwendet werden.
Und nun viel Spaß,
Tom
Edit:
- Blinken der Bicolor-Status-LED im Standby ergänzt
- Files auf einen anderen Server gelegt und das '&' aus dem Dateinamen entfernt