www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperatur Messung Assembler MC 68HC11


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Christan K. (rumpi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe folgendes Problem. Ich soll einen MC68HC11 mit Assembler
programmieren.

-Das Programm soll eine Temperatur zw 0° & 100°C im Abstand von 250ms
einlesen
-aus 4 Werten soll ein Mittelwert gebildet werden
-diesen Wert soll ich nur irgendwo speichern

Meine Idee wäre eine RTI mit einer Zeitbasis von 4,096ms einzustellen
und den dann 61x mit einem Inkrementierungs Befehl durchlaufen lassen.
Somit würde ich eine Zeit von 249,86ms erreichen. Diesen Wert würde ich
im PACTL Register einstellen. Nach dieser Zeit würde ich versuchen ob
eine Abfrage machen ob die zu messende Temperatur zw. 0°C & 100°C liegt.
Je nach dem würde ich den Wert laden und speichern oder das Programm
abbrechen. Danach würde ich eine Abfrage machen ob 4 Werte im Register
gespeichert sind...vielleicht wieder mit eine Laufvariable die 4x
inkrementiert wird???
Falls ja, würde ich den Mittelwert über 2 mal logisches rechts
verschieben (= Division durch 2) errechnen. Und dann den Wert dann
speichern.

In der Anlage habe ich mit Powerpoint einen Programmablaufplan erstellt.

Wäre meine Überlegung prinzipiell richtig?

Desweiteren würde mich interessieren welche Register Flags ich noch
einstellen müsste. Das ist für mich noch ziemliches Neuland.

Mit freundlichen Grüßen


rumpi

31.01.2011 12:14:
Autor: Bernd Stein (bernd_stein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

falls der Programmablaufplan PAP den Real Time Interrupt RTI zeigt,
ist ein Fehler schon mal das mit dem Zähler i.
Denn der RTI wird ja alle 4,096ms aufgerufen, aber bei jedem aufruf 
löscht Du ja die Varialble i und zählst diese sofort hoch.
Das heißt nach 4,096ms also beim ersten RTI-Aufruf erreicht deine 
Varible sofort ihren Endwert von 61, weil Du ja so lange in der Schleife 
bleibst bis der Wert erreicht ist.

Du müsstest die Varible i im Hauptprogramm d.h. in der 
Hauptprogrammschleife löschen und hochzählen.
Mit Hauptprogramm meine ich den Teil des Programmes der abgearbeitet 
wird, so lange kein Interrupt bedient wird.
Hauptprogramm ist jetzt ein wenig verwirrend, da ja die Hauptarbeit in 
der Interrupt-Service-Routine des RTI erfolgt.
Aber der RTI wird ja nur alle 4,096ms abgearbeitet und in der restlichen 
Zeit halt die Programmschleife (Hauptprogramm).

Ein Interrupt ist ja eine Unterbrechung des Hauptprogrammes.

Bernd_Stein

Autor: Christan K. (rumpi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnelle Antwort.

Also müsste ich ein Zähler bauen der zu einer bestimmten Zeit den Real 
Time Interrupt auslöst (Real Time Interrupt: =>Prüfen ob Messwert 
vorhanden, Prüfen ob Messwert zw. 0° & 100°, und wenn ja Messwert 
speichern, wenn nich zurück ins Hauptprogramm)

Da wo ich dachte das das Programm abgebrochen wird ,würde ich dann eine 
Endlosschleife einbauen.

Aber wie stell ich dann die 250ms Sekunden ein?

Und wie erkennt der Mikrocontroller das 4 Werte im Speicher sind?

ALso bei den 4 Werte könnte ich mir vorstellen das ein Input Capture ins 
Spiel kommt, weil dies ja ein Ereigniszähler ist.


Mit frendlichen Grüßen

Christian

p.s. könntest du bitte hier antworten? hab das thema doppelt

Beitrag "Temperatur Messung Assembler"

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christan K. schrieb:

> Da wo ich dachte das das Programm abgebrochen wird ,würde ich dann eine
> Endlosschleife einbauen.

Nein.
Wenn du nichts sinnvolles tun kannst, wird die Behandlung des Interrupts 
als beendet erklärt. Aufräumarbeiten machen und aus dem Interrupt raus.

> Und wie erkennt der Mikrocontroller das 4 Werte im Speicher sind?

Indem du zb in einer Speicherzelle nach jeder Messung den Wert um 1 
erhöhst. Danach vergleichst du mit 4 und wenn 4 erreicht ist, lässt du 
den Mittelwert berechnen und startest die Zählung wieder bei 0. Dieser 
Zähler muss danach natürlich wieder in die Speicherzelle 
zurückgeschrieben werden, damit bei dieser Wert nach der nächsten 
Messung wieder zur Verfügung steht.


> p.s. könntest du bitte hier antworten? hab das thema doppelt
>
> Beitrag "Temperatur Messung Assembler"

Eben.
Daher sollten wir uns auf einen der beiden einigen.
Da im anderen schon mehr Antworten sind, mach ich den hier dicht.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.