Muy buenas tardes a todos,
primera vez que escribo y es para preguntar , mil disculpas pero como dicen quien no pregunta nunca aprende
monte en proteus el reloj con ds1307 y corre perfectamente,pero al pasar al protoboard no arranca , porlo que he leido me falta iniciar el ds1307 con el bit 7 ch=0,pero ese es problema parami donde lo inserto en el programa
adjunto el programa en proton es el que medio he aprendido a usar AGRADECERE LA AYUDA
primera vez que escribo y es para preguntar , mil disculpas pero como dicen quien no pregunta nunca aprende
monte en proteus el reloj con ds1307 y corre perfectamente,pero al pasar al protoboard no arranca , porlo que he leido me falta iniciar el ds1307 con el bit 7 ch=0,pero ese es problema parami donde lo inserto en el programa
adjunto el programa en proton es el que medio he aprendido a usar AGRADECERE LA AYUDA
Código:
Device 16F628A
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
CMCON=7
TRISB=%11
TRISA =%111 ;el puerto A.0 es de entrada
define lcd_dreg PORTB
define lcd_dbit 4
define lcd_rsreg PORTB
define lcd_rsbit 3
define lcd_ereg
define lcd_ebit 2
define I2C_SCLOUT 1 ;para que no necesite resistencia pull-up en SCL
CPIN VAR PORTA.1 ;pin señal de reloj I2C
DPIN VAR PORTA.0 ;pin de datos I2C
segu VAR Byte ;definir tamaño de variable segundos 1 a 255
minu VAR Byte ;variable para los minutos
hora VAR Byte ;variable para las horas
diaS VAR Byte ;variable día de la semana
diaF VAR Byte ;variable día fecha del mes
mes VAR Byte ;variable mes
anio VAR Byte ;variable año de 2 dígitos
actualizado VAR Bit ;variable para almacenar un 1 o 0
EData 0, 0 ;memoria 0 con el valor inicial 0, sirve para
;indicar que nunca ha corrido este programa
actualizado=ERead 0 ;carga el valor de la memoria EEPROM dirección 0
If actualizado =0 Then grabarRTC ;si es la 1ra vez que corre ir a grabar RTC
;caso contrario sólo leer el RTC
INICIO:
I2Cin DPIN,CPIN,%11010000,0,[segu] ;leer los datos de mem. 0,
I2Cin DPIN,CPIN,%11010000,1,[minu] ;1,2,..y guardarlos en sus
I2Cin DPIN,CPIN,%11010000,2,[hora] ;respectivas variables
I2Cin DPIN,CPIN,%11010000,3,[diaS]
I2Cin DPIN,CPIN,%11010000,4,[diaF]
I2Cin DPIN,CPIN,%11010000,5,[mes]
I2Cin DPIN,CPIN,%11010000,6,[anio]
Print $fe,1, HEX2 hora,":", HEX2 minu,":", HEX2 segu,
Print $fe,$c0 ;saltar a la 2da línea del LCD
;mostrar día de la semana
If diaS=$1 Then Print "Dom."
If diaS=$2 Then Print "Lun."
If diaS=$3 Then Print "Mar."
If diaS=$4 Then Print "Mie."
If diaS=$5 Then Print "Jue."
If diaS=$6 Then Print "Vie."
If diaS=$7 Then Print "Sab."
Print $fe,$c5, HEX2 diaF,"/" ;mostrar el día del mes /
Print $fe,$cB,"/20", HEX2 anio ; mostrar año /20 + 04
Print $fe,$c8 ;pasar a la casilla 8
If mes=$1 Then Print "ene" ;mostrar el mes
If mes=$2 Then Print "feb"
If mes=$3 Then Print "mar"
If mes=$4 Then Print "abr"
If mes=$5 Then Print "may"
If mes=$6 Then Print "jun"
If mes=$7 Then Print "jul"
If mes=$8 Then Print "ago"
If mes=$9 Then Print "sep"
If mes=$10 Then Print "oct"
If mes=$11 Then Print "nov"
If mes=$12 Then Print "dic"
DelayMS 500
GoTo INICIO
; ************************ subrutina grabar *********************
grabarRTC:
I2Cout DPIN,CPIN,%11010000,0,[$00] ;setear 00 segundos
DelayMS 10 ;retardo para finalizar grabación
I2cout DPIN,CPIN,%11010000,1,[$30] ;setear 30 minutos
DelayMS 10
I2Cout DPIN,CPIN,%11010000,2,[$22] ;setear las 13 horas
DelayMS 10
I2Cout DPIN,CPIN,%11010000,3,[$3] ;setear día lunes, D=1,L=2
DelayMS 10 ;M=3, M=4, J=5, V=6, S=7
I2Cout DPIN,CPIN,%11010000,4,[$12] ;setear día 27 del mes
DelayMS 10
I2Cout DPIN,CPIN,%11010000,5,[$6] ;setear mes septiembre
DelayMS 10
I2Cout DPIN,CPIN,%11010000,6,[$12] ;setear año 04
DelayMS 10
I2Cout DPIN,CPIN,%11010000,7,[$10] ;control %00010000 para
DelayMS 10 ;encender el led cada 1 seg.
EWrite 0,[1] ;escribe en la memoria 0 el valor de 1 para que no
;se vuelva a grabar otra vez estos datos en el RTC
GoTo INICIO ;ir a presentar los datos en el LCD
Última edición: