mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 min Zähler parallel zum Hauptprogramm


Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hossa!!!

Nachdem ich nun schon einen Tag lang keine Lösung für mein Problem
gefunden habe wende ich mich an dieses Forum.

Ich habe hier ein Board mit einem PIC-Controller und einem Display!
Ich lese über den AD Wandler einen Spannungswert ein und gebe ihn auf
dem Display aus!

Problem:

Es wird auch noch ein anderer Wert auf dem Display ausgegeben, den ich
alle 2 Minuten auf den letzten gemessenen Wert draufaddieren will! Es
hadelt sich hier um eine Art Strahlungsdosis, die alle 2 Min. erhöt
wird!
Ein Timer wäre hier doch sinnvoll, weil er parallel zum Hauptprogramm
läuft. Nur müsste ich ihn in einer Schleife mehrmals durchlaufen. Und
wenn ich diese Schleife in der Interupt Routine einbaue, bleibt ja mein
Hauptprogramm stehen!
Hat jemand eine Idee, wie ich das sinnvill lösen könnte?

Ich wäre um jeden Rat dankbar!!!

Matze

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du läßt den Timer einfach durch laufen und löst bei jedem Überlauf
einen Interrupt aus. Dann zählst Du in der Interruptroutine die
Überläufe so lange zusammen, bis die Zeit für einen Überlauf
multipliziert mit der Anzahl der Überläufe die 2 Minuten ergibt. Wenn
die nötige Anzahl erreicht ist, kannst Du die Interruptroutine
irgendein Bit in einem Register setzen/löschen lassen, um damit dem
Hauptprogramm anzuzeigen, daß die 2 Minuten um sind. Das Bit vom
Hauptprogramm aus jedesmal abfragen. Wenn die Ausgabe gemacht wurde,
das Flag wieder löschen/setzen und den Zähler in der Interruptroutine
wieder auf Null setzen.
Der Wert für den Vorteiler ergibt sich aus der verwendeten Taktfrequenz
und einer kleinen Rechnung.

Interruptroutinen sollen grundsätzlich so kurz wie möglich sein.

Gruß

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hui, das ging schnell! Danke!

Also sehe ich das richtig:

Der Timer läuft parallel zum Hauptgrogramm!
Der Interrupt jedoch nicht! Hier blaibt das Hauptprogramm stehen und
der der Interrupt wird bearbeitet! Darum sollte die Routine auch sehr
kurz gehalten werden!
Es ist halt nur dumm, dss ich den Timer ein paar 100 mal durchlaufe und
damit ein paar 100 Interrupts habe, also wird mein Hauptprg. auch ein
paar 100 mal unterbrochen.
Eine andere Möglichkeit, mein Hauptprg. ohne Unterbrechungen laufen zu
lassen, gibt es also nicht?

Matze

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An Atmels kann man auch externe Uhrenquarze anschließen. Wenn man die
über entsprechende Prescaler auswählt, werden es weniger Interrupts.
Allerdings kannst du die Unterbrechungen meiner Meinung nach zeitlich
gesehen in den Skat drücken, um die du dir grad Sorgen machst.
Es kostet effektiv nur wenige Zyklen, da der MC ja nur einen Sprung in
deine ISR machen muss, dort eine Variable inkrementiert und dann schon
wieder zurück ins Hauptprogramm springt.

Gruss, Alex

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das hast Du vollständig richtig kapiert!

Wenn Du überhaupt keine Zeit übrig hast, was ich für unwahrscheinlich
halte, mußt Du eben extern einen 2 Minuten-Zähler aufbauen und dann
über einen externen Interrupt über den passenden Pin dieses Ereignis
verarbeiten.

Ist dein Programm wirklich nie am Warten auf irgendwas? Die Werte vom
AD-Wandler abzuholen und auf's LCD zu senden kann doch nicht sooo
rechenintensiv sein. Das reicht doch, das höchstens 10 mal in der
Sekunde zu tun, Timergesteuert. Dann könntest Du alle 1200 Mal Deine
momantane Strahlenbelastung anzeigen. Nur 'n Vorschlag.

Oder du führst dem Timer von Außen einen Takt niedriger Frequenz zu, so
daß er nur einmal in 2 Minuten überläuft. Benötigt externen Oszillator,
etc.

Gruß

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.