msocito
02.09.2009, 21:02
Moin zusammen,
ich mach's kurz: Ich möchte mir aus einem Tiny45 einen 180° Servostretcher schnitzen. Das Teil soll also statt den üblichen +- 60° eben +- 90° aus dem Servo holen. RC Puls Eingang am PinB4, Ausgang Servo am PinB3.
So weit so gut. Habe also diverse Tests mit Bascom durchgeführt und das hat eigentlich alles funktioniert, aber ich bekomme einfach das Servozittern nicht weg. Da das Servo unter einer Kamera hängt ist das Zittern sehr lästig. Habe dann also meinen gesamten Code zusammengeschrumpft, so daß nur noch eine ganz banale Abfrage über Timer und eine Ausgabe über Pulseout stattfindet. Und ... es zittert immer noch.
Werde den Verdacht nicht los, daß mir die Interruptroutine hier reinspuckt.
Vielleicht hat ja jemand eine gute Idee (bitte kein Assembler oder C oder Hinweise auf fertige Teile - will es selbst bauen).
Vielen Dank schonmal im voraus
Hier das Cödchen:
$regfile = "ATtiny45.DAT"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Dim Scalefactor As Integer
Scalefactor = 33
Dim Timercount As Integer
Config Portb.3 = Output
Config Portb.4 = Input
Portb.4 = 1 ' Pullup aktiv
Gimsk.5 = 1 ' PinChange enable
Pcmsk = &B00010000 ' PB4 change aktiv
Tccr1 = &B00001000 ' Prescale 128
On Pcint0 Readrctime
Portb.3 = 0
Enable Interrupts
Do
Loop
'-----------------------------------------------------------------------
Readrctime:
If Pinb.4 = 1 Then
Tcnt1 = 0
Else
Timercount = Tcnt1
Timercount = Timercount * Scalefactor
Portb.3 = 0
Pulseout Portb , 3 , Timercount
End If
Return
'------------------------------------------------------------------------
End
ich mach's kurz: Ich möchte mir aus einem Tiny45 einen 180° Servostretcher schnitzen. Das Teil soll also statt den üblichen +- 60° eben +- 90° aus dem Servo holen. RC Puls Eingang am PinB4, Ausgang Servo am PinB3.
So weit so gut. Habe also diverse Tests mit Bascom durchgeführt und das hat eigentlich alles funktioniert, aber ich bekomme einfach das Servozittern nicht weg. Da das Servo unter einer Kamera hängt ist das Zittern sehr lästig. Habe dann also meinen gesamten Code zusammengeschrumpft, so daß nur noch eine ganz banale Abfrage über Timer und eine Ausgabe über Pulseout stattfindet. Und ... es zittert immer noch.
Werde den Verdacht nicht los, daß mir die Interruptroutine hier reinspuckt.
Vielleicht hat ja jemand eine gute Idee (bitte kein Assembler oder C oder Hinweise auf fertige Teile - will es selbst bauen).
Vielen Dank schonmal im voraus
Hier das Cödchen:
$regfile = "ATtiny45.DAT"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Dim Scalefactor As Integer
Scalefactor = 33
Dim Timercount As Integer
Config Portb.3 = Output
Config Portb.4 = Input
Portb.4 = 1 ' Pullup aktiv
Gimsk.5 = 1 ' PinChange enable
Pcmsk = &B00010000 ' PB4 change aktiv
Tccr1 = &B00001000 ' Prescale 128
On Pcint0 Readrctime
Portb.3 = 0
Enable Interrupts
Do
Loop
'-----------------------------------------------------------------------
Readrctime:
If Pinb.4 = 1 Then
Tcnt1 = 0
Else
Timercount = Tcnt1
Timercount = Timercount * Scalefactor
Portb.3 = 0
Pulseout Portb , 3 , Timercount
End If
Return
'------------------------------------------------------------------------
End