Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/08/2011 #1


Problemas vonconvertidor ADC en pic 18F2550
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
09/08/2011 #2


Prueba de este modo:

set_adc_channel(0);
value=read_adc();
10/08/2011 #3


M e sigue sin funcionar se me bloquea al leer el ADC, seguire intentando haber si lo consigo, gracias.
10/08/2011 #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();
11/08/2011 #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.
13/03/2012 #6


despues del value
debe ir un retardo de 20Us
delay_us(20)
esto para dejar tiempo para que el micro tome la lectura
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.