nclude <16f886.h>
#device ADC=10
#use delay(internal = 8MHz)
#include <flex_lcd416.c>
#define led PIN_B5
//#include <internal_eeprom.c>
int8 ciclo_activo=1;
int16 cont3;
void establecer_ciclo (int8 ciclo)
{
set_pwm1_duty(ciclo); // Establecer el ciclo activo
}
void pulsadores()
{
if (input(PIN_A4)==0)
{
while(!input(pin_a4)){
ciclo_activo ++; // Incrementar el ciclo activo.
if (ciclo_activo > 249) ciclo_activo = 249; // No permitir que el ciclo activo suba de 249
delay_ms(15);
establecer_ciclo(ciclo_activo);
}
}
if (input(PIN_A5)==0)
{
while(!input(pin_a5)){
ciclo_activo --; // Disminuir el ciclo activo.
delay_ms(15);
if (ciclo_activo <= 1) ciclo_activo = 2; // No permitir que el ciclo activo baje de 1
establecer_ciclo(ciclo_activo);
}
}
}
void memoria()
{
int16 cont;
if(input(pin_a2)==0){
while(!input(pin_a2)){
cont++;
delay_ms(5);
if (cont >500){
write_eeprom(00,ciclo_activo ); // guardo el dato ciclo activo
delay_ms(50);
cont = 0;
}
}
ciclo_activo =read_eeprom(00); // paso el dato a la variable ciclo_activo
cont=0;
delay_ms(50);
establecer_ciclo(ciclo_activo);
}
}
void memoria1()
{
int16 cont1;
if(input(pin_a3)==0){
while(!input(pin_a3)){
cont1++;
delay_ms(5);
if (cont1 >500){
write_eeprom(01,ciclo_activo ); // guardo el dato ciclo activo
delay_ms(50);
cont1 = 0;
}
}
ciclo_activo =read_eeprom(01); // paso el dato a la variable ciclo_activo
cont1=0;
delay_ms(50);
establecer_ciclo(ciclo_activo);
}
}
void energia()
{
// set_adc_channel(11);
// delay_us(50);
// ene = read_adc();
// if(ene<200)
if(input(pin_B4)==0){
cont3++;
delay_ms(1);
if (cont3 >10) {
write_eeprom(03,ciclo_activo );
delay_ms(50);
cont3 = 0;
}
}
}
void main()
{
ciclo_activo =read_eeprom(03);
establecer_ciclo(ciclo_activo);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4,249,1); // 1000 Hz. @ 4 MHz.
set_pwm1_duty(1); // Ciclo activo al mínimo
#ZERO_RAM // Limpiar RAM. (Variables en 0)
establecer_ciclo(ciclo_activo);
while (true)
{
pulsadores();
memoria();
memoria1();
energia();
}
}