TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pentax30 en 23 de Febrero de 2005, 12:06:00
-
Buenas a todos:
Llevo poco en el mundo de los pic i despues de probar com ASM i Basic me he puesto ha porobar con C.
He probado un programa para leer un canal analogico concretamente el AN4 i mostrar el resultado por un LCD de 8 bits de datos i la puerta A para el control, todo funciona menos que por la entrada analogica i comprobando con un polimero digital tengo 4,99V sin nada conectado i por lo tanto la lectura siempre es la misma, he probado con otra entrada i parece que funciona bien, tambien tube el mismo problema con basic i se soluciono ampliando el tiempo de espera despues de realizar la configuracion.
Si alguien me puede decir porque pasa esto se lo agradeceria mucho me estoi volviendo loco




-
¿No será que tienes configurado el pin como salida?
Revisa el registro TRISA
-
buenas nocturno66 No creo pues com otro canal funciona correctamente adjunto el codigo del programa, quizas exite algun error que no puedeo ver.
Puede ser que exista algun problema al utilizar el mismo puerto para salidas digitales i entradas analogicas??
Gracias por la ayuda


#include "C:Documents and SettingsAdministradorMis documentosDocuments PICTreballs mPICPIC CEXERCICISEXERCICI4PIC16F87X-1PROGRAMA1.h"
#include <stdlib.h>
#include <lcd2.c>
// VARIABLES
long value3;
long value4;
float temperatura, humitat, tensioT, tensioH;
//CONFIGURACIO DELS PORTS
#use fast_io (a)
#use fast_io (b)
#use fast_io (c)
// RUTINA INTERRUPCIONS
#int_EXT
EXT_isr() {
}
void main() {
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while (1){
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(4);
delay_ms (500);
value4 = read_adc();
set_adc_channel(3);
delay_ms (500);
value3 = read_adc();
setup_adc_ports( NO_ANALOGS );
setup_adc( ADC_OFF );
tensioT = value3 * (5.0/1023);
tensioH = value4 * (5.0/1023);
temperatura = 100 * tensioT;
humitat = (tensioH-0.958)/0.0307;
lcd_init();// Comandos de inicialización del LCD.
lcd_enviar(LCD_COMANDO, LCD_CLEAR);//borrem el LCD
lcd_enviar(LCD_COMANDO, LCD_HOME);//posem el cursor a la primera posicio
lcd_putc("Hum AN4: "
;
printf(lcd_putc,"%02.1f",humitat);
lcd_gotoxy(1,2);
lcd_putc("Temp AN3: "
;
printf(lcd_putc,"%2.1f",temperatura);
}
}
-
Me parece que tu error esque no has puesto la resistencia de pull-up que creo que necesita este pin. Revisa el manual del micro pq me parece que hay esta tu error
Espero haberte ayudado
-
Hola compi
A pesar de estar un poco verde aun en esto, me parece que tu problema es que no has puesto la resistencia de pull-up que creo que hay q poner en este pin. Revisa el manual de tu micro pero creo q ahí esta tu error
Saludos y espero haberte ayudado
-
En principio no hay ningún problema en usar el canal A/D y el resto de pines del mismo puerto como E/S digitales, yo lo he hecho en alguna ocasión, en el foro encontrarás muchos ejemplos de como funciona el conversor A/D, e incluso en mi web tengo algo hecho.
Por otra parte, dices que estás con el canal AN4??, solo recordar que este canal está en el pin A5, no en el A4 donde efectivamente hay un pin en colector abierto. Recordar este pequeño detalle, porque a veces muchos picamos y no nos damos cuenta....
Un saludo.
-

Hola compañeros del foro quiero dar las gracias por la ayuda que he recibido, gracias a sus consejos he conseguido que el programa funcione correctamente.
alfinal lo que hice fue añadir la instruccion set_tris_a (0xFF); que configura todo el puerto A como entradas digitales.
Si me es posible intentare de aportar alguna rutina que pueda ser de ayuda, aunque mis conocimientos son algo pobres, pues llevo poco en el mundo de la programacion de PICs en C.
GRACIAS A TODOS.