Autor Tema: Problemas de menú en display 2x16 con 16f84A...  (Leído 4044 veces)

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

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Problemas de menú en display 2x16 con 16f84A...
« en: 11 de Marzo de 2010, 11:13:26 »
    :)Hola que tal:

  Siempre he sido seguidor de 'todopic' y siempre leo todos los post, ya que muchos problemillas que he tenido pues son similares a los expuestos y ya con eso lo resuelvo 8), sin embargo esto no lo he podido resolver y espero me puedan ayudar. El problema es el siguiente:

    Realize un programa que contiene un menu que te dá varias opciones reflejadas en el display. Al elegir una opción (de momento solo la 3) pues te manda una señal por 4 pines. Tengo un pequeño teclado con push buttons en A2,A3,A4.
    El problema especificamente es que no hace nada! el programa está en C ya que no sé ensamblador y el C se me facilita mas; lo malo es que obviamente abarca más memoria ya que me está consumiendo el %70 y apenas son las pruebas. En fin, les dejo el circuito y el código a ver si me pueden hechar la mano.

     

El código:
Código: [Seleccionar]
////////////////////////////////////////////////////////////////////////////////
//////////////               Practica 2                   //////////////////////
//////////////      practica que escribe en una LCD       //////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////           By MARCO RECARGADO               //////////////////////
////////////////////////////////////////////////////////////////////////////////

#include <16F84a.h>                ///   libreria para el manejo del pic16f877a
#use delay(clock=4000000)          ///   declara  la frecuencia del cristal
#fuses XT,NOWDT,NOPUT,NOPROTECT
#include <lcd.c>  // Librería para el manejo del lcd para ver las conexiones
                  // abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c
                  // y ahi les muestra.
                 
////////////////////////////////////////////////////////////////////////////////
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
////////////////////////////////////////////////////////////////////////////////




void main(void)
{


int8 seleccion;
int8 compu=0;
int8 senal;
lcd_init();  // Antes de usar el lcd,hay que inicializarlo


lcd_putc("HOLA MUNDO");
delay_ms(1500);
lcd_putc("\f");

delay_ms(5000);

lcd_putc("\f   Probador de\n      ECM's");
delay_ms(3000);
lcd_putc("\fSeleccione \nMarca:>");
delay_ms(1000);

while (true){

menu:
do {
seleccion=0;
if( input(PIN_A2) ) /*lcd_putc("\f entrada 0");*/ seleccion=1;
if( input(PIN_A3) ) /*lcd_putc("\f entrada 1");*/ seleccion=2;
if( input(PIN_A4) ) /*lcd_putc("\f entrada 2");*/ seleccion=3;
}
while(seleccion==0);


lcd_putc("\f");
//printf(lcd_putc, "%i",seleccion);
delay_ms(500);

apurate:
switch (seleccion) {

    case 1://lcd_putc("\fFord PCM");
           compu++;
           break;

    case 3://lcd_putc("\fNissan F50");
           compu--;
           break;
           
    case 2:lcd_putc("\finiciando...");
           delay_ms(1000);
           goto proceso;
           break;

    default://goto apurate;

            break; }
//delay_ms(2000);

switch (compu) {

    case 1:lcd_putc("\fMarca UNO");
           senal=1;
           break;

    case 2:lcd_putc("\fMarca DOS");
           senal=2;
           break;
           
    case 3:lcd_putc("\fMarca TRES");
           senal=3;
           break;
           
    case 4:lcd_putc("\fMarca CUATRO");
           senal=4;
           break;       
           
    //case 2:lcd_putc("\finiciando...");
          // goto proceso;
          // break;

    default:goto apurate;

            break; }

delay_ms(600);
lcd_putc("...OK?");
//printf(lcd_putc,"  %i",senal);
delay_ms(1000);
goto menu;
 


proceso:


switch (senal) {

    case 1:lcd_putc("\fno");
           //senal=1;
           break;

    case 2:lcd_putc("\fno");
           //senal=2;
           break;
           
    case 3:lcd_putc("\fjalo");
     output_high(PIN_A0);
     output_high(PIN_A1);
     output_high(PIN_B2);
     output_high(PIN_B3);
     delay_ms(1500);
           break;
           
    case 4:lcd_putc("\fMarca CUATRO");
           //senal=4;
           break;       
           
    //case 2:lcd_putc("\finiciando...");
          // goto proceso;
          // break;

    default:goto apurate;

            break; }

delay_ms(1000);
 lcd_putc("\fzax");
 delay_ms(1000);
goto menu;     
}

   
}   // fin de programa



PD1: La librería lcd está modificada para trabajar con el puerto B a 4 pines.
PD2: La simulación en el proteus funciona bien.

   Gracias.

micronoob

  • Visitante
Re: Problemas de menú en display 2x16 con 16f84A...
« Respuesta #1 en: 11 de Marzo de 2010, 11:25:05 »
hola,


poca memoria ...un micro mas grande
poco dinero ...otro trabajo
poca ganas  ...otra mujer jjejeje

un detalle
 no serian mejor unos pullup para tu botones y hecharle negativo al pulsar?

Saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problemas de menú en display 2x16 con 16f84A...
« Respuesta #2 en: 11 de Marzo de 2010, 11:27:03 »
hola,

poca memoria ...un micro mas grande
poco dinero ...otro trabajo
poca ganas  ...otra mujer jjejeje

 :D :D

Estoy de acuerdo ... con lo del cambio del micro ....  :mrgreen:
El papel lo aguanta todo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas de menú en display 2x16 con 16f84A...
« Respuesta #3 en: 11 de Marzo de 2010, 11:49:32 »
¿Como están los pines del LCD, conectaste la tensión de control de contraste? En proteus no es necesario, pero en la placa sí, ya que sino no se ve nada.

Supongo que debería haber algún problema en el HardWare y no en el programa ya que si estuviese mal el programa no te funcionaría tampoco la simulación.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas