Hola, compré unos servomotores y quiero hacer algunos proyectos con ellos, los estoy tratando de mover con PIC pero cuando los conecto solo se quedan vibrando y no realizan el giro que les programo, en realidad no llega el PWM porque solo con alimentarlo y conectarlo a algún pin cualquiera, hace lo mismo, simulé el código y funciona bien, llevo varios días intentando y ya no sé que pueda ser el problema, intenté también con TMR0 y no sirvió, la alimentación es externa al PIC y uso una fuente de 5v-1A, el servo es el MG90s. Adjunto el código más sencillo pero que tampoco sirve
Código:
list p=16f877A;
#include <P16F877A.inc>
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF; ALL
Contador1 equ 0x20;
Contador2 equ 0x21;
Contador3 equ 0x22;
N equ .5;
L equ .5;
M equ .5; 500 MICRO SEGUNDOS
O equ .11; 1 MILISEGUNDO
A equ .19; 2 MILISEGUNDOS
Q equ .40; 4 MILISEGUNDOS
E equ .152; 15MILISEGUNDOS
I equ .160; 16MILISEGUNDOS
proga equ b'111111';
progb equ b'11111111';
progc equ b'00000000';
progd equ b'11111111';
proge equ b'011';
org 0x0000;
vec_reset clrf PCLATH;
goto prog_prin;
org 0x0004;
vec_int nop;
retfie;
prog_ini bsf STATUS, RP0;
movlw 0x81;
movwf OPTION_REG ^0x80;
movlw proga;
movwf TRISA ^0x80;
movlw progb;
movwf TRISB ^0x80;
movlw progc;
movwf TRISC ^0x80;
movlw progd;
movwf TRISD ^0x80;
movlw proge;
movwf TRISE ^0x80;
movlw 0x06;
movwf ADCON1 ^0x80;
bcf STATUS, RP0;
movlw b'00000000';
movwf PORTC;
return;
;==============PROGRAMA PRINCIPAL====================
prog_prin call prog_ini;
loop_prin
;CERO GRADOS
ZER bsf PORTC, 0;
call _1_MILISEGUNDO;
bcf PORTC, 0;
call _15_MILISEGUNDOS;
call _4_MILISEGUNDOS;
call retardo;
;CIENTO OCHENTA GRADOS
OCH bsf PORTC,0;
call _2_MILISEGUNDOS
bcf PORTC,0;
call _16_MILISEGUNDOS;
call _2_MILISEGUNDOS;
call retardo;
goto loop_prin;
;================RETARDOS==================
_500_MICROSEGUNDOS movlw M;
movwf Contador3;
Loop1 movlw N;
movwf Contador2;
Loop2 movlw L;
movwf Contador1;
Loop3 decfsz Contador1, f;
goto Loop3;
decfsz Contador2, f;
goto Loop2;
decfsz Contador3, f;
goto Loop1;
return;
_1_MILISEGUNDO movlw O;
movwf Contador3;
Loop4 movlw N;
movwf Contador2;
Loop5 movlw L;
movwf Contador1;
Loop6 decfsz Contador1, f;
goto Loop6;
decfsz Contador2, f;
goto Loop5;
decfsz Contador3, f;
goto Loop4;
return;
_2_MILISEGUNDOS movlw A;
movwf Contador3;
Loop7 movlw N;
movwf Contador2;
Loop8 movlw L;
movwf Contador1;
Loop9 decfsz Contador1, f;
goto Loop9;
decfsz Contador2, f;
goto Loop8;
decfsz Contador3, f;
goto Loop7;
return;
_4_MILISEGUNDOS movlw Q;
movwf Contador3;
Loop10 movlw N;
movwf Contador2;
Loop11 movlw L;
movwf Contador1;
Loop12 decfsz Contador1, f;
goto Loop12;
decfsz Contador2, f;
goto Loop11;
decfsz Contador3, f;
goto Loop10;
return;
_15_MILISEGUNDOS movlw E;
movwf Contador3;
Loop13 movlw N;
movwf Contador2;
Loop14 movlw L;
movwf Contador1;
Loop15 decfsz Contador1, f;
goto Loop15;
decfsz Contador2, f;
goto Loop14;
decfsz Contador3, f;
goto Loop13;
return;
_16_MILISEGUNDOS movlw I;
movwf Contador3;
Loop16 movlw N;
movwf Contador2;
Loop17 movlw L;
movwf Contador1;
Loop18 decfsz Contador1, f;
goto Loop18;
decfsz Contador2, f;
goto Loop17;
decfsz Contador3, f;
goto Loop16;
return;
retardo movlw I;
movwf Contador3;
Loop19 movlw E;
movwf Contador2;
Loop20 movlw A;
movwf Contador1;
Loop21 decfsz Contador1, f;
goto Loop21;
decfsz Contador2, f;
goto Loop20;
decfsz Contador3, f;
goto Loop19;
return;
end;
[ICODE]
[/ICODE]