TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Voladote en 12 de Octubre de 2004, 10:39:00
-
Hola, amigos necesito de su ayuda.
Tengo un problema con la comunicacion entre el DS1302 y el 16F876, solo puedo leer un monton de 0 en pantalla, al principio pense que era el DS1302, pero consegui un programa que funcionaba con el 16F84 y funciona de maravilla. Lleve este programa al 16F876 y sigue el problema.
He probado de todo, cambio de puertos, delays, y todo concuerda con el manual del RTC, tambien pense que era algun falso contacto pero lo pruebo en mismo sitio con el 16F84 y funciona.
Si alguno de ustedes sabe donde puedo conseguir un programa en ensamblador para el 16F876 y el DS1302, o si alguno de ustedes lo tiene, les rogaria hacermelo saber puesto que necesito de forma urgente
hacer esta comunicacion.
Saludos y muchas gracias
-
hola Voladote,
asi como lo decis es dificil diagnosticar algo. habria que ver el programa pero te digo que si al programa que tenes para el f84 lo pasas directamente al 16f876 es natural que tengas problemas sobre todo con los registros. acordate que en el 16f84 podes crear tus propios registros en la memoria de datos a partir de la direccion 0x0c. para el caso del f876 se trata de un registro mas grande qeu tendrias qeu fijarte en la hoja de datos a partir de qeu direccion podes crear tus registros para no pisar los del propio micro.
por ahora es lo unico que te puedo decir con lo que nos contas...
-
Tengo que comenzar a trabajar con un PIC16F877 y un DS1302.
Me podrian ayudar con este tema. El conexionado, por ejemplo.
Saludos.
-
hola gabotronic !
yo tambien tengo que trabajar con un microcontrolador que se conecte a un DS1302 y ademas a una memoria EEPROM 24CXX.
todabia no lo hice pero te paso la informacion qeu tengo yo, si vos lo probas antes me contas como te fue.....
lo que tengo es el programa en assembler para conectar un pic16f84 con el ds1302 y poder leer y escribir en el. vos adaptalo para tu micro, es lo mismo...
el conexionado del ds1302 podria ser asi..
Pin 1: Masa.
Pin 2: Cristal.
Pin 3: Cristal.
Pin 4: Masa.
Pin 5: Pin RB7 del PIC (RESET).
Pin 6: Pin RB6 del PIC (IO).
Pin 7: Pin RB5 del PIC (SCLK).
Pin 8: 5 V.
y el soft te lo escribo a continuacion (no lo adjunto porque me dice que no hay espacio suficiente para hacerlo) espero qeu te sirva...!![Giño Giño]()
;****************************************************
; DS1302.ASM
;****************************************************
LIST P = 16F84
#INCLUDE "P16F84.INC"
TITLE "DS1302.ASM
;******************** DEFINE REGISTROS
W EQU 0
Z EQU 2
PC EQU 02H
STATUS EQU 03H
SEG EQU 10H
MIN EQU 11H
HOR EQU 12H
DIA EQU 13H
MES EQU 14H
AÑO EQU 15H
DIS EQU 16H
NUME EQU 17H
OCHO EQU 18H
DEL1 EQU 19H
TEMP EQU 1AH
DATO EQU 1BH
TREMP EQU 1CH
RARO EQU 1DH
ORG 00H
GOTO START
;-------------- SALE DATA DIR -------------------------
FUERA NOP
S77 BCF PORTA,3
RRF NUME,1
BTFSS STATUS,C ; 0
GOTO S44 ; FUE CERO 1
BSF PORTA,2 ; FUE UNO 1
GOTO S55
S44 BCF PORTA,2 ; DELAY ENTRE BITS 3
S55 BSF PORTA,3
DECFSZ OCHO,1
GOTO S77
RETLW 00
RAMIN MOVLW 8E
MOVWF NUME
MOVLW 00
MOVWF DATO
CALL ESCRI
RETLW 00
;++++++++++++++++++++++++++++++++++++++++++++++
ESCRIBE MOVLW 8E ;rutina de escritura
MOVWF NUME
MOVLW 00
MOVWF DATO
CALL ESCRI
MOVLW 80
MOVWF NUME
MOVLW 80
MOVWF DATO
CALL ESCRI
MOVLW 80
MOVWF NUME
MOVF SEG,W
MOVWF DATO
CALL ESCRI
MOVLW 82
MOVWF NUME
MOVF MIN,W
MOVWF DATO
CALL ESCRI
MOVLW 84
MOVWF NUME
MOVF HOR,W
MOVWF DATO
CALL ESCRI
MOVLW 86
MOVWF NUME
MOVF DIA,W
MOVWF DATO
CALL ESCRI
MOVLW 88
MOVWF NUME
MOVF MES,W
MOVWF DATO
CALL ESCRI
MOVLW 8C
MOVWF NUME
MOVF AÑO,W
MOVWF DATO
CALL ESCRI
MOVLW 8A
MOVWF NUME
MOVF DIS,W
MOVWF DATO
CALL ESCRI
MOVLW 090
MOVWF NUME
MOVLW 0A5
MOVWF DATO
CALL ESCRI
MOVLW 8E
MOVWF NUME
MOVLW 80
MOVWF DATO
CALL ESCRI
RETLW 00
;********** DELAY ENTRE BITS *****************
DEBIT MOVLW 12 ; PARA 9600 BAUDIOS / XTAL DE 4 MEGA HZ.
MOVWF DEL1
X02 CLRWDT
NOP
DECFSZ DEL1,1
GOTO X02
RETLW 00H
;***************************************************
SEOUT MOVWF TREMP ;rutina para salida serial
SWAPF TREMP,1 ; a pc para probar
MOVF TREMP,W
ANDLW 0F
ADDLW 30
MOVWF NUME
CALL SEOUTO
SWAPF TREMP,W
ANDLW 0F
ADDLW 30
MOVWF NUME
CALL SEOUTO
RETLW 00
SEOUTO BCF PORTA,0 ; START BITS
CALL DEBIT
MOVLW 08H ; SIETE BITS
MOVWF OCHO
NOP
S7 RRF NUME,1
BTFSS STATUS,C ; 0
GOTO S4 ; FUE CERO 1
BSF PORTA,0 ; FUE UNO 1
GOTO S5 ; 2
S4 BCF PORTA,0 ; 2
S5 CALL DEBIT ; DELAY ENTRE BITS 3
DECFSZ OCHO,1
GOTO S7
BSF PORTA,0 ; STOP BITS
; CALL DEBIT
CALL DEBIT
RETLW 00H
;=============================================
;caracteres en el string
ASTE MOVLW 2A ; asterisco
MOVWF NUME
CALL SEOUTO
RETLW 00
DOSP MOVLW 3A ; dos puntos
MOVWF NUME
CALL SEOUTO
RETLW 00
SLAT MOVLW 2F ;slat
MOVWF NUME
CALL SEOUTO
RETLW 00
ESPA MOVLW 20 ; espacio
MOVWF NUME
CALL SEOUTO
RETLW 00
;(((((((((( ESCRIBE EN RTC )))))))))))))))
ESCRI BSF PORTA,1
BCF PORTA,1
BSF PORTA,2
BSF PORTA,1
MOVLW 08H ; SIETE BITS
MOVWF OCHO
CALL FUERA
MOVLW 08
MOVWF OCHO
MOVF DATO,W
MOVWF NUME
CALL FUERA
BCF PORTA,1
BCF PORTA,3
BSF PORTA,2
BCF PORTA,2
BSF PORTA,2
RETLW 00H
;((((((( LEE EL DATO DEL RTC ))))))))))
LEE BSF PORTA,1
BCF PORTA,1
BCF PORTA,3
BSF PORTA,2
BSF PORTA,1
STBIT MOVLW 08H ; SIETE BITS
MOVWF OCHO
CALL FUERA
BSF STATUS,5
MOVLW 04 ;2 SALIDA
MOVWF PORTA
BCF STATUS,5
CLRWDT
MOVLW 8
MOVWF OCHO
CLRF NUME ; PARTE CON BYTE EN CERO
S3 BCF PORTA,3
BTFSS PORTA,2 ; LEE DATA SERIAL
GOTO S0
BSF STATUS,C ; 0
GOTO S1 ; FUE CERO 1
S0 BCF STATUS,C ; FUE UNO 1
S1 RRF NUME,1
BSF PORTA,3
DECFSZ OCHO,1
GOTO S3
BSF STATUS,5
MOVLW 00 ;TODAS SALIDAS
MOVWF PORTA
BCF STATUS,5
BCF PORTA,1
BCF PORTA,3
BCF PORTA,2
BSF PORTA,2
RETLW 00H
;************ PARTIDA *************************************************
START BSF STATUS,5
MOVLW 80 ;B7 IN RS232
MOVWF PORTB
MOVLW 00 ;TODAS SALIDAS
MOVWF PORTA
BCF STATUS,5
BCF PORTA,1
BCF PORTA,3
BTFSS PORTB,7
GOTO ESTARYU
MOVLW 00
MOVWF SEG
; DATOS A ESCRIBIR EN EL RTC
;26/04/01 17:35 DIA DE LA SEMANA 04
MOVLW 35
MOVWF MIN
MOVLW 17
MOVWF HOR
MOVLW 26
MOVWF DIA
MOVLW 04
MOVWF MES
MOVLW 01
MOVWF AÑO
MOVLW 04
MOVWF DIS
CALL ESCRIBE
;SI CONECTAS EL PIN RA0 AL UN MAX 232 O UN TR-557
;Y ESTE A UN PC A 9600,8,N
;PUEDES VER LA HORA GUARDADA Y AVANZANDO
ESTARYU MOVLW 7
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL SLAT
CALL RAMIN
MOVLW 0C0
MOVWF NUME
MOVLW 3A
MOVWF DATO
CALL ESCRI
MOVLW 0C2
MOVWF NUME
MOVLW 3C
MOVWF DATO
CALL ESCRI
MOVLW 9
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL SLAT
MOVLW 0D
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL SLAT
CALL ESPA
MOVLW 5
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL DOSP
MOVLW 3
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL DOSP
MOVLW 1
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL ESPA
MOVLW 0C1
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
CALL ESPA
MOVLW 0C3
MOVWF NUME
CALL LEE
MOVF NUME,W
CALL SEOUT
MOVLW 0D
MOVWF NUME
CALL SEOUTO
GOTO START
;****************************************************
END
-
Que hay amigos?
Gracias por su ayuda, al principio tuve problemas con la direccion de memoria, pero aun asi me seguia botando ceros.
En realidad tenia problemas con los tiempos y ya funciono de maravilla. El codigo no lo tengo ahora y tampoco lo puedo publicar aqui porque es muy extenso, si necesitan este codigo haganme llegar su direccion de correo y con gusto se los hago llegar.
Una cosa mas, alguno de ustedes ha trabajado con smart cards?, necesito ayuda con el chip sle 4442, aun no logro hacerla funcionar con el 16F876.
Bueno amigos gracias por su ayuda, y si necesitan de mi escribanme a fjhanna@hotmail.com
Adios
-
Yo grabé una SLE 442, desde un PIC y en C.
Para más información sobre smart cards arriba tienes el botón "buscar", púlsalo y pón smart cards como frase de búsqueda (también "buscar en toda la Comunidad"![Giño Giño]()
Un saludo