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