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
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