Hi! Danke für eure Tipps! ich glaube 4 µs ist aber tatsächlich etwas knapp... Habe versucht die Zeit mit meiner mechanischen Eieruhr zu stoppen, und das hat nicht geklappt
Jetzt bin ich wieder bei der Methode die ich ursprünglich machen wollte und die auch Besserwessi vorschlägt. Auf einem Mega32 mit 16MHz und dem 8bit timer hat es jetzt auch endlich geklappt. Das Oszi zeigt ein sehr sauberes Signal mit genau der Länge und der Pause die ich einstelle.
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 16000000
$baud = 38400

Config Pinb.1 = Output                 'servo output
Config Pina.0 = Output                 'statusLED

Config Timer0 = Timer , Prescale = 8
On Timer0 T0isr

Dim I As Byte
Dim Pulse As Single
Dim Pulsetemp As Single
Dim Fullrun As Single
Dim Lastrun As Single
Dim Fullrunfix As Byte
Dim Lastrunfix As Byte
Dim Currun As Byte
Dim Pause As Byte

Enable Timer0
Enable Interrupts

Do
Pulse = 1.5                             'in ms
'_______________
'1 increment des timer0 dauert 16M / 8 = 0.0005 ms (=2000 milliHz)
'1 ms pulse benötigt daher 1*2000 increments
'2 ms pulse benötigt 2*2000 increments
Fullrun = Pulse * 2000
Shift Fullrun , Right , 8
Lastrun = Frac(fullrun)
Shift Lastrun , Left , 8
Lastrun = 256 - Lastrun
Lastrunfix = Round(lastrun)
Fullrunfix = Int(fullrun)
'________________

Waitms 333                               'nichts tun


Loop

End

T0isr:
If Pause = 0 Then
  If Currun < Fullrunfix Then
    If Portb.1 = 0 Then
      Portb.1 = 1
    End If
    Incr Currun
  End If
  If Currun = Fullrunfix Then             'wird direkt nach dem voherigen aufgerufen...
    Timer0 = Lastrunfix
    Incr Currun
  Elseif Currun > Fullrunfix Then
    Currun = 0
    Pause = 1
    Portb.1 = 0
  End If
Else                                    'pause=1
  '20ms pause sind  ca 150 volle überläufe
  If Pause < 150 Then                   ' 75~10ms  37~5ms
    Incr Pause                          'pause +1.5ms = frequenz
  Else
    Pause = 0
  End If
End If

Return
Um diesen Code auf meinen tiny zu übertragen muss ich eigentlich nur den Wert 2000 durch eine 1000 ersetzen. Das werde ich heute abend mal ausprobieren.