Hallo,
ich habe 3 Versionen von ein und dem gleichen Programm. Wovon nur eines funktioniert, aber auch nicht exakt so wie gewünscht.
Version a):
funktioniert zwar, aber die Abfrage der MX6675 in der Timer C Interruptschleife erfolgen nur aller eingestellten 5sec., worauf hin die Alarm LED in der Hauptschleife verzögert reagiert.
Version b):
hier erfolgt das einlesen aller 3 Sensoren in der Hauptschleife und die LCD Ausgabe in der Interruptfunktion. Das sollte so sein, ist aber nicht so. Die MAX6675 werden nur einmalig nach Reset eingelesen und dann nie wieder. Warum? Kann ich mir nicht erklären. Der AD-Wandler wird immer eingelesen.
Version c):
hier werden die 3 Sensoren immer am Anfang der Timer C Interruptschleife abgefragt. Funktioniert genauso wenig wie bei Version b). Die MAX6675 werden nicht abgefragt. Warum? Kann ich mir wieder nicht erklären. Der AD-Wandler wird auch hier immer eingelesen.
Die Idee für c) war, dass vielleicht der Interrupt dummerweise immer das einlesen der MX6675 stört. Der Interrupt wird aller 104ms aufgerufen, wegen Teiler f32. Jetzt steht das einlesen am Schelifenanfang und funktioniert wieder nicht.
Kann mir jemand sagen was ich übersehe?
Oder hat der Compiler eine Macke?
Ideen?
Edit:
das der Interrupt "Timer C" sehr viel Rechenzeit beansprucht merke ich auch daran, dass ich die Alarm LED Blinkschleife im Hauptprogramm nur bis 10 zählen lassen darf statt bis 50.000, damit diese wieder mit ca. 2Hz vor sich hin blinkt. Im Fall von Version b oder c nach einem Reset und vorher Finger an dem Thermofühler.
Es hilft mir auch nicht, wenn ich das Programm aus der Timer-C Interrupt Schleife herausnehme und wieder in der Hauptschleife abarbeiten lasse und nur noch die 3 Zaehler im Interrupt hochzählen lasse. Die MAX6675 werden trotzdem nicht ausgelesen. Nur einmalig nach Reset.
Tschau
Mr. Teflon
