Problemas vonconvertidor ADC en pic 18F2550

#1
Hola, tengo un problema con el convertidor analógico digital del pic 18F2550, hace bastante tiempo que no programo y creo tener un problema en las configuraciones del pic, lo que trato de hacer es sacar por pantalla un valor obtenido de un potenciómetro en función de como se encuentre este, la pantalla lcd la consigo hacer funcionar bien pero al llegar a la zona de la conversión AD se me "cuelga" el programa, lo estoy probando con el proteus.
Para hacer el programa estoy usando CCS

Aquí dejo el código:


//INTENTO CONVERTIR EL VALOR DE UN POTENCIOMETRO Y SACAR EL VALOR POR PANTALLA


#include <18F2550.h>

#use delay( clock = 8000000 )
#use I2C(MASTER,SCL=PIN_C1,SDA=PIN_C0) // defino salidas i2c
#define AN0 //Selecciona el an0 como como entrada analogica
#define VSS_VDD // Selecciono el rago de tensiones 0 a 5v
#define ADC_CLOCK_DIV_4 // lo he puesto al azar como prueba
#define ADC_START_AND_READ //configuro el convertidor
SETUP_ADC_PORTS(AN0); //selecciono el puerto del convertidor
#include <LCD_i2c.c> //funciones para la pantalla lcd
#fuses INTRC_IO,NOWDT //relog interno sin watchdog



#BYTE TRISB = 0xF93
#BYTE PORTB = 0xF81
#BYTE OSCCON = 0xFD3



void main()

{
int16 value=0;
OSCCON=0b01110011;
bit_set(TRISB,0); //RB0 como entrada
bit_set(TRISB,1); //RB0 como entrada
bit_clear(TRISB,3); //RB0 como entrada
bit_clear(portb,3);


lcd_init(); //inidio la LCD
printf(lcd_putc,"Hola"); // pongo hola para saber si funciona
delay_ms(1000); // retardo 1seg
Lcd_gotoxy(1,1); // vuelvo al principio de la lcd linea 1`posicion 1
while ( 1)
{

value=read_adc(AN0);// leeo el valor del convertidor y se lo asigno a la variable ¡¡¡¡AQUI SE ME QUEDA EL PROGRAMA!!!
Lcd_gotoxy(1,1); //vuelvo a la linea 1
printf(lcd_putc,"%Lu",value); // Escribo el valor en la lcd
delay_ms(500); //retardo 500ms
}
}

-------------------------------------------------------------------------------------------------


Si me podeis hechar una mano.

GRACIAS
 
#4
Prueba a utilizar el Wizard de CCS para obtener el "esqueleto" del programa en tu programa te faltan muchos Fuses y los Defines creo que no estan bien. Tambien te falta:

#device adc=10 (despues de #include <18F2550.h>)


setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL ); (al inicio de la funcion Main())


set_adc_channel(X);
value=read_adc();
 
#5
Yo leo entradas analogicas en un pic18 y uso estos fuses:
#fuses HS,NOWDT,NOPROTECT,NOLVP
y me funciona bien. pero lo pongo justo despues del include del pic, no en el lugar dnd lo has puesto tu.
 

Temas similares

Arriba