Autor Tema: puerto adc de pic 16f88  (Leído 4956 veces)

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

Desconectado francpa

  • PIC10
  • *
  • Mensajes: 16
puerto adc de pic 16f88
« 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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: puerto adc de pic 16f88
« Respuesta #1 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.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: puerto adc de pic 16f88
« Respuesta #2 en: 24 de Enero de 2013, 10:28:45 »
  ¿Estás seguro que antes utilizabas un 16f628? Porque dicho pic no tiene ADC.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado francpa

  • PIC10
  • *
  • Mensajes: 16
Re: puerto adc de pic 16f88
« Respuesta #3 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)

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: puerto adc de pic 16f88
« Respuesta #4 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.

Desconectado francpa

  • PIC10
  • *
  • Mensajes: 16
Re: puerto adc de pic 16f88
« Respuesta #5 en: 24 de Enero de 2013, 10:49:04 »
 ((:-)) ((:-)) ((:-))

muchas gracias me salvaste samshiel_pic muy agradecidos
saludos a todos

Desconectado jonareyesm

  • PIC10
  • *
  • Mensajes: 1
Re: puerto adc de pic 16f88
« Respuesta #6 en: 03 de Octubre de 2013, 20:48:22 »
Muchas gracias.  :o