Hallo
Möglicherweise ist die ISR zu lang und die Interrupts laufen über. Ich habe die Ausführungszeit noch nicht genau berechnet, aber so grob über den Daumen gepeilt dürfte das knapp werden. Es sind 24 Befehle in der ISR + je 9 fürs sichern und restaurieren der Register. Selbst wenn jeder Befehl nur einen Takt benötigen würde, es würde nicht reichen. Die Interrupts kommen bei prescaler=1 alle 36 Takte:
Mögliche Lösungen: Schnellerer Kontrollertakt, ISR in Assembler schreiben oder weniger Interrupts pro Zeit (z.B.: OCR2 = F_CPU/50000Code:45 .global __vector_4 47 __vector_4: 48 .LFB3: 49 .LM6: 50 /* prologue: frame size=0 */ 51 0014 1F92 push __zero_reg__ 52 0016 0F92 push __tmp_reg__ 53 0018 0FB6 in __tmp_reg__,__SREG__ 54 001a 0F92 push __tmp_reg__ 55 001c 1124 clr __zero_reg__ 56 001e 2F93 push r18 57 0020 3F93 push r19 58 0022 8F93 push r24 59 0024 9F93 push r25 60 /* prologue end (size=9) */ 61 .LM7: 62 0026 8091 0000 lds r24,servopos 63 002a 9927 clr r25 64 002c 2091 0000 lds r18,count.0 65 0030 3091 0000 lds r19,(count.0)+1 66 0034 8217 cp r24,r18 67 0036 9307 cpc r25,r19 68 0038 14F4 brge .L3 69 .LM8: 70 003a 9398 cbi 50-0x20,3 71 003c 01C0 rjmp .L4 72 .L3: 73 .LM9: 74 003e 939A sbi 50-0x20,3 75 .L4: 76 .LM10: 77 0040 8091 0000 lds r24,servopos 78 0044 9927 clr r25 79 0046 8053 subi r24,lo8(-(2000)) 80 0048 984F sbci r25,hi8(-(2000)) 81 004a 2817 cp r18,r24 82 004c 3907 cpc r19,r25 83 004e 3CF4 brge .L5 84 0050 2F5F subi r18,lo8(-(1)) 85 0052 3F4F sbci r19,hi8(-(1)) 86 0054 3093 0000 sts (count.0)+1,r19 87 0058 2093 0000 sts count.0,r18 88 005c 04C0 rjmp .L2 89 .L5: 90 .LM11: 91 005e 1092 0000 sts (count.0)+1,__zero_reg__ 92 0062 1092 0000 sts count.0,__zero_reg__ 93 .L2: 94 /* epilogue: frame size=0 */ 95 0066 9F91 pop r25 96 0068 8F91 pop r24 97 006a 3F91 pop r19 98 006c 2F91 pop r18 99 006e 0F90 pop __tmp_reg__ 100 0070 0FBE out __SREG__,__tmp_reg__ 101 0072 0F90 pop __tmp_reg__ 102 0074 1F90 pop __zero_reg__ 103 0076 1895 reti 104 /* epilogue end (size=9) */ 105 /* function __vector_4 size 50 (32) */Dann wird zwar die Auflösung geringer und die Werte für die Positionen müssen halbiert werden, aber dafür stimmen dann die Wiederholungen.
Gruß
mic







Zitieren

Lesezeichen