Buenos días, amigos.
Soy un tanto nuevo en este foro y la verdad no sé cómo usarlo muy bien, espero sepan comprender.
¿Alguien me podría ayudar o dar una pista con este problema que tengo?
Lo que pasa es que quiero implementar el control de servomotores mediante modulo BLUETOOTH, pero estoy teniendo problemas en cuanto a los tiempos de mi microntrolador.
Adjunto el programa que uso:
Lo que está pasando es que en la primera parte cuando el LED debería parpadear cada segundo, parpadea cada 4 segundos aproximadamente, eso me indica que algo va mal con los tiempos del microcontrolador, y es por eso que no puedo controlar el servo.
Espero me puedan ayudar, agradecido de antemano.
Soy un tanto nuevo en este foro y la verdad no sé cómo usarlo muy bien, espero sepan comprender.
¿Alguien me podría ayudar o dar una pista con este problema que tengo?
Lo que pasa es que quiero implementar el control de servomotores mediante modulo BLUETOOTH, pero estoy teniendo problemas en cuanto a los tiempos de mi microntrolador.
Adjunto el programa que uso:
Código:
#include <18F4550.h>
#device ADC=16
#fuses INTXT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(internal=4MHz, clock=4MHz)
const int AJUSTE_FINO_DE_RTCC = 30;
const int ticks_PULSO_MINIMO = 62;
const int ticks_PULSO_MEDIO = 93;
const int ticks_PULSO_MAXIMO = 125;
int1 flagRTCC = 0;
int contRTCC = 0;
int1 flagSERVO1 = 0;
int tSERVO1 = ticks_PULSO_MEDIO;
#INT_RTCC
void RTCC_isr(void)
{
++contRTCC;
if(contRTCC==4){
set_TIMER0(AJUSTE_FINO_DE_RTCC);
}
if(contRTCC==5){
flagRTCC=1;
contRTCC=0x00;
}
}
void main()
{
int ValTIMER0;
int i=0;
for (i=0; i<=10; i++){
output_toggle(pin_a0);
delay_ms(1000);
}
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16|RTCC_8_bit);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
set_TIMER0(0);
enable_interrupts(INT_RTCC);
while(TRUE)
{
// DISPARO DEL PULSO PWM
if(flagRTCC==1){
flagRTCC=0;
output_high(PIN_b0);
flagSERVO1=1;
}
// CONTROL DE ANCHO DEL PULSO PWM
if(flagSERVO1==1){
valTIMER0 = get_TIMER0();
if(valTIMER0>tSERVO1){
flagSERVO1=0;
output_low(PIN_b0);
}
}
if (input(pin_b4)){
tSERVO1=ticks_PULSO_MAXIMO;
}
if (input(pin_b5)){
tSERVO1=ticks_PULSO_MINIMO;
}
}
}
Espero me puedan ayudar, agradecido de antemano.
Última edición por un moderador: