Sehr lange Zeitspannen?

Gast #804709
Lesenswert?

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!
(Firma: TravelRec.) Persönliche Seite #804739
Lesenswert?

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.
#804766
Lesenswert?

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
Persönliche Seite #804768
Lesenswert?

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.
Persönliche Seite #804773
Lesenswert?

So hab ich das z.B. mit meiner Relaiskarte gemacht:
1
  /* update and evaluate all active timers */
2
  for (i=0; i<=5; i++)
3
  {
4
    if (timers[i].active)
5
    {
6
      switch (timers[i].type)
7
      {
8
        case TIMER_TYPE_ON:
9
          if (--(timers[i].units) == 0)
10
          {
11
            relay_control((1 << i), RELAYOP_ON);
12
            timers[i].active = 0;
13
          }  
14
          break;
15
  
16
        case TIMER_TYPE_OFF:
17
          if (--(timers[i].units) == 0)
18
          {
19
            relay_control((1 << i), RELAYOP_OFF);
20
            timers[i].active = 0;
21
          }
22
          break;
23
  
24
        case TIMER_TYPE_CYCLIC:
25
          if (--(timers[i].units) == 0)
26
          {
27
            relay_control((1 << i), RELAYOP_TOGGLE);
28
      
29
            timers[i].units = timers[i].reset_value;
30
          }
31
          break;
32
  
33
        default:
34
          break;
35
      }
36
    }
37
  }
Gast #804816
Lesenswert?

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.
#804861
Lesenswert?

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.
Gast #804882
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren