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
:
Gesperrt durch User
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
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"
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.