Hallo,
ich habe versucht, ein Servo (Graupner C 577) mittels eines Atmega8 in Betrieb zu setzen. Das Servo stellt sich auch, aber leider zittert es dann immernoch, zieht dabei 0,5A und die Position stimmt nicht.
Geschrieben wurde das Ganze in Assember, Takt des AtMega8 ist 2MHz, verwendet wurde (noch recht umständlich) der Counter0 ohne Prescaler.
Der Zeitraum zwischen den Overflows ist also 0,128ms.
Hardwareseitig hängt die orangene PWM Leitung an PC0, das Servo hat eine eigene Batterie, welche aber mit dem GND des µCs verbunden ist.
Nach meinen Berechnungen sowie nach der Simulation im AVR Studio liegen die Zeiten: ca 20ms AUS - 1,5ms AN - 20ms AUS....Code:.include "m8def.inc" .def temp = r16 .def tan = r17 .def taus = r18 .org 0x000 rjmp main .org OVF0addr rjmp ovf0 main: ldi temp, Low(Ramend) out SPL, temp ldi temp, High(Ramend) out SPH, temp ldi temp, 0b00000001 out TCCR0, temp ldi temp, 1 << TOIE0 out TIMSK, temp ldi temp, 1 out DDRC, temp ldi taus, 156 ldi tan, 12 sei loop: rjmp loop ovf0: sbic PINC, 0 rjmp vgl cpi taus, 0 breq sein dec taus reti sein: sbi PortC, 0 ldi taus, 156 dec tan reti vgl: cpi tan, 0 breq saus dec tan reti saus: cbi PortC, 0 ldi tan, 12 dec taus reti
Aber es gibt 2 Probleme:
1. Das Servo zittert auch im eigentlichen Ruhezustand noch
2. Die Position (1,5ms AN müsste ca 50% sein) stimmt bei Weitem nicht, liegt so ungefähr bei 20%.
Danke schon Mal im Vorraus für eure Mühe.
Gruß







Zitieren

Lesezeichen