• Domingo 22 de Diciembre de 2024, 18:28

Autor Tema:  Ds1307  (Leído 1908 veces)

hailander

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Ds1307
« en: Domingo 26 de Agosto de 2007, 02:46 »
0
:hola:  Hola a todos, estoy trajando en un relog con ds1307 para visualizarlo en display de 4 segmentos, pero he tenido varios problemitas; al momento de visualizar solo me aparecen el numero 0 y el 5. Ademas lo he intentado simular en proteus pero me aparece lo mismo.

Alguien me podria dar idea de que esta pasando.

GRACIAS  :comp:  :comp:

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Ds1307
« Respuesta #1 en: Domingo 26 de Agosto de 2007, 23:03 »
0
Bueno, ayudaria mucho si colocaras el codigo que utilizas, por lo que cuentas es seguro que el problema esta en la rutina para escribir en los displays.. usas C o ASM¿?. Saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

hailander

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Ds1307
« Respuesta #2 en: Miércoles 29 de Agosto de 2007, 01:54 »
0
Bueno el programa lo estoy trabajando en ASM; aqui les va:

LIST   P=16F877
         INCLUDE   P16F877.INC



CBLOCK   H'F0'
SEGUNDO         
MINUTO         
HORA         
DIASEMANA      
DIA            
MES            
AÑO            
I2C_BANDERAS   
PDel0         
PDel1         
ENDC

            ORG      0x00
            GOTO   INICIO
            ORG      0x05
   
INICIO         CLRF   PORTB
            CLRF   PORTC
            CLRF   PORTA
            CLRF   PORTD
            CALL   BAN1
            MOVLW   b'00000110'   
            MOVWF   ADCON1
            CLRF   TRISB
            BSF      TRISB,0
            MOVLW   0xFF
            MOVWF   TRISC
            CLRF   TRISD
            MOVLW   0xCF
            MOVWF   OPTION_REG
            MOVLW   0x80
            MOVWF   SSPSTAT
            MOVLW   .9
            MOVWF   SSPADD
            CALL   BAN0

;CONFIGURACION DEL MODO MSSP EN MODO MAESTRO I2C

            MOVLW   0x28
            MOVWF   SSPCON
            CLRF   I2C_BANDERAS
            CALL   CARGA_INICIAL
            CALL   ESCRIBIR
            MOVLW   0x28
            MOVWF   SSPCON
            CALL   CONDICION_START
            MOVLW   b'11010000'
            CALL   ENVIAR_BYTE
            MOVLW   b'00000111'
            CALL   ENVIAR_BYTE
            MOVLW   b'00010000'
            CALL   ENVIAR_BYTE
            CALL   CONDICION_STOP

RTC_LEE         MOVLW   0x28
            MOVWF   SSPCON
            CALL   CONDICION_START
            MOVLW   0xD0
            CALL   ENVIAR_BYTE
            MOVLW   0x00
            CALL   ENVIAR_BYTE
            CALL   CONDICION_STOP
            
            CALL   CONDICION_START
            MOVLW   0xD1
            CALL   ENVIAR_BYTE
            CALL   LEER_BYTE
            MOVWF   SEGUNDO
            CALL   LEER_BYTE
            MOVWF   MINUTO
            CALL   LEER_BYTE
            MOVWF   HORA
            CALL   LEER_BYTE
            MOVWF   DIASEMANA
            CALL   LEER_BYTE
            MOVWF   DIA
            CALL   LEER_BYTE
            MOVWF   MES
            BSF      I2C_BANDERAS,0
            CALL   LEER_BYTE
            MOVWF   AÑO
            CALL   CONDICION_STOP
            BCF      I2C_BANDERAS,0
            

;VISUALIZACION

         CALL   RETARDO
         CALL    RETARDO
         MOVLW   H'01'      ;Activa transistor
         MOVWF   PORTA
         MOVF   MINUTO,F
         RLF      MINUTO,W
         MOVWF   PORTD
         CALL   RETARDO
         CALL    RETARDO
         
         MOVLW   H'02'      ;Activa transistor
         MOVWF   PORTA
         SWAPF   MINUTO,F
         RLF      MINUTO,W
         MOVWF   PORTD
         CALL   RETARDO
         CALL    RETARDO
         
         MOVLW   H'04'      ;Activa transistor
         MOVWF   PORTA
         MOVF   SEGUNDO,F
         RLF      SEGUNDO,W
         MOVWF   PORTD
         CALL   RETARDO
         CALL   RETARDO

         MOVLW   H'08'      ;Activa transistor
         MOVWF   PORTA
         SWAPF   SEGUNDO,F
         RLF      SEGUNDO,W
         MOVWF   PORTD
         CALL   RETARDO
         CALL    RETARDO
         GOTO   RTC_LEE


