Encendido y apagado automatico de un dispositivos de electrónica de consumo mediante PIC16F877A
Descripción: Prototipo electrónico para el encendido y apagado automático de un dispositivos de electrónica de consumo, como TV, router, PlayStation, para lo cual se utilizó un PIC16F877A, un módulo Reloj RTC DS1307, un display LCD 16X2 y un teclado matricial 4x4.
Especificaciones: En base al datasheet del PIC16F877A, se utilizan dos pines para la transferencia de datos, serial clock (SCL) en pin RC3 y serial data (SDA) en pin RC4. Con respecto al modo I2C del PIC, los registro SSPCON, SSPCON2 y SSPSTAT son de control y estado en la operación en modo I2C.
Funcionamiento: Para la implementación del prototipo electrónico se programó para que desde el keypad se pueda escribir en el PIC la hora actual y guardado en el módulo reloj DS1307, adicionalmente desde el keypad se pueda escribir en el PIC la hora de encendido y apagado, en otras variables, para que seguidamente se compare el valor previamente escrito en RTC con las horas en las otras variables.
Para conseguirlo se utilizó el Modo I2C del PIC, para escribir al RTC DS1307 en formato BCD.
Keypad 4x4 para los dígitos que irán al LCD.
LCD para mostrar todos los valores obtenidos desde teclado.
Para el módulo reloj RTC DS1307 se utilizó:
#define DS1307_WRITE 0xD0 // Dirección de fábrica de I2C del DS1307 para escritura
#define DS1307_READ 0xD1 // Dirección de fábrica de I2C del DS1307 para lectura
Como también dentro while(1) en el void main(void)
// Comparación
if (hr == manual_hr_up && min == manual_min_up && sec == manual_sec_up) {
PORTAbits.RA1 = 1; // encendido
} else if (hr == manual_hr_down && min == manual_min_down && sec == manual_sec_down){
PORTAbits.RA1 = 0; // apagado
}.
