///////////////////////////////////////////////////////////////////////////////
// Autor: JUKINCH para el foro todopic //
// Fecha:
// //
// Programa: proyecto zorras - CON rtc ds1307 y LCD 2*16 //
// Version: 0.1 //
// //
// Dispositivo: PIC 16F877A Compilador: CCS vs4.023 //
// Entorno IDE: ccs //
// PIC: 16f877a //
///////////////////////////////////////////////////////////////////////////////
// Conexión del LCD al Pic (configuración de pines)
//
// PIC LCD
//
// PORTd.0 E
// PORTd.1 RS
// PORTd.2 R_W
//
//
// PORTd.4 D4
// PORTd.5 D5
// PORTd.6 D6
// PORTd.7 D7
/////////////////////////////////////////////////////////////////////////////
// COMO ALIMENTAR EL LCD
// pin VDD a 5v
// pin VSs a gnd
// pin VO a gnd o resistor para fijar contraste
// COMO ENCENDER LA LUZ DEL BACKLIGHT
// PIN 15 a 5v
// pin 16 a gnd
/////////////////////////////////////////////////////////////////////////////
// COMO CONECTAR EL RTC. DS1307
//
// pin 1 y 2 poner un cristal de 36768khz
// pin 3 bateria vcc 3V
// pin 4 gnd
// pin 5 SDA al SDA del pic 16f877a (Es el pin 23)y una resistencia de 10k a VCC
// pin 6 SCL al SCL del pic 16f877a (Es el pin 18)y una resistencia de 10k a VCC
// pin 7 no conectado
// pin 8 a VCC 5V
/////////////////////////////////////////////////////////////////////////////
// 3 botones para modificar hora en rA 0,1,2 con resistencia pull up
//
/////////////////////////////////////////////////////////////////////////////
// LA SALIDA DE EMISION MORSE AL TRANSMISOR ES POR RB.4
/////////////////////////////////////////////////////////////////////////////
// DIRECTIVAS DEL PREPROCESADOR //////////////////////////////////////////////
#include <16f877a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
// lcd.c //////////////////////////////////////////////////////////////////////
// #define use_portb_lcd TRUE // para usar port D comentar esta linea
#include <lcd.c> // librería del lcd
///////////////////////////////////////////////////////////////////////////////
// Libreria ds1307.c //////////////////////////////////////////////////////////
#define RTC_SDA PIN_C4 // configura el pin C4 como SDA
#define RTC_SCL PIN_C3// configura el pin C3 como SCL
#define USE_INTERRUPTS 1
#include <libreria_rtc.c>
///////////////////////////////////////////////////////////////////////////////
///VARIABLES GLOBALES
// VARIABLES PARA EL RTC
int sec=0;
int min=0;
int hrs=0;
int day=0;
int month=0;
int yr=0;
int dow=0;
/////////////////////////////////////////////////////////////////////////////
// VARIABLES PARA EL MORSE
const int unidad=140; // la unidad en milisegundos para delay_ms se debe
// declarar como constante
// porque sinó sobrepasa el valor permitido para usar como
// variable
//------------ HORA DE ARRANQUE -----------------//
int horaStartMorse=0; // hora de arranque
int minutoStartMorse=0; // minuto de arranque
int segundoStartMorse=0; // segundo morse
//------------ HORA DE FINAL -----------------//
int horaStopMorse=0; // hora de detención
int minutoStopMorse=0; // hora de detención
int horaStartProximo=0;
int minutoStartProximo=0; // VARIABLE PARA COMPUTO DE 5 minutos después de arranque
int MinutosEntreTxyTx=0;
/////////////////////////////////////////////////////////////////////////////
//DEFINICIONES DE FUNCIONES
void oscilador(void);
void punto(void);
void espacioentrecaracter(void);
void raya(void);
void espacioentreletra(void);
void espaciopal(void);
void muestrahora(void);
void configuradigitoshora(void);
void configuradigitosminutos(void);
void configuradigitossegundos(void);
void muestrahorastartfox(void);
void configurahorastartfox(void);
void configuraminutosstartfox(void);
void configurahorastopfox(void);
void configuraminutostopfox(void);
void muestrahorastopfox(void);
void configuraminentreTxyTx(void );
//------Programa principal--------------------------------------
void main(void)
{
// VARIABLES LOCALES DE MAIN
int i=0; // variable para for para probar parpadeo de led en port b.1
int bucle=0; // variable para for Cantidad de veces que dice MOE
int32 bucleoscilafinal=1; // // variable para el for del tono final
//------Puertos y pines-----------------------------------------
set_tris_a(0b11111); // puerto a como ENTRADAS
set_tris_b(0b00000000); // puerto b como salidas
//----------descomentar para inicializar hora en rtc----------------------------
// Inicializa DS1307
ds1307_init(DS1307_OUT_ENABLED | DS1307_OUT_1_HZ);
sec=0;
min=0;
hrs=0;
day=1;
month=1;
yr=1;
dow=1; //dia de la semana
// configura hora inicial DS1307
ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
//-----------------------------------------------------------------------------
// 1 ------------------------- CONFIGURAR ZORRA -----------------------------
lcd_init(); //-----Inicializo el LCD-------------------------------
lcd_putc('\f'); //-borro la pantalla-----------------------------------
lcd_gotoxy(1,1); //----pongo el cursor en caracter 1 de la línea 1------
printf(lcd_putc
,"CONFIGURAR ZORRA");
while (1) // bucle MENÚ principal
{
if (input(PIN_A2) ) // controla el puerto A2 PARA PASAR OPCION SETUP
{
delay_ms(150);
GOTO ConfiguraHoraRTC;
};
}
// 2 ------------------------- CONFIGURAR HORA RTC-----------------------------
ConfiguraHoraRTC: // OPCION 1) CONFIGURA HORA
lcd_putc('\f'); //-borro la pantalla-----------------------------------
lcd_gotoxy(1,1); //----pongo el cursor en caracter 1 de la línea 1------
while (1) // bucle CONFIGURA digitos HORA RTC
{
muestrahora();
delay_ms(10);
if (input(PIN_A2) ) // controla el puerto A2 PARA PASAR OPCION SETUP
{delay_ms(150);
GOTO ConfiguraMinutosRTC;
};
configuradigitoshora();
}
// 3 ------------------------- CONFIGURAR MINUTOS RTC--------------------------
ConfiguraMinutosRTC:
lcd_putc('\f'); //-borro la pantalla-----------------------------------
lcd_gotoxy(1,1); //----pongo el cursor en caracter 1 de la línea 1------
printf(lcd_putc
,"MINUTOS RTC");
while (1) // bucle CONFIGURA digitos minutos RTC
{
delay_ms(10);
muestrahora();
if (input(PIN_A2) ) // controla el puerto A2 PARA PASAR OPCION SETUP
{delay_ms(150);
GOTO ConfiguraSegundosRTC;
};
configuradigitosminutos();
}