CONDICION_START   BCF      PIR1,SSPIF
            CALL   BAN1
            BSF      SSPCON2,SEN
            CALL   BAN0
TERMINO_START   BTFSS   PIR1,SSPIF
            GOTO   TERMINO_START
            RETURN

CONDICION_STOP   BCF      PIR1,SSPIF
            CALL   BAN1
            BSF      SSPCON2,PEN
            CALL   BAN0
TERMINO_STOP   BTFSS   PIR1,SSPIF
            GOTO   TERMINO_STOP
            RETURN
      
ENVIAR_BYTE      BCF      PIR1,SSPIF
            MOVWF   SSPBUF
ENVIAR_BYTE_ACK   BTFSS   PIR1,SSPIF
            GOTO   ENVIAR_BYTE_ACK
            RETURN

LEER_BYTE      BCF      PIR1,SSPIF
            CALL   BAN1
            BSF      SSPCON2,RCEN
            CALL   BAN0
LEER_W         BTFSS   PIR1,SSPIF
            GOTO   LEER_W
            BTFSC   I2C_BANDERAS,0
            GOTO   NO_ACK
ACK            BCF      PIR1,SSPIF
            CALL   BAN1
            BCF      SSPCON2,ACKDT
            BSF      SSPCON2,ACKEN
            CALL   BAN0
ACK_W         BTFSS   PIR1,SSPIF
            GOTO   ACK_W
            RETURN

NO_ACK         BCF      PIR1,SSPIF
            CALL   BAN1
            BSF      SSPCON2,ACKDT
            BSF      SSPCON2,ACKEN
            CALL   BAN0
NO_ACK_W      BTFSS    PIR1,SSPIF
            GOTO   NO_ACK_W
            MOVF   SSPBUF,W
            RETURN

CARGA_INICIAL   MOVLW   0x00
            MOVWF   SEGUNDO
            MOVLW   0x00
            MOVWF   MINUTO
            CLRF   HORA
            MOVLW   0x06
            MOVWF   DIASEMANA
            MOVLW   0x02
            MOVWF   DIA
            MOVLW   0x03
            MOVWF   MES
            MOVLW   0x07
            MOVWF   AÑO
            RETURN


ESCRIBIR      CALL   CONDICION_START
            MOVLW   0xD0
            CALL   ENVIAR_BYTE
            MOVLW   0x00
            CALL   ENVIAR_BYTE
            MOVF   SEGUNDO,W
            CALL   ENVIAR_BYTE
            MOVF   MINUTO,W
            CALL   ENVIAR_BYTE
            MOVF   HORA,W
            CALL   ENVIAR_BYTE
            MOVF   DIASEMANA,W
            CALL   ENVIAR_BYTE
            MOVF   DIA,W
            CALL   ENVIAR_BYTE
            MOVF   MES,W
            CALL   ENVIAR_BYTE
            MOVF    AÑO,W
            CALL   ENVIAR_BYTE
            CALL   CONDICION_STOP
            RETURN


BAN0         BCF      STATUS,RP0
            BCF      STATUS,RP1
            RETURN   
BAN1         BSF      STATUS,RP0
            BCF      STATUS,RP1
            RETURN   
BAN2         BCF      STATUS,RP0
            BSF      STATUS,RP1
            RETURN
BAN3         BSF      STATUS,RP0
            BSF      STATUS,RP1
            RETURN   
 
RETARDO   movlw     .7        ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .213      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto    PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return      
            END

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Ds1307
« Respuesta #3 en: Viernes 31 de Agosto de 2007, 15:22 »
0
Saludos.
Mira antes que nada se hace un poco dificil visualizar tu programa ya que me cuesta encontrar las etiquetas y se ve todo amontonado, hubiera sido preferible que lo hubieras comprimido y adjuntado, pero en fin.

Mira yo te recomendaria que lo hicieras en un LCD, y una vez que te funcione lo pases al Display.

Mira el DS1307 primero debes inicializarlo siempre, y posteriormente mandar a leer y posteriormente preguntar si ya ha sido activado (respaldo de pila), si ya ha sido activado entonces solo te dedicas a leer cuando exista una interrupcion externa del puso cuadrado del ds1307. sino ha sido activado y es la primera ves que lo vas a utilizar debes mandar a inicializar y cargarle fecha inicial.

checa en el DataSheet cual es el orden y su direccion y solo mandas en I2C.
Saludos

bye