Hi,
das ganze ist jetzt etwas komplizierter.
Ich habe einen Mega128 im Einsatz, das ganze ist eine Lüftersteuerung für meinen PC.
Der Prototyp ist seit einem guten halben Jahr im Einsatz und funktioniert tadellos.
Die 2. Version steht hier vor mir auf dem Schreibtisch und funktioniert ebenfalls perfekt,
solange ich die Lüftergeschwindigkeit nicht abfrage.
Die Int0 - Int3, Int6 und Int7 sind neu dazugekommen um die Flanken vom Fan festzustellen.
Es wird immer nur ein Lüfter abgefragt und das auch nicht ständig,
sondern alle 30sec ein kompletter Durchlauf.
Die ganze Sache funktioniert eine ganze Weile gut,Code:' SETFAN Speedcheck Macro SETFAN tFan = 5 : flag.1 = 1 : FANSIG = 0 Select Case fanchannel 'Config GREEN = Output Case 1: GIFR.IntF3 = 1 Enable Int3 Case 2: GIFR.IntF2 = 1 Enable Int2 Case 3: GIFR.IntF1 = 1 Enable Int1 Case 4: GIFR.IntF0 = 1 Enable Int0 Case 5: GIFR.IntF7 = 1 Enable Int7 Case 6: GIFR.IntF6 = 1 Enable Int6 End Select cFan = 0 End Macro Macro GETFAN flag.1 = 0 Disable Int3 Disable Int2 Disable Int1 Disable Int0 Disable Int7 Disable Int6 glcd.0 = 1 'Shift FANSIG , left , 5 FANSPEED(fanchannel) = FANSIG * 50 'Shift FANSPEED(fanchannel) , right , 1 , SIGNED Incr fanchannel If fanchannel > 6 then fanchannel = 1 tFan = 150 End If End Macro '################################################## ' FANSIGNAL INTERRUPT '################################################## FANISR: incr FANSIG Return
bis die Anzeigeroutine durchdreht.
In diesem ProgTeil wird nacheinander jeder der 6 Kanäle auf seiner Position angezeigt, wenns dann passiert, zählt die For ch = 1 to 6 aber nicht hoch, sondern bleibt 0 obwohl da 1 als Startwert steht.Code:'################################################## SUB MENUMAIN ' Haupt Anzeige If rebuild = 1 then CLS : rebuild = 0 : TempA = PWM0 End If For ch = 1 to 6 If glcd.2 = 1 then LEISTUNGSANZEIGE ' MACRO Leistung TEMPERATURANZEIGE ' MACRO Temperatur If ch = 6 then glcd.2 = 0 End If DREHZAHLANZEIGE ' MACRO Drehzahl Next ch '##################################################
Während der gesamten Anzeigeroutine sind Interrupts global DISABLED.
Wenn die Drehzahlerfassung auskommentiert ist, kommt es NICHT zu Fehlern.
Ich habe den FAN Teil jetzt schon zig mal umgeschrieben, andere Zeiten benutzt, nur 2 Flanken ausgewertet (1 Umdrehung) und aus der Dauer gerechnet, alle Stacks erhöht (verdoppelt).
Das Programm ist im wesentlichen das selbe das in meinem PC fehlerfrei arbeitet.
Ich komm nicht drauf woran das liegen könnte
EDIT: Niemand eine Idee?







Zitieren

Lesezeichen