TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: BINARIO en 13 de Agosto de 2014, 16:27:10
-
Estimados,
nuevamente renegando por aca con los micros, tengo un problemilla concreto en el puerto E, en el mismo tengo mapeados un led para PWONLED y hacer de baliza de mi equipo en modo sleep y dos botones estarian asi dispuestos
RE0 ----- BOTON +
RE1 ----- BOTON -
RE2 ----- LED_ON
El led anda perfecto, pero cuando quiero presionar algun boton no me responde de entrada configure el puerto E, asi:
TRISE = 0x60;
y luego en el codigo hago esto:
CASE 0: //Muestra de temperatura.
lcd_putc("\f");
delay_ms(10);
lcd_putc ("TEMPERATURA");
set_adc_channel(2); //Habilitación canal 2
delay_us(20); //por seguridad esperamos 20us antes de leer
q = read_adc(); //Lectura canal 2
p = 0.65 * q / 133.0; //Conversión a tensión
//p = ((65/133) * q) - (5190/19);
t = 0.48872 * q - 273.1578947 ; //Conversión a tensión
lcd_gotoxy (1,2);
printf(lcd_putc, "AD=%3ld T=%01.2fC", q, t); //imprimo numero de muestras y temperatura
lcd_gotoxy (21,1);
lcd_putc (" Min:00.0C|Max:00.0C");
lcd_gotoxy (21,2);
lcd_putc("<< 00:00 |00:00 >>");
if (bit_test (PORTE, 0) )
{
delay_ms(100); //anti-rebote por software
if (bit_test (PORTE, 0) )
SELECCION = 1; //si presiono "+"
}
if (bit_test (PORTE, 1) )
{
delay_ms(100);
if (bit_test (PORTE, 1) )
SELECCION = 7; //si presiono "-"
}
delay_ms(100);
BREAK;
Con esto yo implemento un menu tipo scroll que corre a derecha o a izquierda dentro de un SWITCH que evalua la variable seleccion y entra en cada menu dependiendo del valor que tenga SELECCION, pero por algun motivo, al presionar los botones no se actualiza la variable, sigo renegando si consigo hacerlo andar subo la respuesta, instale hace poco el CCS 5.025 y me estoy familiarizando con estos micros, antes usaba un 18F452 y funcionaba todo correcto, tengo la impresion que me esta faltando algun tipo de configuracion en este maldito puerto jeje :-/
-
Segun veo en el datasheet del PIC en cuestion, en esos pines tienes canales analogicos, porque no pruebas a desactivar las funciones de pin analogicos, y los pones como pines digitales. El ccs ya incorpora funciones para eso, checa la ayuda del compilador.
En conjunto, te recomiendo usar la funcion input_state(PIN_Ex), en ves de bit_test(port,bit), donde "x" es el bit que deseas testear.
Saludos.
-
Es verdad compañero es la configuracion de set_adc_ports eso fallaba gracias :-/ :-/ :-/ :-/
-
lo que no estoy pudiendo conseguir ahora, es la tabla de configuracion del adcport en ccs de este micro que soporta hasta 25 puertos AD. voy a investigar en el archivo .h del micro.
-
OK YA ESTA SOLUCIONADO!!!
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4);
setup_adc( ADC_CLOCK_INTERNAL );
Lo encontre en el archivo header del pic, pero como sabia como implementarlo lo google, y para decirle al micro que puertos seran analogicos debemos colocar sANx (donde x es el puerto en cuestion) y separamos con una barra |.
:-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/