Autor Tema: ayuda con contador timer0 urge¡¡¡¡¡  (Leído 2062 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado isa12345

  • PIC10
  • *
  • Mensajes: 19
ayuda con contador timer0 urge¡¡¡¡¡
« en: 20 de Junio de 2011, 21:30:00 »
hola necesito ayuda urgente¡¡¡¡ tengo que hacer un contador de pulsos en forma descendente y ascendente, lo estoy realizando con el timer0 como contador y aparte realizo lecturas por el modulo adc en los pines a0 estos valores los mando a imprimir en una lcd. ya probe mi contador de pulsos por separado y me funciona corectamente, pero ya dentro del codigo con la lectura adc y la lcd no me funciona bien. les pongo el codigo espero me puedan ayudar¡¡¡¡¡¡¡¡ gracias


codigo del contador por separado

#include <18f4550.h>
#fuses INTHS,NOPBADEN 
#use delay(internal=8Mhz)
#include <lcdd.c>

#BYTE TRISA=0xF92
#BYTE PORTA=0xF80
#BYTE TRISB=0xF93
#BYTE PORTB=0xF81
#BYTE TRISC=0xF94
#BYTE PORTC=0xF82
#BYTE TRISD=0xF95
#BYTE PORTD=0xF83

int16 counter;
int16 x;

void main()
{x=0;
SET_TRIS_A(0xFF);
lcd_init();
setup_timer_0(RTCC_DIV_2|RTCC_EXT_L_TO_H);
set_timer0(0);
while(true)
{counter=get_timer0();
lcd_gotoxy(1,1);
printf(lcd_putc,"\ %Lu",counter);
IF(counter==1){
   set_timer0(0);
   if(input(pin_B4)==1)
       {
       x++;
     
       }// entonces incrementar una unidad el valor de X.
       if(input(pin_B3)==1)
       {
       x--;
       }
}
lcd_gotoxy(1,2);
printf(lcd_putc,"\ %Lu",x);

}
}




codigo completo

#include <18f4550.h>
#fuses INTHS,NOPBADEN 
#use delay(internal=8Mhz)
#include <lcdd.c>

#BYTE TRISA=0xF92
#BYTE PORTA=0xF80
#BYTE TRISB=0xF93
#BYTE PORTB=0xF81
#BYTE TRISC=0xF94
#BYTE PORTC=0xF82
#BYTE TRISD=0xF95
#BYTE PORTD=0xF83

int16 counter;
int16 x;
int16 q;
void sensor();
void main()
{
lcd_init();
x=0;
SET_TRIS_A(0xFF);
setup_timer_0(RTCC_DIV_2|RTCC_EXT_L_TO_H);
set_timer0(0);
setup_adc_ports(all_analog);//declaracion para activar el modulo ADC
setup_adc(ADC_CLOCK_INTERNAL);
//setup_ccp1(CCP_PWM);//declaracion para usar el modulo CCP en modo PWM
//setup_timer_2(T2_DIV_BY_1, 127, 1); //Frecuencia de 15.62KHz
//set_pwm1_duty(500);
while(true)
{  counter=get_timer0();
 lcd_gotoxy(10,1);
   printf(lcd_putc,"\ %Lu",counter);
     lcd_gotoxy(1,2);
     printf(lcd_putc,"\ %Lu",x);   
   
     IF(counter==5){
       delay_us(10);
       if(input(pin_B3)==1)
       {
       x++;
       }
      set_timer0(0);       
     }
      sensor();
    //VARIANDO EL VALOR DE LA LECTURA ADC IRA REALIZANDO CIERTAS ACCIONES
      //ENROLLANDO O DESENROLLANDO LA PERSIANA           
      //if(q>200)
      //cero();
       //if((q>150)&&(q<200))
         //   veinticinco();
      // if((q>151)&&(q<100))
        //            mitad();
       //if((q>50)&&(q<99))
         //    setentaycinco();
      // if  ((q>49)&&(q<98))
          //   cien();
     
}
 

}

void sensor()
{
//LECTURA DE VALOR ADC GENERADA POR UNA FOTORESISTENCIA POR EL PIN A0     
      set_adc_channel(0);
      delay_us(20);
      q = read_adc();
      lcd_gotoxy(1,1);
      printf(lcd_putc,"\ %Lu",q);     

}

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: ayuda con contador timer0 urge¡¡¡¡¡
« Respuesta #1 en: 23 de Junio de 2011, 14:31:13 »
No uso CCS para la programación de Micros, pero creo que un poco de teoría no te caería mal.

Te dejo un link para que veas el uso del timer0

http://www.cursomicros.com/mod2/c06_01_los_timers.html

el uso de pantallas LCD

http://www.cursomicros.com/mod2/c03_01_introduccion.html

Y conversor ADC

http://www.cursomicros.com/mod2/c09_01_conversor_adc.html

Saludos  :)
Lo que no me destruye, me fortalece


 

anything