Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Thread Closed: Another thread already exists on this topic

???
07/19/09 00:41
Read: times


 
#167533 - RC servos and 8051
Hello, I want to make a project, I want to drive 2 RC servos and 3 leds by PWM.
I'm actually using an AT89S52 with a 24mhz crystal
The servo is the cheap Towerpro SG90
I had made some tests with this servo and discovered its minimum range is at 800uS, its maximum range is at 2390uS
and its minimum "post PWM" time (output low) is around 12ms.
I would like to drive both servos and led with 8bit PWM for 256 values.
For servos, I will have 1590uS to do an 8bit PWM, by my calculation, a timer set to 12 cycles per overflow will give 1536uS total.
I thinking 12 cycles for doing the PWM is critical.
I will also need to handle incoming serial bytes at constant stream at every 44uS.
But thinking just about the servos (by now)
This is the partial untested code I made, but I already past 12 cycles :(


PWMPos  EQU R7
PrePWM  EQU R5
PosPWM  EQU R6
PanPWM  EQU 76H

ORG 0000H               ;RESET VECTOR
        SJMP CONFIG

ORG 000BH               ;TIMER ZERO OVERFLOW
        CJNE PrePWM,#0,T0IEndDecPre ;if not zero do 800 before pwm
        CJNE PosPWM,#0,T0IEndDecPos ;if not zero do 20ms after pwm
        ;if both zero time to PWM positioning
        
        DEC PWMPos
        MOV A,PWMPos
        CJNE A,PanPWM,$+3
        MOV P2.0,C                  ;Set output to servo
        
        CJNE PWMPos,#0,T0IEnd       ;check for PWM end, prepare for post PWM
        MOV PosPWM,#??              ;here should set to wait the post 20ms

T0IEndDecPre:
        DEC PrePWM
        JMP T0IEnd

T0IEndDecPos:
        DEC PosPWM
        
T0IEnd: 
        CLR T0
        RETI

CONFIG:
        MOV TMOD,#00000010B ;T0 autoreload
        MOV TH0,#12          ;Reload Value
        MOV TL0,#12
        
        SETB EA
        SETB ET0

 


Please somebody can give me some help to solve this? An Ideia?
Maybe a more efficient routine for timer.
Maybe I could use one timer to each motor, every overflow it changes its next overflow time to just change the output state in the right time. But dont know what to do with the leds.
I got a bit lost now :(

Thanks in advance.

List of 4 messages in thread
TopicAuthorDate
RC servos and 8051            01/01/70 00:00      
   Intended serial speed 22727 bytes/s?            01/01/70 00:00      
      Continuing on this one?            01/01/70 00:00      
         And no answer to this one either...            01/01/70 00:00      

Back to Subject List