Benutzer:Atuschen: Unterschied zwischen den Versionen
(→Geplante Erweiterungen:) |
(→Mein Ethersex-Setup:) |
||
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 20: | Zeile 20: | ||
- 4x 2272 Funkschalter | - 4x 2272 Funkschalter | ||
- 3x Pollin UP-Funkdimmer | - 3x Pollin UP-Funkdimmer | ||
− | - Pollin K8IO Relaiskarte über | + | - Pollin K8IO Relaiskarte über PCF8574A am I2C-Bus |
- 2x20 LCD über PCF8574 am I2C-Bus | - 2x20 LCD über PCF8574 am I2C-Bus | ||
+ | - 8 Taster über PCF8574 am I2C-Bus | ||
- 24C256 32KB EEPROM am I2C-Bus | - 24C256 32KB EEPROM am I2C-Bus | ||
+ | alternativ 24C65 8KB EEPROM | ||
− | Alles zur Zeit im fliegenden Aufbau auf mehreren Lochrasterplatinen. | + | Alles zur Zeit im fliegenden Aufbau auf mehreren Lochrasterplatinen: |
+ | |||
+ | [[Bild:Atuschen-Ethersex-Setup1.JPG|640px]] | ||
+ | |||
+ | Ich habe den HD44780-Treiber entsprechend angepasst, so dass die Ausgabe über den PCF8574 läuft. Die Hintergrundbeleuchtung vom LCD ist schaltbar, ebenso eine zusätzliche LED (den R/W-Pin vom LCD benutze ich nicht). Den zweiten PCF8574 für die Taster frage ich zur Zeit periodisch in der appsample.c ab, möchte aber später den Interrupt-Ausgang des PCF nutzen. | ||
=== Geplante Erweiterungen: === | === Geplante Erweiterungen: === | ||
+ | - DCF77-Empfänger | ||
- RFM12 (868 MHz) oder FS20 Sender/Empfänger | - RFM12 (868 MHz) oder FS20 Sender/Empfänger | ||
- Heizkörper-Thermostate (Funk/868 MHz) | - Heizkörper-Thermostate (Funk/868 MHz) | ||
Zeile 51: | Zeile 58: | ||
Nicht akzeptabel ist für mich, wegen jeder Änderung den Controller neu flashen zu müssen (begrenzte Flash-Zyklen, bei Verwendung des Bootloaders ist ein laufender Rechner notwendig). | Nicht akzeptabel ist für mich, wegen jeder Änderung den Controller neu flashen zu müssen (begrenzte Flash-Zyklen, bei Verwendung des Bootloaders ist ein laufender Rechner notwendig). | ||
Auch die Lösung mit dem dynamischen Cron ist mir nicht ganz recht, da ich im Idealfall mindestens 2x7 Schaltzeiten benötige (1 Woche Spät, 1 Woche Frühschicht im Wechsel + Wochenende). | Auch die Lösung mit dem dynamischen Cron ist mir nicht ganz recht, da ich im Idealfall mindestens 2x7 Schaltzeiten benötige (1 Woche Spät, 1 Woche Frühschicht im Wechsel + Wochenende). | ||
− | Dafür ist mir der RAM im ATMega zu knapp. Also müssen die Schaltbefehle in einen externen Speicher verlagert werden, den ich im laufenden Betrieb ändern kann. Prädestiniert dafür wäre der 4Kbit High-Endurance-Block eines 24C65 I2C-EEPROMS, welcher laut Datenblatt ca. 10 Mio Schreibzyklen verträgt. Da dieser Block nur 512 Byte groß ist, müssten die auszuführenden Befehle (welche sich nur selten ändern) in einem anderen Bereich gespeichert werden. Nur die Schaltzeiten/Tage müßten im High-Endurance-Block stehen. | + | Dafür ist mir der RAM im ATMega zu knapp. Also müssen die Schaltbefehle in einen externen nichtflüchtigen Speicher verlagert werden, den ich im laufenden Betrieb ändern kann. Prädestiniert dafür wäre der 4Kbit High-Endurance-Block eines 24C65 I2C-EEPROMS, welcher laut Datenblatt ca. 10 Mio Schreibzyklen verträgt. Da dieser Block nur 512 Byte groß ist, müssten die auszuführenden Befehle (welche sich nur selten ändern) in einem anderen Bereich gespeichert werden. Nur die Schaltzeiten/Tage müßten im High-Endurance-Block stehen. 3-4 byte reichen zur Codierung der Schaltzeiten aus, wodurch sich mindestens 128 Schaltzeitpunkte speichern lassen. Das wäre mehr als ausreichend für meine Zwecke. |
+ | |||
+ | Ein Problem dabei könnte der (relativ) langsamge Zugriff auf den externen EEPROM sein. Also würde ich zu jeder Minute pro Stunde in der ein Befehl vorhanden ist paralell ein Eintrag im RAM speichern. Ich meine je 1 Bit für jede Minute. Der Controller fragt jede Minute im RAM ab ob das entsprechende Bit gesetzt ist, wenn ja liest er die passende (fixe) Adresse im EEPROM, vergleicht danach Stunde, Monat, Tag, Wochentag und falls diese übereinstimmen springt er die Adresse mit dem auszuführenden Befehl an. | ||
+ | Damit würde man nur 60 bit (pro Minute 1) = 8 byte RAM benötigen. Außerdem würden nur dann EEPROM-Zugriffe erfolgen, wenn tatsächlich zur aktuellen Minute Befehle vorliegen würden. | ||
+ | Zur Initialisierung müsste das EEPROM beim booten 1x komplett gelesen werden, damit die entsprechenden Bits im RAM gesetzt werden. | ||
Aktuelle Version vom 7. Februar 2010, 10:46 Uhr
Name: Alex
Alter: 34
Beruf: Angestellter
Mail: atuschen (ät) web (punkt) de
Linux-Nutzer (Sidux/Debian/Ubuntu), Hobbyelektroniker, C-Anfänger, Pascal-Progammierer (seit Turbo Pascal 3.0, mittlerweile FreePascal)
Mein Ethersex-Setup:
- Pollin AVR-NetIO - ATmega644/20MHz - RFM12 (433 MHz) - 4x Tevion Funkschalter - 4x Tevion Funkdimmer - 4x 2272 Funkschalter - 3x Pollin UP-Funkdimmer - Pollin K8IO Relaiskarte über PCF8574A am I2C-Bus - 2x20 LCD über PCF8574 am I2C-Bus - 8 Taster über PCF8574 am I2C-Bus - 24C256 32KB EEPROM am I2C-Bus alternativ 24C65 8KB EEPROM
Alles zur Zeit im fliegenden Aufbau auf mehreren Lochrasterplatinen:
Ich habe den HD44780-Treiber entsprechend angepasst, so dass die Ausgabe über den PCF8574 läuft. Die Hintergrundbeleuchtung vom LCD ist schaltbar, ebenso eine zusätzliche LED (den R/W-Pin vom LCD benutze ich nicht). Den zweiten PCF8574 für die Taster frage ich zur Zeit periodisch in der appsample.c ab, möchte aber später den Interrupt-Ausgang des PCF nutzen.
Geplante Erweiterungen:
- DCF77-Empfänger - RFM12 (868 MHz) oder FS20 Sender/Empfänger - Heizkörper-Thermostate (Funk/868 MHz) - Rolladen-Gurtwickler (Funk/868 MHz) - Türschließer (z.B. Keymatic von ELV, Funk/868MHz) - Selbstbau-Fernbedienung(en) für alle Funktionen (z.B. ATmega8L+RFM12) - Selbstbau-Funk-Codeschloß an der Eingangstür - diverse Sensoren zur Steuerung, z.B. Fotozelle für die Rolläden, Temperaturfühler für Heizung...
Angedacht ist folgende Haus-/Wohnungssteuerung:
An Arbeitstagen mit Frühschicht:
Morgens zur Weckzeit(5:00-5:30) im Schlafzimmer langsam das Licht hochdimmen (funktioniert bereits). Ca. 30 Minuten bis 1 Stunde danach und/oder ab einem gewissen Schwellwert des Außen-Lichtsensors die Rolläden hochziehen.
An Arbeitstagen mit Spätschicht oder arbeitsfreien Tagen :
Ab einem gewissen Schwellwert des Außen-Lichtsensors (evtl. in Kombination mit der Uhrzeit) die Rolläden hochziehen.
Da sich die Verteilung von Früh- bzw. Spätschicht manchmal kurzfristig ändern kann, benötige ich eine flexible Lösung, welche sich mit "wenig" Aufwand ändern lässt.
Nicht akzeptabel ist für mich, wegen jeder Änderung den Controller neu flashen zu müssen (begrenzte Flash-Zyklen, bei Verwendung des Bootloaders ist ein laufender Rechner notwendig).
Auch die Lösung mit dem dynamischen Cron ist mir nicht ganz recht, da ich im Idealfall mindestens 2x7 Schaltzeiten benötige (1 Woche Spät, 1 Woche Frühschicht im Wechsel + Wochenende).
Dafür ist mir der RAM im ATMega zu knapp. Also müssen die Schaltbefehle in einen externen nichtflüchtigen Speicher verlagert werden, den ich im laufenden Betrieb ändern kann. Prädestiniert dafür wäre der 4Kbit High-Endurance-Block eines 24C65 I2C-EEPROMS, welcher laut Datenblatt ca. 10 Mio Schreibzyklen verträgt. Da dieser Block nur 512 Byte groß ist, müssten die auszuführenden Befehle (welche sich nur selten ändern) in einem anderen Bereich gespeichert werden. Nur die Schaltzeiten/Tage müßten im High-Endurance-Block stehen. 3-4 byte reichen zur Codierung der Schaltzeiten aus, wodurch sich mindestens 128 Schaltzeitpunkte speichern lassen. Das wäre mehr als ausreichend für meine Zwecke.
Ein Problem dabei könnte der (relativ) langsamge Zugriff auf den externen EEPROM sein. Also würde ich zu jeder Minute pro Stunde in der ein Befehl vorhanden ist paralell ein Eintrag im RAM speichern. Ich meine je 1 Bit für jede Minute. Der Controller fragt jede Minute im RAM ab ob das entsprechende Bit gesetzt ist, wenn ja liest er die passende (fixe) Adresse im EEPROM, vergleicht danach Stunde, Monat, Tag, Wochentag und falls diese übereinstimmen springt er die Adresse mit dem auszuführenden Befehl an. Damit würde man nur 60 bit (pro Minute 1) = 8 byte RAM benötigen. Außerdem würden nur dann EEPROM-Zugriffe erfolgen, wenn tatsächlich zur aktuellen Minute Befehle vorliegen würden. Zur Initialisierung müsste das EEPROM beim booten 1x komplett gelesen werden, damit die entsprechenden Bits im RAM gesetzt werden.
An allen Tagen:
Ab einer bestimmten Uhrzeit oder über Lichtsensor die Rolläden runterfahren.
Immer beim Verlassen der Wohnung am Tür-Code-Schloß außen die Codenummer eingeben: Alle elektrischen Geräte die über Funkschalter laufen, werden abgeschaltet (nur zur Sicherheit). Ebenso alle Lampen abschalten, sowie Computer per Script herunterfahren. Haustür verschließen.
Vorm Betreten wieder Code eingeben: Haustür wird aufgeschloßen. Falls es bereits dunkel ist bzw. zu unterschiedlichen Urhzeiten, werden bestimmte Beleuchtungsprogramme aktiviert.
Diverse Beleuchtungs-/Schaltprogramme per Fernbedienung abrufbar. z.B.: "Heimkino" -> Wohnzimmerlampen herunterdimmen oder Rolläden runterfahren, Anlage+Beamer einschalten (funktioniert bereits teilweise).
Heizkörper je nach An-/Abwesenheit (wird ja über Code-Schloß festgestellt) und Raum- bzw. Außentemperatur regeln.
Prinzipiell möchte ich soviel über Funk (RFM12-Module) machen, wie möglich/sinnvoll: z.B. Außentemperatur/Helligkeit. Bevor ich mit den Platinenlayouts anfange, möchte ich Versuchsaufbauten auf Lochrasterplatinen (zur Zeit) oder besser Steckboards (waren mir bisher zu teuer) machen.