• Miércoles 8 de Mayo de 2024, 01:01

Autor Tema:  Ds1307  (Leído 5718 veces)

eltyto

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Ds1307
« en: Lunes 27 de Agosto de 2007, 14:15 »
0
Hola! es mi primer contacto con SOLOCODIGO y como veo el nivel es buenisimo, les cuento que estoy intentando hacer funcionar un RTC ds1307 y al leerlo me devuelve solo "ceros". lo leo en el hiperterminal pero no funciona. se que arranca porque en la dir. 07 que es la de control me reconoce el comando para generar un pulso por segundo. aca les mando mi preog en ensamblador para que me cuenten si le falle en algo y si alguien sabe si el "C" de buider es el mismo que se utiliza para programar PIC. desde ya mil gracias.
;==========================================
;ojo! ya se que tiene un tx y rx el 628 pero yo lo hice ;tambien para q trabaje en un f84
 LIST P=16f628
;lee rtc y transmite por txbuf
;  sdata puerto b,3
;  sclk    puerto b,4
;==========================================
indef   EQU     00h
tmr0   EQU     01h
pcl   EQU     02h
status   EQU     03h
fsr   EQU     04h
ptoa   EQU     05h
ptob   EQU     06h
pclath   EQU     0Ah
intcon   EQU     0Bh
pir1   EQU     0Ch
tmr1l   EQU     0Eh
tmr1h   EQU     0Fh
t1con   EQU     10h
tmr2   EQU     11h
t2con   EQU     12h
ccpr1l   EQU     15h
ccpr1h   EQU     16h
ccp1con   EQU     17h
rcsta   EQU     18h
txreg   EQU     19h
rcreg   EQU     1Ah
cmcom   EQU     1Fh

opcion   EQU     81h
trisa   EQU     85h
trisb   EQU     86h
pie1   EQU     8Ch
pcon   EQU     8Eh
pr2   EQU     92h
txsta   EQU     98h
spbrg   EQU     99h
dato   EQU     9Ah
direccion   EQU     9Bh
eecon1   EQU     9Ch
eecon2   EQU     9Dh
vrcon   EQU     9Fh



rxbuff   equ     21h
txbuf   equ    22h
addr   equ    23h
datao   equ    24h
slave   equ    0xd0

count   equ    26h
eeprom   equ    27h

di      equ 7
do      equ 6
sdata      equ 3
sclk      equ 4

j2          equ 7
j1      equ 6
led      equ 2
clear      equ 1
mande      equ 0
clk      equ 0
cs      equ 2
in      equ 1
start      equ 3
recep      equ    28h
r19      equ    29h
r1a      equ    2ah
trans      equ   2bh
loops      equ   2ch
loops2      equ   2dh
Segundo      equ   2eh
Hora      equ   2fh
Minuto      equ   30h
DiaSemana   equ   31h
Dia      equ   32h
Mes      equ   33h
Año      equ   34h
unidad      equ   35h
decena      equ   36h
centena      equ   37h
r199      equ   38h


valor1   equ   .8
valor2   equ   .104
valor3   equ   .119
reg1   equ   39h
reg2   equ   3ah
reg3   equ   3bh
mkm1   equ   3ch
mkm2   equ   3dh
mkm3   equ   3eh

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reset
   org      0
   goto   inicio
   org   5

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
retardo
   clrw
   movlw   valor1
   movwf   reg1
tre3
   movlw   valor2
   movwf   reg2
do2   
   movlw   valor3
   movwf   reg3
un1
   decfsz   reg3,1
   goto   un1
   decfsz   reg2,1
   goto   do2   
   decfsz   reg1,1
   goto   tre3   
   return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;RETARDO;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay1
   movlw   .166    ;es 166
    movwf   r19
redo   
   nop
   nop
   decfsz   r19
   goto   redo
   retlw   0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ms47   movlw   .7    
    movwf   r199
red   
   nop
   nop
   decfsz   r199
   goto   red
   retlw   0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

bstart
   bsf      status,5
   movlw      b'00000001'
   movwf      trisb
   bcf      status,5

   
   bsf      ptob,sdata
   bsf      ptob,sclk
   nop
   nop
   nop   
   nop
   bcf      ptob,sdata
   call   ms47
   return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bstop
   bsf      status,5
   movlw      b'00000001'
   movwf      trisb
   bcf      status,5
   bcf      ptob,sclk
   bcf      ptob,sdata
   bsf      ptob,sclk
   nop
   nop
   nop
   nop
   bsf      ptob,sdata
   call   ms47
   return

;;;;;;;ENVIA 1 BYTE COMP HACIA  EL RTC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
escrib   movwf      txbuf
   movlw      .8
   movwf      count
txlp   
   bcf      ptob,sclk
   rlf      txbuf,1
   bcf      ptob,sdata
   btfsc      status,0
   bsf      ptob,sdata
   call   ms47
   bsf      ptob,sclk
   nop
   nop
   nop
   nop
   decfsz      count,1
   goto      txlp
;chequeo bit---ack--------------------------------------------------------------
   bcf      ptob,sclk
   bsf      ptob,sdata
   call   ms47
   bsf      ptob,sclk
   nop
   nop
   nop
   nop
   bsf      status,5
   movlw      b'00001001'
   movwf      trisb
   bcf      status,5
arr   btfsc      ptob,sdata
   goto      arr
   bsf      status,5
   movlw      b'00000001'
   movwf      trisb
   bcf      status,5
   bcf      ptob,sclk   
   return   
   
   
   
   
;;;;;;;RECIBE 1 BYTE COMP DESDE EL RTC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;
leer
   bsf      status,5
   movlw      b'00001001'
   movwf      trisb
   bcf      status,5
   clrf      rxbuff
   movlw      .9
   movwf      count

rxlp   bcf      ptob,sclk
   call   ms47
   bsf      ptob,sclk
   nop
   nop
   nop
   nop
   bcf      status,0
   bsf      status,5
   movlw      b'00001001'
   movwf      trisb
   bcf      status,5
   btfsc      ptob,sdata
   bsf      status,0
   rlf      rxbuff,1
   bsf      status,5
   movlw      b'00000001'
   movwf      trisb
   bcf      status,5
   decfsz      count,1
   goto      rxlp
   bsf      status,5
   movlw      b'00000001'
   movwf      trisb
   bcf      status,5
   retlw      0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
inicio   clrf   ptoa
   bsf   status,5
   bcf   status,6
   movlw   b'00000001'
   movwf   trisb
   movlw   b'10000'
   movwf   trisa


   movlw   b'10000111'   ;desab res y /256
   movwf   opcion

;   movlw   b'00100110'    ;parametros de comunicacion,,1 maestro,0 8bit,1 hab trans,0 asinc,0 x, 1hy speed,buff vacio
;   movwf   txsta ;

;   movlw   .103       ;9600 baudios
;   movwf   spbrg

;   movlw   b'00100000'   ; hab permiso de escrit
;   movwf   pie1

;   movlw   b'00000000'
;   movwf   vrcon

   bcf   status,5
   movlw   b'10010000'
   movwf   intcon
   
;   movlw   b'00000000'
;   movwf   rcsta
;   bsf   rcsta,7 ;spen¡1 hab pto serie

;   movlw   b'00000000'
;   movwf   pir1
   
   movlw   b'00000111'
   movwf   cmcom


;   bsf   pir1,4 ;activo bandera de TRANSM.
;   call   ms47

;   goto   carga_inicial


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   call   carga_inicial
;   call   escribir

