Forum: Mikrocontroller und Digitale Elektronik Tages Countdown Energieeffizient mit AVR realisieren?


von Eric F. (efro)


Lesenswert?

Hallo allerseits,

ich bin ein ziemlicher Neuling was Mikrocontroller betrifft und habe 
deshalb ein paar Fragen, ich hoffe, ihr könnt mir weiterhelfen.

Ich plane einen Countdown zu einem bestimmten Datum (er soll also jeden 
Tag eine Ziffer herunter zählen).

Wie viele Tage noch ausbleiben bis zu dem gewählten "Stichtag" soll auf 
zwei 7-Segment-anzeigen angezeigt werden, die Tage werden nicht über 99 
gehen in meinem Fall.

Ein Atmega88 soll die Aufgabe übernehmen, nur ist jetzt noch zu sagen, 
dass ich das ganze Projekt gerne im Batteriebetrieb laufen lassen würde, 
was sich bei Uhren als garnicht mal so einfach heraus stellt.

Das sind die Gedanken, die ich mir schon mal gemacht habe:

Ich könnte eine RTC für die Uhr benutzen, der Vorteil ist, dass ich 
diese mit einer Knopfzelle einzeln versorgen kann. Ursprünglich wollte 
ich die DS1307 benutzen, habe aber gelesen sie sei nicht besonders gut 
(Grund wurde nicht genannt)? Wenn hier jemand einen konkreten Vorschlag 
hat, wäre ich sehr dankbar.

Damit die LEDs nicht dauerhaft laufen, wollte ich gerne einen PIR- 
Sensor benutzen, da dieser nicht viel Strom im Standby verbraucht und er 
den Atmega88 per interrupt aufwecken könnte. Bei diesem event möchte ich 
auch mit dem Atmega die Uhrzeit von der RTC abfragen, damit ich das auch 
nicht im loop mache. Nach ein paar Sekunden, soll das ganze wieder 
einschlafen, bis der Sensor wieder ausschlägt.

um die Tage rückwärts zu zählen hatte ich gedacht, ich setze ein 
konkretes Datum und ziehe dann die Differenz vom einen Datum zum 
nächsten... Hierzu bräuchte ich einen Datums typen. ist das in C für 
einen Atmega möglich? Kann ich einfach die Differenz an Tagen bestimmen 
(ich dachte so an ein Date package oder ähnliches) oder benötige ich 
einen Workaround?

Was die spätere Einstellung betrifft, dachte ich, ich benutze einen 
Knopf zum erhöhen des Tages und einen anderen zum Herunterzählen des 
Tages, das soll einfach auf der Anzeige dargestellt werden und reicht 
für meinen Fall aus.


Was sind eure Meinungen dazu?
Die Wichtigste Frage ist, ob meine Gedanken geeignet sind, um alles mit 
Batterie betreiben zu können, damit es auch vielleicht einige Monate 
durchhält (bei moderater Nutzung der LED anzeige).

Habt ihr Verbesserungsvorschläge was die Energieeffizienz betrifft?
Ich bin um jeden Vorschlag dankbar und freue mich auf Antworten.

von Michael B. (laberkopp)


Lesenswert?

Eric F. schrieb:
> Was sind eure Meinungen dazu?

Man nimmt ein LCD Display.

https://www.reichelt.de/lcd-7-segment-1x2-h-12-7mm-reflektiv-lcd-2-0-13-p10179.html

und dazu einen AVR mit mindestens 17 I/O der an einem 32kHz Uhrenquartz 
läuft

https://www.reichelt.de/mini-uhrenquarz-0-032768-mhz-tc38-0-032768-p1089.html

dann spart man sich die RTC und den Bewegungsmelder und die Tage werden 
dauernd angezeigt.

Noch ein paar Knöpfe zum einstellen und fertig, als Batterie 3 
Mignonzellen in Batteriehalter

https://www.reichelt.de/batteriehalter-fuer-3-mignon-aa-geschlossen-halter-3xaa-p44631.html

: Bearbeitet durch User
von Neverever (Gast)


Lesenswert?

Michael B. schrieb:
> Eric F. schrieb:
>> Was sind eure Meinungen dazu?
>
> Man nimmt ein LCD Display.

Laberkopp. Dafür nimmt man natürlich ein E-Ink-Display.

von Chris K. (Gast)


Lesenswert?

Die DS1307 ist verhältnismäßig ungenau. Besser DS3231 verwenden.
Beim Arudino gibt es die Möglichkeit mit Millis() sich die Zeit seit dem 
Einschalten des Systems ausgeben zu lassen. Harken an der Sache, der 
Counter läuft alle 49 Tage über, das muss man also abfagen, wenn man 
länger zählen will. Auch läuft Millis vom externen Clock, also ebenfalls 
mit entsprechender Abweichung. Generell finde ich die Idee gut mit der 
RTC zu arbeiten. Für dei DS3231 gibt es eine ganz nette Bibiothek. Auch 
kann man den DS3231 so einstellen, dass er zu einem bestimmten Zeitpunkt 
einen Interrupt erzeugt. Somit kannst du dir auch den Pir sparen. 
Einfach den Wecker stellen und den Arudino auf dem Power Down Modus 
holen für die Dauer der Anzeige, dann Wecker neu stellen und Arudino 
wieder schlafen schicken.

von Eric F. (efro)


Lesenswert?

Michael B. schrieb:
> Eric F. schrieb:
>> Was sind eure Meinungen dazu?
>
> Man nimmt ein LCD Display.

Danke für die schnellen Antworten.
Die Idee mit dem LCD display gefällt mir schon mal ganz gut, daran hatte 
ich gar nicht gedacht.

Ich bin etwas verwirrt, ich habe mal ins Datenblatt geschaut, dort 
sprechen sie von "Voltage mode STATIC"
Allerdings habe ich gelesen, dass es nicht wirklich gut ist, bestimmte 
Segmente für längere Zeit polarisiert zu lassen, oder kümmert sich die 
anzeige da eigenständig drum?

von Johannes S. (Gast)


Lesenswert?

Flip Dot Display, sieht auch schön Retro aus.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Eric F. schrieb:
> oder kümmert sich die
> anzeige da eigenständig drum?

Nein - sogen. 'raw' LCD Gläser möchten mit AC betrieben werden, sonst 
kommt es zu Elktrolyse und Zerstörung des Displays.
Die kann man aber sehr langsam takten, z.B. mit 20-50Hz. Von so gut wie 
allen MC Herstellern gibt es dazu Application Notes, die mit simplen 
GPIO Pins solche LCDs ansteuern.
Es wäre also durchaus möglich, den ganzen MC mit dem 32kHz Uhrentakt 
laufen zu lassen und damit sehr stromsparend.
PIC: AN563 'Using PIC16C5X Microcontrollers as LCD Drivers'
AVR: AVR241: 'Direct driving of LCD display using general IO'

: Bearbeitet durch User
von Jacko (Gast)


Lesenswert?

Ein LCD-Display braucht 6 Anschlüsse zum µC
+ Uhrenquarz: 8 Anschlüsse
+ V+, V- und Reset: 11 Anschlüsse

Damit kommt bei AVR ein Tiny24 (14 Anschlüsse) in die Auswahl,
wobei noch 1 Taste zum Einstellen der Tage, 1 Taste zum
Aktivieren der Anzeige und ein Pin für die Einschaltung des
LCD-Displays + Beleuchtung über einen FET möglich sind.

Mit 3 AAAs läuft das 1 Jahr und länger.

von spess53 (Gast)


Lesenswert?

Hi

Gewöhnt euch endlich mal dieses dümmliche "LCD Display" ab.

MfG Spess

von Jacko (Gast)


Lesenswert?

@spess53 (Gast)

Tschuldigung, da haste recht!
Darfst aber dafür meinen Uhrenquarz ohne 't' loben!

von c-hater (Gast)


Lesenswert?

Jacko schrieb:

> Ein LCD-Display braucht 6 Anschlüsse zum µC

Du meinst so ein typisches Textdisplay. Das ist energetisch aber 
ziemlich suboptimal, auch wenn die sparsamsten dieser Dinger inzwischen 
wirklich recht genügsam sind. Aber mit irgendwas zwischen 100µA und 1mA 
Dauerverbrauch muss man trotzdem rechnen.

Deutlich sparsamer sind "naked" LCDs. Der Nachteil: man braucht sehr 
viel mehr Pins, um sie anzusteuern. Für ein zweistelliges 
Siebensegment-Display halt mindestens 15. Aber Controller mit dafür 
hinreichender Pinzahl gibt's ja nun wirklich wie Sand am Meer.

von Soziologe (Gast)


Lesenswert?

Früher nahm Mann einfach ein Massband.
Und schnitt jeden Tag einen cm ab.

Energieeffizient ohne Ende!

von Horst (Gast)


Lesenswert?

Soziologe schrieb:
> Energieeffizient ohne Ende!

Nicht wenn Du es wiederverwenden willst. Immer diese 
Wegwerfgesellschaft.

von Jacko (Gast)


Lesenswert?

@ c-hater (Gast)

Netter Einwand! Aber...

Wer lesen kann, sieht, dass ich einen Anschluss für die 
Anzeige-Aktivierungstaste und einen Anschluss für LCD ON bedacht habe. 
Damit spart man 7 Pins und ne Menge Energie, weil die Anzeige nur auf 
Tastendruck für einige Sekunden Strom frisst.

von my2ct (Gast)


Lesenswert?

Chris K. schrieb:
> Auch kann man den DS3231 so einstellen, dass er zu einem bestimmten
> Zeitpunkt einen Interrupt erzeugt. Somit kannst du dir auch den Pir
> sparen. Einfach den Wecker stellen und den Arudino auf dem Power
> Down Modus holen für die Dauer der Anzeige, dann Wecker neu stellen
> und Arudino wieder schlafen schicken.

