Hallo liebe Leute!
Ich habe mal eine Frage wie man folgendes Problem mit einem
Mikrocontroller (atmega16) lösen kann.
Gehen wir mal von dem Beispiel aus, ich möchte meine Rolläden jeden Tag
um 18 Uhr herunterfahren lassen. Wie kann man den Mikrocontroller eine
so lange Zeit "warten" lassen, während er nichts zu tun hat?
Ich weiß es zum Beispiel von Lichtschranken-Messungen, dass bereits 10
sekunden eine ewig lange Zeit sind, die man umständlich herunterteilen
muss (Prescaler, usw. selbst bei einer "geringen" TaktFrequenz von 1
MHz).
Wie lässt man den dann alle 24 Stunden EINMAL kurz einschalten?
Danke!
Sekundentakt im Controller erzeugen (Timer mit Prescaler und CTC +
Zählvariable), bei 60 Sekunden übertrag auf 1er Minuten, bei 10 Minuten
Übertrag auf 10er Minuten, bei 60 Minuten Übertrag auf 1er Stunden, bei
10 Stunden Übertrag auf 10er Stunden, nach 24 Stunden alles löschen. Für
jedes "Digit" wird ein Byte als Zähler genutzt. Bei Verwendung von sehr
genauen Uhrenquarzen (4,194304 Mhz oder 32,768 kHz) geht die Uhr dann
auch entsprechend genau. Alternativ kann die Schaltung durch ein
DCF-Modul aufgewertet werden, wodurch außerdem das Umstellen von Winter-
auf Sommerzeit und umgekehrt entfällt.
Du kannst mit recht einfachen Mitteln eine Uhr programmieren. Die musst
halt beim Einschalten auch einmal stellen. Und dann kannst z.B. nen
Timer installieren, der die Uhr jede Sekunde erhoeht und dort pruefen,
ob fuer die Aktuelle Zeit z.B. ein Ereignis auszuloesen ist.
Hi,
Du machst einen Timerinterrupt mit 100 Hz. (Vorteiler 1024, Preload 155
bei 16Mhz)
Darin zählst Du eine 64 Bit Variable hoch. Bei 8640000 hast Du dann 1
Tag.
Gruß
Andy
Konsolenexperte wrote:
> Ich weiß es zum Beispiel von Lichtschranken-Messungen, dass bereits 10> sekunden eine ewig lange Zeit sind, die man umständlich herunterteilen> muss (Prescaler, usw. selbst bei einer "geringen" TaktFrequenz von 1> MHz).
Das erzeugen langer Zeiten ist mit einem MC überhaupt kein Problem.
Du läßt einen 16Bit-Timer den Quarztakt zählen (z.B. 8MHz).
Und im Overflowinterrupt zählt Du ganz profan Variablen runter, wenn
eine durch 0 geht, die nächste usw.
Und wenn die letzte durch 0 geht, machst Du Dein Ding und setzt sie alle
wieder auf den benötigten Startwert.
In C kann man auch Mehrbytevariablen nehmen (int, long oder long long).
Mit nur 8 Byte lassen sich Zeiten bis zu mehreren Giga-Jahren zählen,
das sollte ja wohl reichen.
Peter
Man kann natuerlich auch einfach mit relativen Zeiten arbeiten. Fuer
eine Rolladensteuerung halte ich das aber nicht fuer ausreichend, da man
hier ja nach Tageszeit arbeitet. Ansonsten kann man natuerlich sagen,
wenn in 10 Minuten ein Ereignis auszueloesen ist, initialisiere eine
entsprechende Variable mit 600, dekrementiere im Sekundentakt und loese
das Ereignis beim Eintreten der 0 aus.
Viel schöner und logischer ist es, wenn man den Rollladen von der
Tageshelligkeit her steuert. Dazu reicht ein Fototransistor, eventuell
mit Plexiglas-Lichtleiter.
Das Schöne dabei ist, man bekommt über die Tageshelligkeit in Form der
Rollladenfahrt den Jahreslauf richtig mit.
Man kann sogar zwischendurch den Kontroller in den sleep modus stellen
und ihn per Schmitt-Trigger am Fototransistor nur kurzzeitig aufwecken.
Einziger Nachteil dabei (aus eigener Erfahrung): man weiß nie genau,
wann der Rolladen herunter kommt und muß somit immer Obacht geben, daß
sich in dem Moment keine Dinge und / oder Lebewesen auf der Fensterbank
befinden ;-)
uCler wrote:
> Hallo Michael,>> auf einem Controller wuerde ich eher auf % verzichten, und mit >> arbeiten.>
:-)
Der Controller dreht 24 Stunden Däumchen, und du machst dir
Sorgen wegen 100 Nanosekunden?
:-)
Man könnte auch 2 Controller nehmen:
Einen hängt man an einer Schnur auf und benutzt ihn als
Pendel.
Der 2.Controller hat dann die Aufgabe das Pendel regelmässig
anzusteuern und die Schwingung in Gang zuhalten UND die Anzahl
der Schwingungen zu zählen. Bei einer bestimmten Anzahl ist
dann ein Tag rum.
Dann hätte der zweite Controller wenigstens was zu tun anstatt
nur stumpfsinnig die Zeit runterzuzählen.
Das erinnert mich an die schöne (und nicht authentische :) Geschichte
von Niels Bohr und seiner Prüfungsfrage, wie man mit einem Barometer die
Höhe eines Hause vermessen kann:
http://www.snopes.com/college/exam/barometer.asp
Hallo Karl heinz,
da gebe ich Dir prinzipiell Recht - wenn es um Rolladen geht. Im
Automotive Bereich gibt es vergleichbare Anwendungsfälle. Und meistens
dann, wenn der Motor nicht laeuft. Und dann kaempft man um jedes uA.
Mittlerweile kommt bei mir der Strom auch aus der Steckdose - aber es
ist halt noch tief drin...
Gruss Udo