;--------------------------------------------------------------------------------------;
;--------------------SUBRUTINA DE CARGA INICIAL DEL DISPOSITIVO------------------------;
carga_inicial              call   bstart
            movlw   b'11010000'      ; Dirección esclavo DS1307 (Escritura)
            call   escrib      
   
            movlw   b'00000111'      ; Se indica que se va a enviar el dato a la posicion 07h.
            call   escrib      ; que corresponde al control de la señal cuadrada
            movlw   b'00010000'      ; Se mueve b'00010000' que corresponde a señal cuadrada de 1 Hz
            call   escrib
            call   bstop   ; Termina de enviar datos.



   movlw   0x01         ; Segundos inician en 00
   movwf   Segundo         ;
   movlw   0x02         ; Minutos inician en 05
   movwf   Minuto         ;
   clrf   Hora         ; Hora inicia en 00
   movlw   0x03         ; Dia 6 equivale a jueves
   movwf    DiaSemana
   movlw   0x20         ; Dia 26
   movwf    Dia
   movlw   0x08         ; Mes 02 equivale a agost
   movwf    Mes
   movlw   0x07         ; Año 2007
   movwf   Año
   


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------SUBRUTINA DE ESCRITURA DEL DISPOSITIVO----------------------------;
escribir   
      call   bstart      ; Envía condicion de Inicio
      movlw   b'11010000'      ; Dirección de DS1307 (Escritura)
      call   escrib
      movlw   0x00         ; a los segundos.
      call   escrib
      movf   Segundo,W   ; Pasa los segundos de la memoria del PIC16F84A al  DS1307.
      call   escrib   
   

   
      movf   Minuto,W      ; Y se repite el proceso para el resto.
      call   escrib
      movf   Hora,W
      call   escrib
      movf   DiaSemana,W
      call   escrib
      movf   Dia,W
      call   escrib
      movf   Mes,W
      call   escrib
      movf   Año,W
      call   escrib
      call   bstop   ; Termina de enviar datos.
      call   retardo
            
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ACA PONGO UN LED EN PTOB,7 PARA SABER SI CORRE EL PROGRAMA

leo_rtc      bsf   ptob,7
      call   retardo   
      call   bstart      ; Envía condicion de Inicio
      movlw   b'11010000'      ; Dirección de DS1307  (Escritura)
      call   escrib      
      movlw   0x00         ; a los segundos.
      call   escrib
      call   bstop

      call   bstart         ; Envía condicion de Inicio
      movlw   b'11010001'         ; Dirección de DS1307  (Lectura)
      call   escrib         
      call   leer         ; Lee los segundos.
      movf   rxbuff,w      ; Lo carga en el registro correspondiente.
      movwf   Segundo      ; Lee el resto de los registros utilizando


               ; el mismo procedimiento.
      call   leer
      movf   rxbuff,w
      movwf   Minuto

      call   leer
      movf   rxbuff,w
      movwf   Hora

      call   leer
      movf   rxbuff,w
      movwf   DiaSemana

      call   leer
      movf   rxbuff,w
      movwf   Dia

      call   leer
      movf   rxbuff,w
      movwf   Mes


      call   leer
      movf   rxbuff,w
      movwf   Año
      call   bstop   ; Termina de leer datos.

   movlw   .76   ;l
   call   transmito
   movlw   .69   ;e
   call   transmito
   movlw   .79     ;o
   call   transmito
   movlw   .32
   call   transmito
   

   movlw   .32
   call   transmito
   movlw   .13
   call   transmito
   movlw   .10
   call   transmito

   
      call   retardo
      call   retardo
      bcf   ptob,7

      movf   DiaSemana,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      call   retardo
      
            

      
      movf   Dia,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      call   retardo

      movf   Mes,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      call   retardo

      
      movf   Año,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      call   retardo

      movf   Hora,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      call   retardo

      movf   Minuto,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      call   retardo
   
   
xxsal      movf   Segundo,w
      movwf   mkm1
      call   decimal
      addlw   .48
      call   transmito
      goto   leo_rtc
            
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RUTINA QUE CONVIERTE BINARIO EN "BCD"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
decimal
   clrf   mkm2
   clrf   mkm3

   movlw   .100
