Forum: Mikrocontroller und Digitale Elektronik Timer


von Niki Hammler (Gast)


Lesenswert?

Hi,

Endlich hab ich alles geschafft!

Ich kann über meine IR Fernbedienung meine Lichter aus und einschalten, 
die IR Signale, die der uC nicht verwerten kann werden via RS232 an den 
PC weitergeschickt und von "lirc" verarbeitet.
War ein schönes Stück Arbeit, aber jetzt hab ichs endlich!

Da mein PC ja nicht immer läuft, soll alles unabhängig von dem sein, 
deshalb decoded ja auch der uC die IR Signale und nicht der Computer.

Jetzt hätt ich noch gerne, dass ich über die IR Fernbedienung einen 
Timer einschalten kann, mit dem nach einer abgelaufenen Zeit 
irgendwelche Relais die Zustände ändern.

Ich hab da schon so ne Vorstellung von wunderschönen Menüs auf LCD Basis 
und auch schon ne Idee wie ich es mache. Jedoch das Hauptproblem sind 
die Timer.
Timer1 brauche ich für sozusagen den Hauptinput, den RC5 Decoder und den 
will ich nicht anrühren.

Timer2 werde ich noch für irgendwelche Systemaufgaben benötigen und will 
ich irgendwie auch nicht für das verwenden. Und zusätzlich kommen da ja 
auch grosse Intervalle raus.
Die sollen von einer Minute bis zu unbegrenzt, vielleicht 24 Stunden 
gehen.

Also z.B. ich hab das Licht eingeschaltet und mit ein paar Klicks auf 
die IR Fernbedienung soll jetzt ein timer eingestellt werden mit dem das 
Licht zu einer bestimmen Zeit ausgeschaltet wird.

Hat wer eine Idee wie ich das anstellen könnte?

Ich dachte vielleicht an einen externen Timer Baustein, dem ich über 
eine Leitung eine Zeit zusende und nach einer bestimmten Zeit triggert 
er mir INT0.
An was ich dabei auch nicht gedacht habe, ist, dass ich dann auch nur 
einen Timer steuern kann. Ich möchte aber wie gesagt mindestens die 3 
Relais "timern" können.

Hat da wer eine Idee wie ich das machen könnte?

thx

Niki

von Lothar (Gast)


Lesenswert?

Dieses Problem ist leicht lösbar mit einer RealTimeClock z.B. auf 
Timer1.

Dieser aktualisiert z.B. bei jeden 1024.ten CPU-Takt die Zeitregister 
Sekunde, Minute, Stunde.

Mit jeder neuen Minute / Stunde könnte man einen von Null verschiedenen 
Pausezähler dekrementieren. Hat ein Pausezähler NULL erreicht, passiert 
nichts.

Der Mehrcode in der INT-Routine beschränkt sich auch ein paar Worte pro 
Pausezähler. Nachteilig ist, das man diese Zähler in der LOOP des 
Main-Programmes testen und ggf. reagieren muss.

Lothar

von Thomas Fischl (Gast)


Lesenswert?

Hi!

Den Timer1, also den 16Bit-Timer, verwendest du für deine 
RC5-Decodierung.
Dann gibt es noch einen 8Bit-Timer: Timer0.

Für welche Systemaufgaben willst du diesen später mal nutzen?
Wenn das Aufrufe mit festen Intervallen werden soll, könntest du diesen 
auch für deine Relaisschaltung hernehmen: z.B. den Timer auf 0.01 s 
einstellen. Bei jedem Aufruf arbeitest du deine "Systemaufgabe" ab und 
erhöhst einen Zähler. Diesen Zähler setzt du dann bei 100 zurück und 
kannst so jede Sekunde was für deinen Relais-Countdown machen (z.B. 
wieder Zaehler erhöhen).

Ich würde nicht unbedingt auf externe Hardwarekomponenten setzen, wenn 
man es anders irgendwie lösen kann.

Thomas

von tobiasweis (Gast)


Lesenswert?

kannst du mir das programm mal geben bin schon lange auf der suche nach 
so einem programm.

von Peter D. (peda)


Lesenswert?

Du benutzt warscheinlich die umständlichste Methode der Welt zur RC5 
Decodierung.

Ja die wird leider sehr oft publiziert. Ist vielleicht für einen 
Hardwaredecoder sinnvoll, verbraucht aber eine Unmenge Ressourcen in 
Software.

Der RC5-Code ist ein Manchestercode. Such mal danach in diesem Forum, da 
findest Du meinen einfachen Code und auch Fragen und Erläuterungen dazu.

Mein Code benötigt keinerlei externe Interrupts und nur einen 
freilaufenden Timer. Daher kannst Du in diesen Timerinterupt noch 
beliebig viele andere Zeitfunktionen einfach mit einfügen.



Peter

von thkaiser (Gast)


Lesenswert?

Ich habe bei solchen Projekten grundsätzlich einen "Systemtimer" laufen, 
meistens mit 10 Hz. Mit diesem kann man dann massig Software-Timer 
aufbauen, die für solche Schaltaufgaben geeignet sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.