Robotica - PROBLEMA CON EL DS1307

 
Vista:
sin imagen de perfil

PROBLEMA CON EL DS1307

Publicado por OMAR (1 intervención) el 15/04/2016 04:05:45
Hola a todos.

Me encuentro programando en PBP un reloj digital con un PIC 16F877A y un integrado DS1307. Al correr el circuito en el simulador PROTEUS, en los primeros segundos en la pantalla LCD aparece funcionando todo perfectamente, mostarndo la hora, minutos, segundos, dia, fecha, mes y año, pero posteriormente muestra ceros y otros caracteres sin sentido.

Entonces, les agradeceria me indicaran cual es el error que estoy cometiendo, y como solucionarlo, ya que a pesar de haberle dado muchas vueltas no logro detectar el problema.

El programa es el siguiente:

'RELOJ

@ device xt_osc ; oscilador externo XT
define osc 20 ; especifica que se va a utilizar uno de 4 Mhz




' Configuración de Puertos:

TRISD = %00000000
TRISB = %11111000

TRISA = %010000
TRISE = %000
TRISC = %11111111

' DEFINICION CONEXION LCD
DEFINE LCD_DREG PORTD ' Indica que el Bus estará conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus será de cuatro bits.
DEFINE LCD_DBIT 4 ' Selección del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estará en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estará conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estará en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estará conectado en RD3
DEFINE LCD_LINES 4 ' Define el número de líneas de la pantalla

DEFINE I2C_SLOW 1

DEFINE I2C_SCLOUT 1 ;para que no necesite resistencia pull-up en SCL

'DEFINICION VARIABLES

CPIN VAR Portb.7 ;pin señal de reloj I2C
DPIN VAR Portb.6 ;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

SEM VAR BYTE 'SELECCION DE SEMANA PARA PROGRAMACION

HORAAPAGA1 VAR BYTE 'SELECCION DE HORA DE APAGADO 1

MINAPAGA1 VAR BYTE 'SELECCION DE MINUTO DE APAGADO 1

REPITACICLO VAR BYTE 'VARIABLE PARA REPETIR PANTALLAS DE PROGRAMACION


INICIO:

I2CREAD DPIN,CPIN,%11010000,0,[segu] ;leer los datos de mem. 0,
I2CREAD DPIN,CPIN,%11010000,1,[minu] ;1,2,..y guardarlos en sus
I2CREAD DPIN,CPIN,%11010000,2,[hora] ;respectivas variables
I2CREAD DPIN,CPIN,%11010000,3,[diaS]
I2CREAD DPIN,CPIN,%11010000,4,[diaF]
I2CREAD DPIN,CPIN,%11010000,5,[mes]
I2CREAD DPIN,CPIN,%11010000,6,[anio]


lcdout $fe,1," ",hex2 hora,":",hex2 minu,":",hex2 segu ;mostrar la hora
; min y segs. en 2 dígitos (HEX2)
LCDOUT $fe,$c0 ;saltar a la 2da línea del LCD
;mostrar día de la semana



IF diaS=$1 THEN LCDOUT "Dom."
IF diaS=$2 THEN LCDOUT "Lun."
IF diaS=$3 THEN LCDOUT "Mar."
IF diaS=$4 THEN LCDOUT "Mie."
IF diaS=$5 THEN LCDOUT "Jue."
IF diaS=$6 THEN LCDOUT "Vie."
IF diaS=$7 THEN LCDOUT "Sab."
LCDOUT $fe,$c5, HEX2 diaF,"/" ;mostrar el día del mes /
LCDOUT $fe,$cB,"/20", HEX2 anio ; mostrar año /20 + 04
LCDOUT $fe,$c8 ;pasar a la casilla 8
IF mes=$1 THEN LCDOUT "ene" ;mostrar el mes
IF mes=$2 THEN LCDOUT "feb"
IF mes=$3 THEN LCDOUT "mar"
IF mes=$4 THEN LCDOUT "abr"
IF mes=$5 THEN LCDOUT "may"
IF mes=$6 THEN LCDOUT "jun"
IF mes=$7 THEN LCDOUT "jul"
IF mes=$8 THEN LCDOUT "ago"
IF mes=$9 THEN LCDOUT "sep"
IF mes=$10 THEN LCDOUT "oct"
IF mes=$11 THEN LCDOUT "nov"
IF mes=$12 THEN LCDOUT "dic"


PAUSE 500 ;esperar 0,5 segundos

GOTO inicio ;volver a leer los datos


END

Y el circuito lo anexo como adjunto.

Gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder