Sooo
wenn man adresh mit 0 überschreiben kann/darf, müsste das ganze so gehen..
Code:
; Wert auslesen und schreiben
; #### Nebenrechung
;Der Wert von ADRESH wird ausgelesen, wenn er kleiner 15 ist, soll der Ausgang ausgeschaltet bleiben
;dazu wird das carryflag abgefragt: wenn der messwert +240 das flag setzt,bedeutet das, er ist größer/gleich 15,
;also wird normal weitergemacht, wenn die flag nicht gesetzt wird, ist der wert kleiner 15, und der pwm ausgang soll "aus" bleiben
;dafür wird dann adresh 0 gesetzt,somit wird im folgenden code 0 + 0 + 0 = 0 und der port auf 0 gesetzt.
BCF STATUS,C ; Carry Flag auf 0
movfw ADRESH ; wert auslesen, in work setzen
addlw D'240' ; 240 mit work addieren,
btfss STATUS,C ; carryflag gesetzt durch addition?
clrf ADRESH ; dann wird der befehl übergangen, da wert größer 15 (sonst adresh=0 => PWM=ausschalten da wert zu klein)
; sonst normal weiter
; #### Nebenrechnung Ende
BCF STATUS,C ; Carry Flag auf 0
movfw ADRESH ; wert auslesen (0 oder messwert), in work setzen
addwf ADRESH,0 ; wert verdoppelt
addwf ADRESH,0 ; wert verdreifacht
btfsc STATUS,C ; wenn carry flag gesetzt,
movlw D'255' ; dann: wert auf maximum setzen=255=5V
; Wert an PWM1 übergeben
MOVWF CCPR1L ; obere 8 Bit sind PWM
korrekt?
Danke fürs betreuen soweit 
Edit:
Soweit scheints in echt zu funktionieren...
(Erledigt)
Das abschalten nach unten (0% Tastverhältnis) ist damit egal, das hat ja sowieso keinen wärmeverlust.. (Erledigt)
Aber wie setz ich das beim oberen Wert auf dauer high..
hmpf?
2 Lösungen:
Software:
PWM deaktivieren, port auf high setzen
Grobmechanisch:
Anderen Pin an PortB bei gewünschter schwelle auf "high" setzen, damit den mosfet-pin mit vorwiderstand (20mA) und diode dauernd auf high (4,7V wegen sperrdiode) ziehen.. dann ist egal was der pwm pin-port macht..
wenn der portB-Pin low ist verhindert die diode dass der mosfet darüber entladen wird..
allerdings ist das nicht gerade schonend für den PIC.. hmmm
ich frag das glaub nochmal neu, hier ists ja schon ziemlich unübersichtlich..
Lesezeichen