Hola gente:
Me estoy enloqueciendo con un una practica que estaba intentando hacer con un servo.
Estoy armando un PWM con timer para hacer girar el servo para un lado 1 segundo y luego para el otro.
Si lo hago de esta forma funciona, pero todo lo tengo que hacer dentro del timer.
#include <18f4550.h>
#use delay(clock=4000000)
#fuses XT,NOLVP,NOWDT
#define DERECHA 5
#define IZQUIERDA 25
int16 cant=0;
int16 cant2=0;
int GIRO=DERECHA;
#int_RTCC
void reloj(void) {
if(cant==0) {
output_bit(PIN_B6,1);
}
if(cant==GIRO) {
output_bit(PIN_B6,0);
}
cant++;
if(cant==225) {
cant=0;
}
cant2++;
if(cant2==20000) {
cant2=0;
if(GIRO==5)
GIRO=25;
else
GIRO=5;
}
Set_timer0(247);
}
void main(void) {
setup_timer_0(RTCC_DIV_1 | RTCC_8_BIT);
enable_interrupts(int_RTCC);
enable_interrupts(global);
while(true) {
}
Ahora el tema es que si pongo un delay dentro del programa principal es como si se fuera de este y no volviera a entrar.
Estoy trabadicimo y no se cual es el problema.
Puedo poner delay dentro de un while principal cuando tengo configurado un timer no??
El timer esta configurado para que entre cada 0.1ms.
Codigo que no funciona.
#include <18f4550.h>
#use delay(clock=4000000)
#fuses XT,NOLVP,NOWDT
#define DERECHA 5
#define IZQUIERDA 25
int16 cant=0;
int16 cant2=0;
int GIRO=DERECHA;
#int_RTCC
void reloj(void) {
if(cant==0) {
output_bit(PIN_B6,1);
}
if(cant==GIRO) {
output_bit(PIN_B6,0);
}
cant++;
if(cant==225) {
cant=0;
}
Set_timer0(247);
}
void main(void) {
setup_timer_0(RTCC_DIV_1 | RTCC_8_BIT);
enable_interrupts(int_RTCC);
enable_interrupts(global);
while(true) {
delay_ms(1000);
if(GIRO==5)
GIRO=25;
else
GIRO=5;
}
}
Desde ya les agradesco mucho.
Saludos.
Pablo