Woher weiß der Arduino beim Stellen des Weckers, wann das nächste mal 
jemand vor der Anzeige ist, um sie zu betrachten?
Da ist der PIR deutlich im Vorteil.

von Eric F. (efro)


Lesenswert?

Ich danke euch für die vielen sehr hilfreichen Antworten.

Mein aktualisierter Ansatz ist jetzt folgender:

Ich werde ein LCD verwenden und dieses mit Code-seitigen XORs betreiben, 
damit ich meine Wechselspannung erhalte. Ich bin mir nicht sicher aber 
ich habe tatsächlich ein paar Treiber für 7-Segment LEDs (CD4511BE) da 
und hatte überlegt, dass das doch genauso funktionieren sollte.
So könnte ich mir ein paar Pins sparen.

Was die Zeitmessung betrifft, muss ich mich noch ein bisschen mit 
Quarzen beschäftigen, am besten wäre es natürlich ich programmiere eine 
Uhr und sorge dafür dass sie alle 24 stunden (Vorzugsweise um 00:00Uhr) 
meine Anzeige neu ansteuert.

Chris K. schrieb:
> Auch kann man den DS3231 so einstellen, dass er zu einem bestimmten Zeitpunkt 
einen Interrupt erzeugt.

Hiermit könnte ich ja die Uhr einmalig stellen, die ist also versorgt, 
was mir das einstellen spart, wenn ich mein Projekt dann fertiggestellt 
habe und aufbauen will.
Den Wecker könnte ich dann auch jedes mal auf 00:00Uhr stellen, dass der 
Interrupt das Herunterzählen der Zeit verursacht.

von c-hater (Gast)


Lesenswert?

Eric F. schrieb:

> Ich bin mir nicht sicher aber
> ich habe tatsächlich ein paar Treiber für 7-Segment LEDs (CD4511BE) da
> und hatte überlegt, dass das doch genauso funktionieren sollte.
> So könnte ich mir ein paar Pins sparen.

Nein, das funktioniert so nicht. Damit der Ansatz funktionieren könnte, 
bräuchtest du einen 7-Segment-Decoder, der einen zusätzlichen Anschluss 
hat, um ein invertiertes Muster ausgeben zu können. Naja, man könnte 
natürlich an den Ausgängen auch noch einen zusätzlichen 7-Kanal-Inverter 
anbringen...

Sinnvoller wäre: Schieberegister mit Latch. Dann kannst einfach das 
gesamte Pattern (inclusive COM-Anschluss) seriell raustakten und dann zu 
den Ausgängen "durchstellen". D.h.: du brauchst dann nur noch drei 
Anschlüsse am µC: seriellen Takt, serielle Daten und LatchControl.

Noch sehr viel sinnvoller: einfach einen µC mit hinreichend vielen 
Beinchen verwenden...

von Stefan F. (Gast)


Lesenswert?

Die Idee mit dem PIR Sensor gefällt mir.

LED Anzeige und Batteriebetrieb sind keine sehr glückliche Kombination. 
LC-Displays sind sparsamer aber auch weniger auffällig. Das musst du 
selbst entscheiden.

Anstatt einen µC + RTC zu kombinieren, könntest du auch einen 
Mikrocontroller mit integrierter RTC benutzen.

Zum Beispiel ein "STM32F103C8T6 Module" von Aliexpress oder Amazon. 
Kostet nur ca. 2 Euro. Dessen RTC enthält keinen Kalender, sondern zählt 
einfach Millisekunden hoch. Ein Tag entspricht 24*60*60*1000 
Millisekunden.

Für die ersten Schritte mit diesem STM32 hilft Dir vielleicht mein 
Büchlein http://stefanfrings.de/mikrocontroller_buch2/index.html und die 
Notizen auf http://stefanfrings.de/stm32/index.html .

> (Datums-Kalkulation) ist das in C für einen Atmega möglich?

Ja sicher, ist kein Hexenwerk.

Egal welchen µC und/oder Uhr du verwendest: irgendwie muss das Ding 
wissen, wann Mitternacht ist. Also musst du entweder die aktuelle 
Uhrzeit einstellen können, oder zumindest die Anzahl der Stunden bis 
Mitternacht. Oder jemand muss um Mitternacht einen Start-Knopf drücken 
(fände ich nicht so gut).

von Sebastian S. (amateur)


Lesenswert?

Ich würde eine externe RTC nehmen, diese so programmieren, dass 
irgendwann der µP aufgeweckt wird. Der natürlich in der Zwischenzeit ein 
Nickerchen machen darf.

Soweit mir bekannt, ist die minimale Stromaufnahme der aktuellen RTCs, 
super. Die meisten haben einen Interruptausgang, mit dem man sogar tote 
aufwecken kann.
Da es sich um eine Uhr handelt, braucht man sich im µP auch nicht mehr 
um die Tickerei zu kümmern.

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.