Autor Tema: (SOLUCIONADO) Problemilla con puerto E en 18F46K22  (Leído 1698 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BINARIO

  • PIC16
  • ***
  • Mensajes: 156
(SOLUCIONADO) Problemilla con puerto E en 18F46K22
« 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  :-/
« Última modificación: 06 de Octubre de 2014, 17:44:17 por BINARIO »
000101111 101110000011110 00010 11101 110 1 000111 00010010011010111100 101101001 11110000 001 00 10110 111 00001 01110 0010101 01011110 00 00011111111 0011111 011110001111111111 1011111111101100000000

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 441
    • Mcu Tronics
Re: Problemilla con puerto E en 18F46K22
« Respuesta #1 en: 13 de Agosto de 2014, 16:48:14 »
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.
Nunca se deja de aprender

Desconectado BINARIO

  • PIC16
  • ***
  • Mensajes: 156
Re: Problemilla con puerto E en 18F46K22
« Respuesta #2 en: 13 de Agosto de 2014, 22:25:16 »
Es verdad compañero es la configuracion de set_adc_ports eso fallaba gracias  :-/ :-/ :-/ :-/
000101111 101110000011110 00010 11101 110 1 000111 00010010011010111100 101101001 11110000 001 00 10110 111 00001 01110 0010101 01011110 00 00011111111 0011111 011110001111111111 1011111111101100000000

Desconectado BINARIO

  • PIC16
  • ***
  • Mensajes: 156
Re: Problemilla con puerto E en 18F46K22
« Respuesta #3 en: 19 de Agosto de 2014, 13:09:40 »
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.
000101111 101110000011110 00010 11101 110 1 000111 00010010011010111100 101101001 11110000 001 00 10110 111 00001 01110 0010101 01011110 00 00011111111 0011111 011110001111111111 1011111111101100000000

Desconectado BINARIO

  • PIC16
  • ***
  • Mensajes: 156
Re: Problemilla con puerto E en 18F46K22
« Respuesta #4 en: 19 de Agosto de 2014, 13:46:43 »
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 |.


 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/
000101111 101110000011110 00010 11101 110 1 000111 00010010011010111100 101101001 11110000 001 00 10110 111 00001 01110 0010101 01011110 00 00011111111 0011111 011110001111111111 1011111111101100000000


 

anything