otra   subwf   mkm1,1    ;resta 100 al valor inicial
   btfss   status,0    ;verifica el carry
   goto   sum         ;si es cero deja de restar 100
   incf   mkm3,1       ;si es 1 incr centena
   goto   otra        ;volver a restar
sum   addwf   mkm1,1       ;sumarle 100
   movlw   .10
repite   subwf   mkm1,1      ;restar 10 al valor
   btfss   status,0    ;verifica el carry
   goto   sum1       ;si es cero deja de restar
   incf   mkm2,1      ;si es 1 incr decena
   goto   repite
sum1   addwf   mkm1,1      ;sumarle 10 al valor
   retlw   0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;         
;--------------------------------------------------------------------------------------;
;;;;;;RUTINA PARA ENVIAR DATOS VIA RS232;;;;;;;;;;;;;;;;;;;;;;;;;
;;LA PC RECIBE A 1200 BAUDIOS 8 BITS 1 ARRANQUE Y 1 STOP;;;;;;;;;


transmito
      
   movwf   trans
   movlw   .8      
   movwf   r1a      ;contador de 8 bit a transmitir
   bcf   ptob,2
   call   delay1
xnext
   bcf   ptob,2
   bcf   status,0
   rrf   trans
   btfsc   status,0
   bsf   ptob,2
   call   delay1
   decfsz   r1a
   goto   xnext
   bsf   ptob,2
   call   delay1
   retlw   0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ESTA RUTINA LA USARIA CON EL PIC 16F628;;;;;;;;;;;
;------------------------------------------------------------------------------------------------------------------------------------------

;transmito   
;   movwf    txreg            ; send data in W
;   bsf    status,5       ; RAM PAGE 1
;   bcf   status,6
;espe   btfss    txsta,1       ; (1) transmission is complete if hi
;         goto    espe
;         bcf    status,5          ; RAM PAGE 0
;   bcf   status,6
;   bcf   pir1,4
;   call   retardo
;   bsf   intcon,7
;         retfie

;;;;;;;;;;;;;;;;;;;;;;;;
   end

titopereyra@yahoo.com

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Ds1307
« Respuesta #1 en: Lunes 27 de Agosto de 2007, 22:43 »
0
Bienvenido eltyto.. cuando me haga un lugar reviso tu código para ver que puede estar pasando.. respecto tu pregunta sobre el lenguaje C:

Citar
alguien sabe si el "C" de buider es el mismo que se utiliza para programar PIC.

No es el mismo C que el de builder, osea, la estructura y la manera de manejar las sentencias es propia del lenguaje pero no es lo mismo con ciertas funciones, para darte cuenta podrías mirar la funcion PRINTF o los ejemplos que puedes encontrar en el subforo de C.
El C que mantiene un similar al de Builder es el C de los microcontroladores Freescale, en este caso yo programo los micros y uso como guia el manual de Builder C++ 5.

Voy a ver si me doy tiempo y miro el código del RTC. Saludos :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Ds1307
« Respuesta #2 en: Viernes 31 de Agosto de 2007, 15:28 »
0
Saludos
Oyes se me hace dificultoso entender tu programa por que se ve rebuetos y es dificil estar buscando cada etiqueta de subrrutanas, hubiera sido preferible que lo comprimieras y adjuntaras.
Mira por ahi vi en tu programa que dice mandas en RS232, si lo que estas haciendo es transmitir datos serialmente creeme que jamas te va a funcionar tu programa, la forma de comunicacion es I2C que no es lo mismo que RS232, ya que el I2C utiliza un ACK, checa en google y podras encontrar mucha informacion sobre I2C
}

bye

