Estimados amigos soy nuevo en TodoPic; me da mucho gusto saber que existe un foro de calidad tecnica y sobretodo para compartir informacion valiosa que nos hace crecer en conocimientos.Felicidades.
Por otra parte, estoy haciendo una tarjeta de adquisicion de datos con 16f877; un teclado telefonico y un lcd 4x20; exhibo 3 opciones en lcd, 1(auto),2(canal), 3 (opcion).Cuando escojo la opcion 1 se muestra todas las entradas analogas; en la opcion 2 se muestra solamente un canal a escojer y en opcion 3 se hace la rutina de calibracion de las entradas.
Actualmente estoy en la opcion1 se muestran todos los canales, pero estando en esta opcion oprimo cualquiera de las otras 2 y se hace un completo desorden y el pic se traba.
Podrian ayudarme o darme algun tip para poder continuar.Gracias
Les anexo el programa
#include<16f877.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#include<LCD420.c>
#define use_portb_kbd //teclado conectado a puerto b
#include <KBD.c>
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#byte porta=5
#byte portb=6
#byte portc=7
#byte portd=8
#byte porte=9
#bit porte0=0x9.0
float canal0;
float canal1;
float canal2;
float canal3;
float canal4;
float canal5;
float canal6;
float canal7;
//#define inc portc,0
//#define dec portc,1
//#define start portc,2
char k;
void main()
{
port_b_pullups(true);
set_tris_c(255);
lcd_init();
kbd_init();
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("ADC*16F877*Kbd*Lcd");
lcd_gotoxy(1,4);
lcd_putc("<1>Aut");
lcd_gotoxy(8,4);
lcd_putc("<2>Ch");
lcd_gotoxy(14,4);
lcd_putc("
>Opc");
While(1)
{
k=kbd_getc();
while((k=='\0'))
{
k=kbd_getc();
}
if((k!='*')&&(k!='#'))
{
switch (k)
{
case '1': lcd_init(); //inicializa lcd
delay_ms(5);
setup_adc(adc_clock_internal); // selecciona el reloj interno
setup_adc_ports(all_analog); //todas las entradas analogicas
disable_interrupts(global);
while(k='1')
{
lcd_gotoxy(9,1); //unidades
lcd_putc("V"); //unidades
lcd_gotoxy(9,2); //unidades
lcd_putc("V"); //unidades
lcd_gotoxy(9,3); //unidades
lcd_putc("P"); //unidades
lcd_gotoxy(9,4); //unidades
lcd_putc("K"); //unidades
lcd_gotoxy(20,1); //unidades
lcd_putc("A"); //unidades
lcd_gotoxy(20,2); //unidades
lcd_putc("B"); //unidades
lcd_gotoxy(20,3); //unidades
lcd_putc("C"); //unidades
lcd_gotoxy(20,4); //unidades
lcd_putc("D"); //unidades
lcd_gotoxy(1,1);
lcd_putc("Ch0=");
set_adc_channel(0); //selecciona canal 0
canal0=read_adc(); // lee canal cero
delay_ms(2); //espera 2 milisegundos para estabilizar
canal0=(canal0*5)/255; //calculo de entrada canal0
lcd_gotoxy(5,1);
printf(lcd_putc,"%3.2f",canal0); //pone en lcd valor de canal 0
delay_ms(30); //espera 30 milisegundos para estabilizar
lcd_gotoxy(1,2);
lcd_putc("Ch1=");
set_adc_channel(1); //selecciona canal 1
canal1=read_adc(); //lee canal 1
delay_ms(2); //espera 2 milisegundos para estabilizar
canal1=(canal1*5)/255; //calculo de entrada canal 1
lcd_gotoxy(5,2);
printf(lcd_putc,"%3.2f",canal1); //pone en lcd valor canal 1
delay_ms(30);
lcd_gotoxy(1,3);
lcd_putc("Ch2=");
set_adc_channel(2); //selecciona canal 2
canal2=read_adc(); //lee canal 2
delay_ms(2); //espera 2 milisegundos para estabilizar
canal2=(canal2*5)/255; //calculo de entrada canal2
lcd_gotoxy(5,3);
printf(lcd_putc,"%3.2f",canal2); //pone en lcd valor de canal 2
delay_ms(30); //espera 30 milisegundos para estabilizar
lcd_gotoxy(1,4);
lcd_putc("Ch3=");
set_adc_channel(3); //selecciona canal 3
canal3=read_adc(); //lee canal 3
delay_ms(2); //espera 2 milisegundos para estabilizar
canal3=(canal3*5)/255; //calculo de entrada canal 3
lcd_gotoxy(5,4);
printf(lcd_putc,"%3.2f",canal3); //pone en lcd valor canal 3
delay_ms(30);
lcd_gotoxy(12,1);
lcd_putc("Ch4=");
set_adc_channel(4); //selecciona canal 4
canal4=read_adc(); // lee canal 4
delay_ms(2); //espera 2 milisegundos para estabilizar
canal4=(canal4*5)/255; //calculo de entrada canal 4
lcd_gotoxy(16,1);
printf(lcd_putc,"%3.2f",canal4); //pone en lcd valor de canal 4
delay_ms(30); //espera 30 milisegundos para estabilizar
lcd_gotoxy(12,2);
lcd_putc("Ch5=");
set_adc_channel(5); //selecciona canal 5
canal5=read_adc(); //lee canal 5
delay_ms(2); //espera 2 milisegundos para estabilizar
canal5=(canal5*5)/255; //calculo de entrada canal 5
lcd_gotoxy(16,2);
printf(lcd_putc,"%3.2f",canal5); //pone en lcd valor canal 5
delay_ms(30);
lcd_gotoxy(12,3);
lcd_putc("Ch6=");
set_adc_channel(6); //selecciona canal6
canal6=read_adc(); //lee canal6
delay_ms(2); //espera 2 milisegundos para estabilizar
canal6=(canal6*5)/255; //calculo de entrada canal6
lcd_gotoxy(16,3);
printf(lcd_putc,"%3.2f",canal6); //pone en lcd valor de canal 6
delay_ms(30); //espera 30 milisegundos para estabilizar
lcd_gotoxy(12,4);
lcd_putc("Ch7=");
set_adc_channel(7); //selecciona canal 7
canal7=read_adc(); //lee canal 7
delay_ms(2); //espera 2 milisegundos para estabilizar
canal7=(canal7*5)/255; //calculo de entrada canal 7
lcd_gotoxy(16,4);
printf(lcd_putc,"%3.2f",canal7); //pone en lcd valor canal 7
delay_ms(30);
}
lcd_putc("\f");
//lcd_gotoxy(3,2);
//lcd_putc("");
//lcd_putc("AUTO");
break;
case '2': lcd_gotoxy(3,2);
lcd_putc("");
lcd_putc("CANAL");
break;
case '3': lcd_gotoxy(3,2);
lcd_putc("");
lcd_putc("OPCION");
break;
default: lcd_gotoxy(3,2);
lcd_putc("");
lcd_putc("No Valida");
}
}
}
}