mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Countdown


Autor: Henk v.d. Wegen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tagchen!

Ich habe vor mir einen einstellbaren Countdown-Timer zu basteln, der 
nach Alauf einer in 10-Sekunden-Schritten einstellbaren Zeitspanne (max. 
im einstelligen Minutenbereich) eine Last abschaltet (->Belichter) und 
die verbleibende oder abgelaufene Zeit auf einem LCD ausgibt.
Wenn ich die delay.h benutze, um in einer 40x-For-Schleife 25msec 
aufzurufen, komme ich auf eine Sekunde. Soweit kein Problem, Auflösung 
von einer sekunde langt mit absolut. Wenn ich jetzt aber nach jeder 
Sekunde die Zeit auf dem LCD ausgeben will, geht mir dafür ja auch 
Rechenzeit flöten und die nächste Ausgabe erfolgt erst 
40*25ms+t(ausgabe) später, was bei z.B. 5 minuten schon 300*t(ausgabe) 
Abweichung ausmacht.
Die LCD-routinen in C geschrieben, ich kann den Code nicht mit AVRStudio 
simulieren (ist so) und die Zeichenketten sind ja auch unterschliedlich 
lang (Textstring + 1 oder 2 oder 3 Stellen für die Sekunden).
Kann ich die Zeitmessung nicht von der Ausgabe irgendwie entkoppeln, so 
dass das Ausgabe und "Zeitvertrödeln" quasi-simultan ablaufen?
Und das auch noch auf noob-niveau?

Für Hinweise, die zur Ergreifung...

Danke,

Henk

Autor: BaFH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: Timer! Einfach mal im Forum suchen...

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Overflow Interrupt vom Timer nutzen!

Autor: Sebastian F. (tacx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du nimmst einen Timer (beim Mega 8 den Timer1) und stellst ihn so ein, 
dass er nach jeder Sekunde durch einen Überlauf einen Interrupt auslöst. 
Die Routine, die durch den Interrupt getriggert wird tut dann folgendes:
- ein Zählregister herunterzählen
- den Inhalt des Zählregisters auf das Display schreiben
- prüfen ob Zählregister Null -> Abschalten
- vom Interrupt zurückkehren.

Wofür nun ein LCD notwendig ist? Zwei 7-Segmenter reichen doch auch...

Gruß
   Sebastian

Autor: Henk v.d. Wegen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tips, Männers!
@Seb. Da haste recht... Hab nur noch nie 7-Segmente angesteuert und 
schon gar nicht drei davon. Da gibts doch auch bestimmt n fertiges IC 
für, dass mir die Ansteuerung abnimmt... Hab zufällignoch ne Hand voll 
in der Bastelkiste liegen. Mal das pinout eruieren (tolles Wort) und 
gucken, ob das sehr aufwendig ist.
Was der M8 kann, kann der M16 auch, oder? Hab nämlich nur 16er da 
(Werbegeschenke).

Danke nochmal,

Henkster

Autor: Henk v.d. Wegen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso... Und ist das wirklich so, dass der Timer vor sich hin rattert 
und gleichzeitig Programmcode ausgeführt wird, der nur von 
Timergetriggerten IRs unterbrochen wird? Wow...

Autor: Sebastian F. (tacx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Henk,

ja, und ja!

Dafür sind die Timer da! Deswegen die Geschichte mit dem Interrupt. Der 
Timer läuft vollständig selbstständig vor sich hin. Und löst bei der 
vorgegebenen Bedingung seinen Interrupt aus. Sonst wären die Timer auch 
ein wenig sinnlos.

Ja, was der Mega8 kann, kann der Mega16 auch. Nur umgekehrt kann es 
sein, dass zu wenig Ports da sind.

7-Segmemter ansteuern ist einfach. Die IC's dafür sind überflüssig. Es 
reicht, je Anzeige ein Transistor (Feldwaldundwiesentransistor). Die 
Segmentleitungen werden einfach an einen Port des Controllers geklemmt. 
Dann wird einfach gemultiplext. Einfach heisst wirklich einfach: - 
Transistoren  sperren, Bitmuster für Anzeige1 auf den Port, Transistor 
für Anzeige1 öffnen, Transistor sperren, Bitmuster 2 auf den Port, 
Transistor 2 öffnen usw... Wenn der Programmcode symmetrisch abläuft, 
sind die Anzeigen auch gleich hell. Und wahrscheinlich gibt es sogar 
noch eine Elegantere Lösung. Peter Dannegger hat hier mal eine Schaltung 
für ein Voltmeter gepostet: Beitrag "ADC mit Multiplexanzeige"

Hat mir sehr geholfen. Danke Peter!

Gruß Sebastian

Autor: Henk v.d. Wegen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verneige mich in Ehrfurcht : ) Danke.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henk v.d. Wegen wrote:
> Ich verneige mich in Ehrfurcht : ) Danke.

Muß nicht sein.

Besser wäre:

"Ich habe noch die und die Frage"

oder:

"Ich habe das Beispiel verstanden" (super Kompliment)

oder:

"Ich habe das Beispiel verstanden und noch die und die Verbesserung"
(unschlagbares Kompliment)


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.