Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

17/05/2011 #1


Mover servomotor int. timer 0 ccs 16f877a
Hola compañeros,

les escribia para preguntarles una duda que tengo y no logro hacerme con ella.
Estoy programando en c el pic 16f877a, quiero mover un servo de esos comunes que van con una señal de 50 hz (20 ms.) y no logro hacerlo. Utilizo la interrupcion por desbordamiento de timer 0.

Les adjunto el codigo:

Codigo de ccs


#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use standard_io(b)
#define PIN_SERVO1 PIN_B0
const int AJUSTE_FINO_DE_RTCC = 30;
const int ticks_PULSO_MINIMO = 31;
const int ticks_PULSO_MEDIO = 93;
const int ticks_PULSO_MAXIMO = 155;
int1 flagRTCC = 0;
int contRTCC = 0;
int1 flagSERVO1 = 0;
int tSERVO1 = ticks_PULSO_MEDIO;
//--------------------timer0 interrupt----------------------------
#INT_RTCC
void TIMER0_isr()
{
++contRTCC;
if(contRTCC==4){
set_TIMER0(AJUSTE_FINO_DE_RTCC);
}
if(contRTCC==5){
flagRTCC=1;
contRTCC=0x00;
}
}
void main() {
int ValTIMER0;

// setup_timer_0(rtcc_internal|rtcc_div_16); // Prescaler = 16

set_TIMER0(0);

setup_counters( RTCC_INTERNAL, RTCC_DIV_16);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

do {

// DISPARO DEL PULSO PWM
if(flagRTCC==1){
flagRTCC=0;
output_high(PIN_SERVO1);
flagSERVO1=1;
}
// CONTROL DE ANCHO DEL PULSO PWM
if(flagSERVO1==1){
valTIMER0 = get_TIMER0();
if(valTIMER0>tSERVO1){
flagSERVO1=0;
output_low(PIN_SERVO1);
}
}

tSERVO1=ticks_PULSO_MINIMO;
} while (TRUE);
}


Saludos y gracias por ayudarme.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.