TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: sonicTH 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.
(http://)
El código:
////////////////////////////////////////////////////////////////////////////////
////////////// 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.
-
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
-
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:
-
¿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.