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:

Code:
  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) */
Mögliche Lösungen: Schnellerer Kontrollertakt, ISR in Assembler schreiben oder weniger Interrupts pro Zeit (z.B.: OCR2 = F_CPU/50000 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