Forum: Mikrocontroller und Digitale Elektronik Zeit auf Display Anzeigen


von Gabriel (Gast)


Lesenswert?

Hallo zusammen,

ich programmiere einen LCD Display mit einem ATmega32 und benutze den
ICCAVR compiler. Soweit ist alles in Ordnung und funktioniert schon das
Schreiben... Möchte aber jetzt die Zeit auf dem Display anzeigen und
diese dann in sekunden takt runter zählen... Bedeutet, wenn ich jetzt
zum bsp 00:20 eingestellt habe, soll diese Zeit dann in sekunden runter
gezählt werden 00:19 00:18.....

Hat jemand eine Idee, wie ich das realisieren kann? Bin nicht sooo fit
in der Programmierung!

von vorbeigeschlendert (Gast)


Lesenswert?

hast du schon mal folgende Geschichten programmiert:
- Ausgabe beliebiger Zeichen auf einem Display
- Timerfunktionen

ja: dann ist das ja kein Problem
nein: dann fang mal mit den Grundlagen an, dann das Display und wenn du
die Anzeige bedienen kannst dann mach dir an die Timerfunktionen und bau
das zusammen

von Rahul (Gast)


Lesenswert?

Man nehme einen Timer und stelle ihn so ein, dass er im Sekundentakt
oder in Vielfachen dessen einen Interrupt erzeugt.
In der Interrupt-Service-Routine setzt man dann ein Flag.
Dieses Flag wird in der Hauptschleife abgefragt.
Ist es nicht gesetzt, braucht nichts weiter passieren.
Ist es gesetzt, dann zählt man die Sekunden-Variable herunter,
aktualisiert das Display und löscht das Flag.
Dann wartet man wieder auf das Flag...

von Wolfram (Gast)


Lesenswert?

>Bedeutet, wenn ich jetzt zum bsp 00:20 eingestellt habe, soll diese
>Zeit dann in sekunden runter gezählt werden 00:19 00:18.....

nimm lieber 1 Minute, dann kanst du noch weiter wegrennen bis es
knallt.
;-)

Deine Sekundenvariable zerteilst du in Minuten ,10 Sekundenanteile ,1
Sekundenanteile und gibst diese als Zeichen auf das Display aus.

von Gabriel (Gast)


Lesenswert?

hat jemand einen beispielprogramm wo einen ähnlichen Problem gelöst
wird?

von Hannes L. (hannes)


Lesenswert?

> hat jemand einen beispielprogramm wo einen ähnlichen Problem gelöst
> wird?

Ja, aber es wird dir nicht gefallen, denn es zählt nicht runter (bis
zum großen Bumm), sondern hoch. Es benutzt auch nicht den
ICCAVR-Compiler.

http://www.hanneslux.de/avr/stopuhr/index.html

...

von Karl H. (kbuchegg)


Lesenswert?

Nun, ja. Das sind eigentlich Grundlagen. Die solltest
du schon alleine hinkriegen. Zumindest solltest du es
versuchen. Fang mal damit an, eine einzelne LED im
Sekundentakt blinken zu lassen. Das ist dein Einstieg.
Dann sollte es nicht weiter schwer sein: Anstatt
die LED einzuschalten, zaehlst du eine Vaiable herunter
Wenn die Variable heruntergezählt wird, aktualiserst du noch
das Display und bist fertig. Das schwierigste ist aber
den 1-Sekunden Takt hinzukriegen. Damit musst du anfangen.
(Keine Angst: soooo schwer ist das auch wieder nicht).

Wenn du konkrete Probleme hast, wie zb. Wie funktioniert
XYZ, dann wird dir sicher auch wer helfen. Aber so einen
Rundumschlag, ala: "Ich möchte ABC machen hab aber keine
Ahnung. Helft mir!" ist selten in einem Forum zielführend.

von Gabriel (Gast)


Lesenswert?

Hi Hanne
es hilft nicht weiter, da es in assembler ist :-) ich programmiere in C

von Michael K. (onkel_michi)


Lesenswert?

Hallo Gabriel,

ich bin auch noch ein "Frischling" auf dem Gebiet der AVR
Programmierung. Deshalb masse ich mir mal an, folgendes zu schreiben:

Schau mal mit der Suchfunktion durch das Forum und suche da nach
Fleury, HD44780 (Wenn Dein Display einen solchen Controller hat),
Timer, ...

Du wirst staunen, was Du da findest...

Wenn Du dann mal in Google nach der Peter Fleury LCD-Bibliothek suchst,
dann wirst Du staunen, wie einfach das ist, ein LCD zu steuern.

Solltest Du dann noch Probleme haben, wie man einen Algorhitmus (bei
falscher Schreibweise, bitte nicht hauen) entwickelt, der die Zeit
rückwärts zählt und den dann in C umzusetzen, dann mach es wie ich, als
ich mit dem AVR-Programmieren angefangen habe: Bücher lesen, Googlen,
Forensuche benutzen.

Das bringt Dir wirklich mehr, als wenn Du hier von jemandem einen
fertigen Code bekommst.

Ich kann Dir da auch nicht helfen, aber es ist eine schöne Aufgabe, die
ich mir wohl auch mal in einer oder zwei ruhigen Stunden vornehmen
werde.

So, nun kannst Du auf mir rumhacken.

Michael

von Hannes L. (hannes)


Lesenswert?

> es hilft nicht weiter, da es in assembler ist :-)

Das war mir von Anfang an klar :)

> ich programmiere in C

Ich befürchte, dass du "Programmieren" mit "Kopieren" verwechselst.
Falls ich mich irren sollte, kannst du mich/uns gerne vom Gegenteil
überzeugen.

...

von Rahul (Gast)


Lesenswert?

Vervielfältigst du deine Programme nicht auch, indem du deine Controller
auf einen Kopierer legst? Mit Disketten und Festplatten geht das auch.
Disketten kann man auch 1-A faxen, wenn man sie aus der Hülle nimmt...

von Gabriel (Gast)


Lesenswert?

Danke zusammen, geht schon

von Karl H. (kbuchegg)


Lesenswert?

> Solltest Du dann noch Probleme haben, ... der die Zeit
> rückwärts zählt und den dann in C umzusetzen, dann mach
> es wie ich, als ich mit dem AVR-Programmieren angefangen habe:
> Bücher lesen, Googlen, Forensuche benutzen.

Grade am Anfang reicht es auch sich ganz einfach hinzusetzen
und mal zu überlegen: Wie würde ich das machen, wenn ich nur
Papier und Bleistift zur Verfügung habe.

Eine Zeit rückwärts zu zählen ist eigentlich ganz einfach:
Zieh von der aktuellen Zeit 1 Sekunde ab.
Ist dadurch eine Sekundenzahl von -1 entstanden
Ja: Zieh von den Minuten 1 ab und fang bei den Sekunden wieder
    bei 59 an.
    Sind dadurch -1 Minuten entstanden
    Ja: Zieh von den Stunden 1 ab.

Jeder Mensch im westlichen Kulturkreis kann das ohne groß
darüber nachzudenken und macht es richtig. Beim Entwickeln
eines Verfahrens muss man sich sehr oft nur darüber klar
werden, wass man als Mensch in der gleichen Situation macht.
Und zwar bis ins letzte Detail. Programmierer sind darauf
geschult auch auf die kleinsten Details zu achten. Details
die Nichtprogrammierer oft übersehen.

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.