Amigo,
Se não estiver errado vc esta querendo mover os servos acima de 180° , caso seja isto, alguns servos aceitam, mas os mais indicados são os digitais, tipo MG995
Existem varios meios de controlar servos, dá uma olhada nos links abaixo.
http://letsmakerobots.com/node/3829
http://www.seattlerobotics.org/encoder/ ... csscnt.htm
Se digitar no googlee "control servo using avr" vai sair uma porrada
No momento estou querendo para 8 servos.
A rotina abaixo controla um servo através de 2 chave, roda no proteus 7.2 sp 6 com o modelo de servo. Com 323 vc pode usar dois servos e se não estiver enganado, com o atmega128 controla direto 4 servos, apenas usando 4 canais PWM
- Código: Selecionar todos
*****************************************************
Project : Servo Motor Controller
Author : Gafar
Company : home
Chip type : ATmega323l
Clock frequency : 8.000000 MHz
*****************************************************/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
// #define xtal 16000000
#define sobe PINA.0 // DIREITA
#define desce PINA.1 // ESQUERDA
// A SAIDA DO SERVO É NO PD.5
void main(void)
{
PORTD=0x00;
DDRD=0x20;
DDRA=0;
//PORTA=0xff;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Ph. & fr. cor. PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x80;
TCCR1B=0x12;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x4E;
ICR1L=0x20;
OCR1A=1500/2; // VALOR CENTRAL DO SERVO
while (1)
{
if ((!sobe)&&(OCR1A<=2000/2))
OCR1A++;
if ((!desce)&&(OCR1A>=1000/2))
OCR1A--;
PORTD.6=PORTD.5;
delay_ms(5);
}
}