«

»

Ago 06

Servo por interrupciones y pulsador capacitivo

En este capítulo combinaremos las entradas anteriores sobre los servos y el pulsador capacitivo, para mejorar la técnica de programación de servos y comprobar el uso práctico del mTouch.

Partimos de la placa base que hemos usado otras veces, un servo, un led y una moneda.

Servo 9 gr + PIC18F1320 + moneda + led

Configuramos sel temporizador TIMER2 para generar interrupciones cada 10 ms y cada dos interrupciones sacamos un pulso de anchura definida por la variable retardo hacia el servo.

Mientras tanto el programa principal espera las pulsaciones en la moneda para incrementar la variable de retardo e iluminar el led.

#include <main.h>

#define RMIN (int16)500
#define RMAX (int16)2500 

int count;
int16 retardo,ms,sg;

#int_TIMER2
void  TIMER2_isr(void) 
{
   count=!count;
   if (count) {
      output_high(PIN_B3);
      delay_us(retardo);
      output_low(PIN_B3);
      ms+=20;
   } 
   if (count>50) {
      sg++;
      count=0;
   }
}

int16 v0;

int16 leer_t(void)
{
   output_high(PIN_A1);
   output_low(PIN_A0);
   set_adc_channel(1);
   delay_us(100);
   output_float(PIN_A0);
   set_adc_channel(0);
   delay_us(100);
   v0=read_adc();
   if (v0>999) v0=999;
   return(v0);         
}

void main()
{
   setup_adc_ports(sAN0|sAN1);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel( 0 );
   setup_timer_2(T2_DIV_BY_16,196,16);      //630 us overflow, 10.0 ms interrupt
   count=0;
   sg=0;
   ms=0;
   retardo=1500;
   enable_interrupts(INT_TIMER2);
   enable_interrupts(GLOBAL);
   while(TRUE)
   {
      if ((leer_t()<400)) {
         if (ms>500 || sg) {
            output_toggle(PIN_B0);
            retardo+=250;
            if (retardo>RMAX) retardo=RMIN;
         }            
         sg=0;
         ms=0;
      } 

   }

}

Así queda el montaje funcionando:

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies