TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: underwol2 en 16 de Junio de 2012, 20:05:35
-
estoy intentando hacer un codigo donde al precionar una tecla ingrese a la rutina de codigo sino se detecta actividad en la rutina salga automaticamente por conteo de tiempo
la rutina es para incrementar el valor de una variable y quiero que sino sesaca dela rutina manual mente lo aga automaticamente como lo hace (el menu de un tv sino no se hace mas cambios se sale automaticamente del menu)
esto es lo que tengo en la parte de la rutina
//incremento o de cremento de temperatura aguardar en la eeprom
if(input(pin_a1)==1)
while(1)
{
if(input(pin_a2)==1)
{
contador++;
if(contador==255)
{
contador=0;
}
}
//decremento de temperatura aguardar en la eeprom
if(input(pin_a3)==1) //tecla para entrar en la rutina
{
contador--;
if(contador==0)
{
contador=256;
}
}
lcd_gotoxy(1,2);
lcd_putc("TMN");
lcd_gotoxy(5,2);
printf(lcd_putc,"%3u",contador);
delay_ms(500);
//salir de la aplicacion de contador manual
if(input(pin_a4)==1)
{
break;
}
//guardado en la eeprom interna del pic
if(input(pin_a5)==1)
{
write_eeprom(0x00,contador);
break;
}
}
hasta aqui la rutina solo sale manual mente al precionar la tecla de salida
este es el codigo para que salga automaticamente por conteo de tiempo pero lo que quiero es que comiense a ejecutarse cuando no aya activida en el codigo
ejemplo que lla sedeje de precionar al guna tecla
//salida del codigo por tiempo
salida++;
if(salida==5)
{
salida=0;
break;
}
-
Con un timer, lo activas al entrar en la rutina, en la interrupción por desborde vas aumentando una variable, ahora en tu rutina pones otro if comprobando esta variable y cuando sobrepase el valor deseado sales de la rutina.
Si no quieres usar timer también puedes ir incrementando una variable en la misma rutina, calculas el tiempo que tarda en recorrerla y lo mismo de antes, if comprobando y cuando pase de.. break.
A todo esto, cada vez que haya actividad contador a 0.
Un saludo
-
por ahora lo unico que seme ocurrio fue darle mas tiempo mientras aumento la varible y grabo en la eepron
-
:shock: Ostras, no me habia fijado en la ultima parte de tu codigo, bueno, pues simplemente ahi lo que puedes hacer es en cada uno de tus "if" poner la variable salida a 0.
Un saludo.
-
intentando mejorar el programa e echo con pulsadores como el del ejemplo pero tambien lo estoi armando con teclado 4x4 matricial
me apresentado dos problemas asolucionar el codigo se basa el pequeño codigo para rastrear tecla precionada por teclado muy comun por internet a funcinado hasta que le puse la funcion de que guardar en la eeprom al precionar la tecla if(c=='*'); lo raro es qie al precionar la primera tecla de una sesale ino puedo escribir nisiquiera el numero aguardar en la eeprom
haci que intente utilizar el sistema de pulsadores para guardar en la eeprom ya probado y no funciono aberigue y toca combertir de char a hexa para poder guardar en la eeprom
me gustaria que quedara sola mente con el teclado 4x4 y no tubiera que utilizar pulsadores ya que con el teclado tengo muchas funciones de numeros y letras con los mismos 8 entradas
alguien tiene ejemplos de codigo donde se escriba en el teclado 4x4 matricial y se guarde en la eeprom al precionar otra tecla del mismo teclado
el proposito de este es para guradar en variables temperatura minima y temperatura maxima y ojala poder modificar otras varibles
este es codigo con teclado 4x4 que intento hacer funcionar completamente se sale al presionar una tecla y elque la ocasiona la salida es if(c=='*') si lo quito no se sale
void gtmn(void)
{
lcd_putc("\f");
lcd_putc("TEMPERATURA \nMINIMA");
delay_ms(1000);
lcd_gotoxy(8,1);
lcd_putc("\f");
for(i=0;i<16;i++)
{
do
{
c=kbd_getc();
}
while(c==0);
printf(lcd_putc,"%c",c);
limit=i+1;
if(c=='*')
write_eeprom(0x00,c);
break;
if(c=='D')
break;
salida++;
if(salida>20)
{
salida=0;
break;
}
}
}