TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: fran2v en 04 de Enero de 2011, 09:38:26
-
Hola amigos .....tengo ilusion por poner un reloj digital que reproduzca las horas en forma de carrillón para la iglesia a la que humildemente pertenezco.
El almacenamiento de las hora y sonidos de carillón creo que ya lo tengo solucionado.... "en principio".... por medio de un amplificador, vocína exponencial y un circuito basado con el ISD 2560 o uno de la misma serie con más capacidad. No obstante tanbien agradecería todo tipo de ayuda de este foro.
Mi suplica.... es ayuda... para hacer un reloj.... el cual me de un impulso de 1" cada hora para poder controlar el ISD.
Agradeciendo su comprensión......
Salu2 a todos y un excelente 2011
Si prefieren mandar alguna consulta privadas.....lo pueden hacer al correo electronico : fvallverdú@gmail.com
No obstante preferiría que todo se haga en el foro por si hay algún otro necesitado como yo
-
Hola Fran2v, deberia expecificar, en que lenguaje de programacion y que micro dispone, siendo asi te aconsejo con iniciativa propia de cualquier programacion. ya hay algunos proyectos sobre Reloj aqui en el foros y quizas te sirva de ayudas.
Saludos
-
Muchas gracias por su apreciación. Lenguaje de programación ASM o en "C" y un PIC el que mejor se adapte ya que no lo tengo comprado. Tengo un pequeño programador T20.
Muchas gracias....y le agradecería su apoyo
Nota: En C casi no tengo idea y en ASM como principiante.
-
Hola amigos...je...je...seguimos:
Encontre en el foro este código pero no me lee el lcd la temperatura. Agradecería me indiquen que esta mal y tengo que cambiar.Gracias.
#include <18f2550.h>
#fuses HS,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,NOPUT
#use delay(clock=20000000)
#define RTC_SCL PIN_B1
#define RTC_SDA PIN_B0
#use fast_io(b)
//#define use_portb_lcd TRUE
#include <_ds1307.c>
#include <string.h>
#define LCD_DB4 PIN_C4
#define LCD_DB5 PIN_C5
#define LCD_DB6 PIN_C6
#define LCD_DB7 PIN_C7
//
#define LCD_RS PIN_C0
#define LCD_RW PIN_C1
#define LCD_E PIN_C2
#include <flex_lcd.c>
#include <ds1621.c>
int hr;
int min;
int sec;
int day;
int mth;
int year;
int dow;
char sdow[11];
char ValoresLeidos[105];
Byte value;
/*******************************************************************************
FUNCIONES ESCRITURA Y LECTURA EEPROM INTERNA
*******************************************************************************/
void write_string_eeprom(int address,char *data){
while(*data!=0){
write_eeprom(address++,*data);
data++;
}
write_eeprom(address,0);
}
void read_string_eeprom(int address,char *sl){
sl--;
do{
sl++;
*sl=read_eeprom(address++);
}
while(*sl!=0);
}
/*******************************************************************************
FUNCION DE ALARMAS
*******************************************************************************/
void alarma(void)
{
output_high(PIN_B7);
delay_ms(5000);
output_low(PIN_B7);
}
/*******************************************************************************
PROGRAMA PRINCIPAL
*******************************************************************************/
void main()
{
char alarmas[105];
char alarma1[]="083000";
char alarma2[]="090000";
char alarma3[]="092500";
char alarma4[]="100000";
char alarma5[]="102000";
char alarma6[]="103000";
char alarma7[]="111500";
char alarma8[]="113500";
char alarma9[]="120000";
char alarma10[]="123000";
char alarma11[]="124500";
char alarma12[]="131500";
char alarma13[]="143000";
char alarma14[]="153000";
char alarma15[]="163000";
char *leido=alarmas;
/*******************************************************************************
ESCRIBIR ALARMAS EN LA EPROM
*******************************************************************************/
write_string_eeprom(0x00,alarma1);
write_string_eeprom(0x07,alarma2);
write_string_eeprom(0x0E,alarma3);
write_string_eeprom(0x15,alarma4);
write_string_eeprom(0x1C,alarma5);
write_string_eeprom(0x23,alarma6);
write_string_eeprom(0x2A,alarma7);
write_string_eeprom(0x31,alarma8);
write_string_eeprom(0x38,alarma9);
write_string_eeprom(0x3F,alarma10);
write_string_eeprom(0x46,alarma11);
write_string_eeprom(0x4D,alarma12);
write_string_eeprom(0x54,alarma13);
write_string_eeprom(0x5B,alarma14);
write_string_eeprom(0x62,alarma15);
/*******************************************************************************
INICIALIZAMOS LCD Y DS 1307
*******************************************************************************/
lcd_init();
//init_temp();
printf(lcd_putc," NUESTRA");
printf(lcd_putc,"\n PARROQUIA");
delay_ms(2000);
lcd_putc("\f");
lcd_gotoxy(2,1);
printf(lcd_putc,"VIRGEN");
lcd_gotoxy(5,2);
printf(lcd_putc,"DE LAS NIEVES");
delay_ms(2000);
lcd_putc("\f");
delay_ms(5);
ds1307_init(DS1307_ALL_DISABLED);
//Set date for -> 2-Abril-2010 Viernes
//Set time for -> 17:32:00
ds1307_set_date_time(21,4,10,1,22,14,00);
set_tris_b(0x00); //puerto B como salida B7
disable_interrupts(GLOBAL); //todas interrupciones desactivadas
/*******************************************************************************
LEEMOS DS1307 Y VISUALIZAMOS DATOS EN LCD
*******************************************************************************/
do
{
ds1307_get_day_of_week((char*) sdow);
ds1307_get_time(hr,min,sec);
ds1307_get_date(day,mth,year,dow);
lcd_gotoxy(1,1);
printf(lcd_putc,"%s %02u-%02u-%02u",sdow,day,mth,year);
printf(lcd_putc,"\n%02u:%02u:%02u",hr,min,sec);
/*******************************************************************************
LEEMOS Y VISUALIZAMOS TEMPERATURA
*******************************************************************************/
init_temp();
read_temp();
value=read_temp();
lcd_gotoxy(10,2);
printf(lcd_putc,"Temp:%u ",value);
//delay_ms(1000);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 08:30
*******************************************************************************/
read_string_eeprom(0x00,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 09:00
*******************************************************************************/
read_string_eeprom(0x07,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 09:25
*******************************************************************************/
read_string_eeprom(0x0E,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 10:00
*******************************************************************************/
read_string_eeprom(0x15,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 10:20
*******************************************************************************/
read_string_eeprom(0x1C,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 10:30
*******************************************************************************/
read_string_eeprom(0x23,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 11:15
*******************************************************************************/
read_string_eeprom(0x2A,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 11:35
*******************************************************************************/
read_string_eeprom(0x31,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 12:00
*******************************************************************************/
read_string_eeprom(0x38,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 12:30
*******************************************************************************/
read_string_eeprom(0x3F,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 12:45
*******************************************************************************/
read_string_eeprom(0x46,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 13:15
*******************************************************************************/
read_string_eeprom(0x4D,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 14:30
*******************************************************************************/
read_string_eeprom(0x54,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 15:30
*******************************************************************************/
read_string_eeprom(0x5B,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 16:30
*******************************************************************************/
read_string_eeprom(0x62,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
}
While(1);
}
-
Tienes el circuito que estas utilizando??
Ese programa usa un DS1621 para leer la temperatura, lo tienes en tu circuito??
-
Gracias por tu atención y ayuda.
Lo estoy simulando con proteus 7.7 SP2.La hora y fecha se lee correctamente pero la temperatura siempre me sale 25. Adjunto PDF conexionado.
Soy novato y agradecería explicaciones a nivel de "torpe"....je...je....Primero quisiera solucionar lo de la temperatura y después poner más alarmas pero en distintas salidas (pins del PIC)
http://img89.imageshack.us/img89/7215/relojp.jpg (http://img89.imageshack.us/img89/7215/relojp.jpg)
Muchas gracias
-
mira, aquí tienes un reloj:
Este es el esquema http://www.todopic.com.ar/foros/index.php?topic=21496.msg258255#msg258255
y este el código en C18: http://www.todopic.com.ar/foros/index.php?topic=21496.msg259164#msg259164
Lo tendrías que adaptar a tus necesidades.
También controla temperatura