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.
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.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







Zitieren

Lesezeichen