TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nordestenica en 12 de Febrero de 2005, 06:25:00
-
les quento lo que qiero es usar un pic 16f84 con dos push buton conectados a A0 e A1 que indica si pulsamos A1 entregamos 5v al pic el pic lo detecta e lo guarda en su eeprom se desconecta la alimentacion del pic e quando se conecta este devera saber que se abia pulsado el push buton conectado a A0 e activaria un rele conectado a B0 durante 1 segundo e se dormia pero quando se pulsara el push buton conectado a A1 el pic decteraria los 5v en A1 e lo guardaria en la eeprom quando se desconectara la alimentacion del pic e luego se volviera a conectar el pic sabria que se abria pulsado el push buton conectado a A1 e activaria el rele en B0 durante 1 segundo luego desconectaria el rele por otro segundo para volver a conectarlo durante otro segundo o sea
1 pulso de 1s de 5v en B0 si se a pulsado A0
2 pulsos de 1s de 5v en B0 si se a pulsado A1
esto es lo que estoi aciendo pero me lio como guardar los datos en la eepron del pic para que quando se desconet e vuelva a conectar el pic sepa que pulsador se habia pulsado
#include <16F84.h>
#fuses xt,nowdt,put,noprotect
#use delay(clock=4000000)
#define RELE PIN_B0
#define INVERNO PIN_A0
#define VERAO PIN_A1
void main()
{
if ( input ( INVERNO ) == 1)
{
write_eeprom ( INVERNO,INVERNO/ 256 ); // save speed to EEPROM
write_eeprom ( INVERNO, INVERNO % 256 );
break; // drop out to main menu
}
if ( input ( VERAO ) == 1)
{
write_eeprom ( VERAO, VERAO/ 256 ); // save speed to EEPROM
write_eeprom ( VERAO, VERAO % 256 );
break;
}
read_eeprom (INVERNO );
if ( INVERNO==1 )
output_HIGH ( RELE );
}
-
hola amigos!!
no estoy muy seguro de haber entendido lo que pides, pero creo que deberías declarar una variable booleana, y asignarle 0 o 1 dependiendo del botón que pulses:
boolean Estacion;
Cuando pulsas uno de los botones:
Estacion=0;
Cuando pulses el otro:
Estacion=1;
y lo guardas en eeprom, con la función write_eeprom().
Para que al comenzar el programa sepa cuál es el botón que habías pulsado, pon al principio del main():
Estacion=read_eeprom(...);
con lo cual cargas el valor que tenías almacenado en la eeprom.
no sé si era ésto a lo que te referías. en cualquier caso, buena suerte!
-
hee para un gran problema una gran solucion ya lo resolvi no uso la eepron del pic pero un comutador conectado a B1 quando lo pongo a +5V el pin B0 da dos pulsos con un segundo de retraso quando pongo B1 a massa o 0V el pin B0 da solo un pulso con duracion de 1 seg e es igual que se desconecte la alimentacion del pic porque ara sienpre lo que este definido en el comutador
#include <12C509.h>
#fuses INTRC,NOWDT,NOPROTECT, NOMCLR
#use delay(clock=4000000)
#define GP0 PIN_B0
#define GP1 PIN_B1
void INVERNO ( void );
void VERAO( void );
void main()
{
if ( input (GP1) == 0 )
{
INVERNO();
delay_ms(80);
break;
}
if ( input (GP1) == 1 )
{
VERAO();
delay_ms(80);
break;
}
}
void INVERNO ( void )
{
if ( input (GP1) == 0 )
delay_ms(7000);
output_high (GP0);
delay_ms(1000);
output_low (GP0);
break;
sleep();
}
void VERAO( void )
{
if ( input (GP1) == 1 )
delay_ms(4000);
output_high (GP0);
delay_ms(1000);
output_low (GP0);
DELAY_MS(1000);
output_high (GP0);
delay_ms(1000);
output_low (GP0);
break;
sleep();
}
pero la verdad es que me gustaria entender como almacenar este 1 e 0 en la eepron del pic e luego ir a buscarla siempre que yo quisiera