Hola compañeros con dudas sobre el control de servos, les puedo ayudar con sus proyectos pero primero sugiero que que usen este programa para el control de servos.
Este programa maneja 8 servos pero lo modifique para que maneje solo 1
este ya esta funcionando al 100%:
y solo agregues la función que necesites.
Aclaro solo funciona para los pic16f877 y 876 para migrarlo a otro servo tienen que buscar la direcciones el el datasheet del micro al que quieran migrar el programa:
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
ya que para los otros micros cambian la direcciones.
Se puede modificar el código para que lo ajustes a tus necesidades, por lo que experiencia esta programación es mas simple y efectiva.
No dudes en preguntarme si tienes alguna duda.
fuente: RobotyPic: Control de 8 servos con PIC
archivo isis para proteus simulación:
Ver el archivo adjunto 72354
saludos desde Irapuato, Guanajuato.
Este programa maneja 8 servos pero lo modifique para que maneje solo 1
este ya esta funcionando al 100%:
y solo agregues la función que necesites.
Aclaro solo funciona para los pic16f877 y 876 para migrarlo a otro servo tienen que buscar la direcciones el el datasheet del micro al que quieran migrar el programa:
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
ya que para los otros micros cambian la direcciones.
Código:
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
#include <lcd.c>
//#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0XA0, slow , FORCE_HW)
#bit Bit_PWM0 = PORTC.0 //Bit 0 puerto B Salida modulación 0
void main (void);
void Generador_pwm (void);
int8 control_PWM=0;
int8 PWM0=0;
unsigned int8 mover_a;
#int_Timer0
void generacion_pwm(){
control_PWM++; //Incremento cada rebose del timer0
if (control_PWM==0){ //inicio del ciclo con todos los pulsos pwm a 1
Bit_PWM0=1;
}
//Finalizará el pulso de modulación según el valor del correspondiente pwm
if (control_PWM==PWM0) Bit_PWM0=0;
set_timer0(255); //Carga del contador
}
void main(){
trisc=0x00;
set_tris_b(0xff);
pwm0=0;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
lcd_init();
while (true){
mover_a=input_b(); //leyendo puerto b
pwm0=mover_a; //estado del puerto B (numero decimal de la combinación puerto B)
lcd_gotoxy(5,1);
printf(lcd_putc,"El numerito es");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i",mover_a); // muestra en lcd la cifra en decimal puerto b
delay_ms(100);
lcd_gotoxy(1,2);
printf(lcd_putc,"\f"); // borra lcd
}
}
No dudes en preguntarme si tienes alguna duda.
fuente: RobotyPic: Control de 8 servos con PIC
archivo isis para proteus simulación:
Ver el archivo adjunto 72354
saludos desde Irapuato, Guanajuato.