TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: francpa en 24 de Enero de 2013, 10:11:29

Título: puerto adc de pic 16f88
Publicado por: francpa en 24 de Enero de 2013, 10:11:29
hola a todos

mi problema es el siguiente:

hice un programa en donde ocupo el puerto adc del microcontrolador pic 16f628 pero necesito grabar el programa ya hecho y solo me consegui un pic 16f88 me sale un error el la configuracion del puerto al cambiar en la libreria el pic16f62 por el pic16f88 adjunto el codigo
Código: [Seleccionar]
#include <16F88.h>
#device adc=10
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#use delay(clock=4000000)
#include <lcd.c>
#define LED PIN_B2
void main() {
 
   int16 medicion;
   float voltaje;
   
   lcd_init();
   
   while (1) {
 
   {

     setup_adc(ADC_CLOCK_INTERNAL);
     setup_adc_ports (RA0_analog); aqui me sale error me dice el compilador ccs que no esta definido
      set_adc_channel(0);         
      delay_us(20);
      medicion= voltaje;
      medicion = read_adc();
      setup_adc (adc_off);
      voltaje = 13.8 * medicion / 1024;
   
      printf(lcd_putc, "\fADC = %4ld", medicion);
      printf(lcd_putc, "\nVoltage = %01.2fV", voltaje);   
   }
      if(input(pin_a1)==0)
        output_low(LED);
      if(input(pin_a1)==1)
        output_high(LED);
   
      if ((voltaje>=12.25) && (voltaje<=13.8)){
        output_high(PIN_B0);
        delay_ms (1000);
}
      else {
        output_low(PIN_B0);
     }
      if ((voltaje>9.7) && (voltaje<12.25)){
        output_high(PIN_B1);
        delay_ms (1000);
     }
      else
        output_low(PIN_B1);
     }   
  }

el programa lo que hace es medir el voltaje de una bateria y dependiendo del valor de este se encienden los leds dependiendo del rango de voltaje

cualquier ayuda muchas gracias
saludos a todos
Título: Re: puerto adc de pic 16f88
Publicado por: RedPic en 24 de Enero de 2013, 10:15:25
¿Qué error te sale exactamente?

Otra cosa ¿el 16F88 tiene LVP (Low Voltage Programing)? Si no lo tiene el Fuse NOLVP debe dar error.
Título: Re: puerto adc de pic 16f88
Publicado por: AngelGris en 24 de Enero de 2013, 10:28:45
  ¿Estás seguro que antes utilizabas un 16f628? Porque dicho pic no tiene ADC.
Título: Re: puerto adc de pic 16f88
Publicado por: francpa en 24 de Enero de 2013, 10:32:54
me dice que RA0_ ANALOG no esta definido

si, tienes razón algelgris era el pic16f876, con ese me funciona super bien pero con el otro de da error en setup_adc_ports (RA0_analog)
Título: Re: puerto adc de pic 16f88
Publicado por: samshiel_pic en 24 de Enero de 2013, 10:38:53
Solucionado!

Código: C
  1. setup_adc_ports (sAN0); // SI MIRAS EN LA LIBRERIA DEL PIC16F88 VERAS QUE ES "sAN0"

esa instruccion es distinta en el 16F88.

Código: C
  1. #include <16F88.h>
  2. #device adc=10
  3. #fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
  4. #use delay(clock=4000000)
  5. #include <lcd.c>
  6. #define LED PIN_B2
  7. void main() {
  8.  
  9.    int16 medicion;
  10.    float voltaje;
  11.    
  12.    lcd_init();
  13.    
  14.    while (1) {
  15.  
  16.    {
  17.  
  18.      setup_adc(ADC_CLOCK_INTERNAL);
  19.      setup_adc_ports (sAN0); // SI MIRAS EN LA LIBRERIA DEL PIC16F88 VERAS QUE ES "sAN0"
  20.       set_adc_channel(0);        
  21.       delay_us(20);
  22.       medicion= voltaje;
  23.       medicion = read_adc();
  24.       setup_adc (adc_off);
  25.       voltaje = 13.8 * medicion / 1024;
  26.    
  27.       printf(lcd_putc, "\fADC = %4ld", medicion);
  28.       printf(lcd_putc, "\nVoltage = %01.2fV", voltaje);  
  29.    }
  30.       if(input(pin_a1)==0)
  31.         output_low(LED);
  32.       if(input(pin_a1)==1)
  33.         output_high(LED);
  34.    
  35.       if ((voltaje>=12.25) && (voltaje<=13.8)){
  36.         output_high(PIN_B0);
  37.         delay_ms (1000);
  38. }
  39.       else {
  40.         output_low(PIN_B0);
  41.      }
  42.       if ((voltaje>9.7) && (voltaje<12.25)){
  43.         output_high(PIN_B1);
  44.         delay_ms (1000);
  45.      }
  46.       else
  47.         output_low(PIN_B1);
  48.      }    
  49.   }

Asi compila estupendamente.
Título: Re: puerto adc de pic 16f88
Publicado por: francpa en 24 de Enero de 2013, 10:49:04
 ((:-)) ((:-)) ((:-))

muchas gracias me salvaste samshiel_pic muy agradecidos
saludos a todos
Título: Re: puerto adc de pic 16f88
Publicado por: jonareyesm en 03 de Octubre de 2013, 20:48:22
Muchas gracias.  :o