eltyto

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Ds1307
« Respuesta #3 en: Sábado 1 de Septiembre de 2007, 00:20 »
0
gracias a Einstec y Alternative en responder de todos modos le cuento al segundo que en mi rutina LEO el ds1307 via I2C luego convierto bcd a decimal y por ultimo sumo decimal 48 para convertir en asci y enviarlo via rs232 al hiperterminal.
mi preg es si esta bien INICIADO Y si esta bien LEIDO ya que cuando lo veo en el hiperterminal es solo CEROS.
si graban el programa como esta lo pueden probar y veran que les digo la verdad no escondi nada del programa que diseñe para hacerlo andar pero no encuentro solucion.si alguno tiene una rutina para iniciar el ds1307 en MPLAB y leerlo POR FAVOR que me la tira o me digan donde ir a buscar info.
Desde ya mil gracias y sera hasta la proxima.

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Ds1307
« Respuesta #4 en: Sábado 1 de Septiembre de 2007, 01:45 »
0
Saludos
mira checa en el libro "Microcontrolador PIC16F84. Desarrollos de proyectos". ahi tiene informacin y un programa echo, hay que hacerle unas modificaciones para que funcione a la perfeccion pero te puede ayudar mucho. o busca en EMULE y descarga el CD donde tiene los ejemplos con el DS1307 y comunicacion I2C, el CD tiene el mismo nombre que el CD.

Bueno espero te sirva la informacion.
no te puedo mandar el libro que lo tengo en pdf
ya que es vastante grande, es de unos 40M


Saludos y suerte
bye :hola:

eltyto

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Ds1307
« Respuesta #5 en: Lunes 10 de Septiembre de 2007, 14:23 »
0
mil gracias x las respuestas a todos.
ALTERNATIVE  lo que no se como hacer para bajar el CD de emule entre y no se como es el path para llegar.
bueno sigo x aca y si alguien tiene algo que me ayude esta vez lo espero
 un abrazo a todos.
 tyto

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Ds1307
« Respuesta #6 en: Martes 11 de Septiembre de 2007, 05:04 »
0
SAludos eltyto
Mira veo que ya investigastes y ya tienes dolor de cabeza con el DS1307, Mira deja scaneo los capitulos del Libro que necesitas y ademas te mando el ejemplo que tiene el CD y el Libro. Mandame tu E-mail y te mando los archivos, sino tengo tiempo mañana, pasado mañana lo tienes sin falta.

Saludos y espero tu E-mail

eltyto

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Ds1307
« Respuesta #7 en: Martes 11 de Septiembre de 2007, 19:33 »
0
muchas gracias, ALTERNATIVE mi mail es titopereyra@yahoo.com si no puedes enviarme dime solo el camino (path) para llegar al lugar de la info.
te cuento que es solo un desafio el hecho de trabajar con f84 ya que con el 873 es mucho mas directo y facil. Te pregunto.. es posible programar con visual o C los micros de la linea nueva de Microchip? en caso de C creo que es el CCs pero no se de donde se baja el programa FREE. desde ya mil gracias y estoy a tus ordenes.
             tyto

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Ds1307
« Respuesta #8 en: Miércoles 12 de Septiembre de 2007, 06:23 »
0
Mira para encontrar la informacion
Descarga Emule de internet
Instalalo y configuralo segun tu conexion a internet que tengas
coloca "Microcontrolador PIC16F84. Desarrollos de proyectos"
sin comillas y encontraras la informacion
el Libro esta en pdf y son como 40Megas
y el CD no recuerdo pero debe ser como 120Megas


Se puede programar en C todos los micros de la Gamma
alta 18FXXX, entra a la pagina de microchip y
descarga la version estudiantil :hola:

moy6388

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Ds1307
« Respuesta #9 en: Domingo 7 de Octubre de 2007, 21:35 »
0
Saludos Alternative
Estoy comensando con los pics y tengo unas copias del libro de RA-MA
 te  es posible enviarme algunos de los ejercicios del CD , como losm de DS1307,DS1624,LCD y alguno que otros . mi correo es moy2511@yahoo.com.mx
de antemano te agradesco mucho .