Habe da ein Problem, der Atmel hängt sich bei der RC5 Routine scheinbar immer auf. Er Läuft jedenfalls nicht mehr zum Schleifenanfang. Mit einem ATMEGA8515 (auf 8515 kompatibilität gesetzt) läufts...
Empfänger ist in beiden fällen ein TSOP1736
Code:$regfile = "2313def.dat" $crystal = 4000000 CONFIG PinB.2 = OUTPUT CONFIG RC5 = PortD.6 DIM Wert AS WORD DIM Eichwert1 AS WORD DIM Eichwert2 AS WORD DIM Eichwert3 AS WORD DIM Eichwert4 AS WORD DIM Merker AS WORD DIM Adresse AS Byte DIM Kommando AS Byte CONST Solladresse = 20 CONST Einschalten = 129 CONST Ausschalten = 128 Eichwert1 = GETRC(PinB , 3) Wait 3 Eichwert2 = GETRC(PinB , 3) Wait 2 Eichwert3 = GETRC(PinB , 3) Wait 3 Eichwert4 = GETRC(PinB , 3) SELECT CASE Eichwert1 CASE IS < 15 : Eichwert1 = Eichwert1 + Eichwert2 Eichwert1 = Eichwert1 + Eichwert3 Eichwert1 = Eichwert1 + Eichwert4 Eichwert1 = Eichwert1 / 4 ' Mittelwert Eichwert2 = Eichwert1 - 2 Eichwert3 = Eichwert1 + 2 CASE ELSE : Eichwert1 = Eichwert1 / 4 Eichwert2 = Eichwert2 / 4 Eichwert3 = Eichwert3 / 4 Eichwert4 = Eichwert4 / 4 Eichwert1 = Eichwert1 + Eichwert2 Eichwert1 = Eichwert1 + Eichwert3 Eichwert1 = Eichwert1 + Eichwert4 ' Mittelwert Eichwert2 = Eichwert1 SHIFT Eichwert2 , RIGHT , 6 ' /16 Eichwert2 = Eichwert1 - Eichwert2 '-1/16 Eichwert3 = Eichwert1 + Eichwert2 '+1/16 END SELECT Merker = 0 DO Wert = GETRC(PinB , 3) WAITms 250 IF Wert < Eichwert1 THEN IF Merker = 0 THEN TOGGLE PortB.2 Merker = 1 ENDIF ELSEIF Wert > Eichwert1 THEN IF Merker = 0 THEN TOGGLE PortB.2 Merker = 1 ENDIF ELSE Merker = 0 ENDIF TOGGLE PortB.2 WAIT 2 TOGGLE PortB.2 GETRC5(Adresse , Kommando) IF Adresse = 20 THEN SELECT CASE Kommando CASE 129: SET PortB.2 CASE 128: RESET PortB.2 END SELECT ENDIF WAITMS 250 LOOP END







Zitieren


Lesezeichen