Autor Tema: DS1307 con I2C y PIC16F887  (Leído 2530 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
DS1307 con I2C y PIC16F887
« en: 30 de Septiembre de 2013, 17:06:56 »
Buenas Tardes.

saludos desde Venezuela, tengo una duda con respecto al manejo del Modulo I2C del micro-controlador 16F887

estoy usando el código que describiré a continuación y el mismo me funciona correctamente con el PIC16F877 pero al tratar de utilizarlo con el PIC16F887 me el proteus me genera el siguiente error.

Citar
Spurious SCL Tranition detected

Tengo las Resistencias a Pull-UP de 4k7 para el SCL y SDA y como les dije para el 877 me funciona correctamente y para el 887 no...

Les dejo el código para que por favor me ayuden con este inconveniente espero su respuesta, gracias.

Código: [Seleccionar]

INCLUDE <P16F887.INC>
LIST P=16F887

__CONFIG  _CONFIG1, _LVP_OFF&_MCLRE_ON&_PWRTE_ON&_WDT_OFF&_INTOSCIO&_BOR_OFF&_FCMEN_OFF
__CONFIG  _CONFIG2, _WRT_OFF

;////////////////////////////////////////////////////////////////////////////////////////////////////
;//////////////////////////////////////// V A R I A B L E S /////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////

CBLOCK 0x20
AUX
UNIDAD
DECENA
CENTENA
NUM

SEG
MIN
HOR
DIA
FECHA
MES
ANO
ENDC

#DEFINE EN1 PORTB,3
#DEFINE RS PORTB,2
#DEFINE EN2 PORTC,5

#DEFINE DIR_R 0xD0
#DEFINE DIREC 0X07

;////////////////////////////////////////////////////////////////////////////////////////////////////
;////////////////////////////////// V E C T O R  D E  I N I C I O ///////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////

ORG 0x00
CALL CONF
CALL CONF_I2C
GOTO INICIO

;////////////////////////////////////////////////////////////////////////////////////////////////////
;/////////////////////////////// P R O G R A M A   P R I N C I P A L ////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////

INICIO
CALL READTIME
GOTO $




READTIME

CALL STARTBIT

MOVLW DIR_R
CALL WRITEI2C

MOVLW 0x00
CALL WRITEI2C

CALL STOPBIT

CALL STARTBIT

MOVLW 0xD1
CALL WRITEI2C

;///// RECIBO SEGUNCO /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF SEG

;///// RECIBO MINUTO /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF MIN

;///// RECIBO HORA /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF HOR

;///// RECIBO FECHA /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF FECHA

;///// RECIBO DIA /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF DIA

;///// RECIBO MES /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF MES

;///// RECIBO ANO /////

CALL BANCO1
BTFSC SSPSTAT,2
GOTO $-1

BSF SSPCON2,RCEN
CALL WAITMSSP

CALL BANCO0

BCF PIR1,SSPIF
CALL ACKBIT

MOVF SSPBUF,W
MOVWF ANO

CALL STOPBIT

;////////////////////

RETURN

;////////////////////////////////////////////////////////////////////////////////////////////////////
;//////////////////////////////// V E C T O R  C O N F I G U R A C I O N ////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////

CONF
CALL BANCO1
CLRF TRISA
CLRF TRISB
MOVLW B'00011000'
MOVWF TRISC
CLRF TRISD
CLRF TRISE
CALL BANCO0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
RETURN

CONF_I2C
MOVLW B'00101000'
MOVWF SSPCON
CALL BANCO1
MOVLW B'10000000'
MOVWF SSPSTAT
MOVLW .9
MOVWF SSPADD
CALL BANCO0

;CALL STARTBIT
;MOVF DIR_R,W
;CALL WRITEI2C
;MOVF DIREC,W
;CALL WRITEI2C
;MOVLW 0x90
;CALL WRITEI2C
;CALL STOPBIT
RETURN

;////////////////////////////////////////////////////////////////////////////////////////////////////
;//////////////////////////////// B A N C O S  D E  P R O G R A M A S ///////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////


BANCO0
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
BANCO1
BSF STATUS,RP0
BCF STATUS,RP1
RETURN
BANCO2
BCF STATUS,RP0
BSF STATUS,RP1
RETURN
BANCO3
BSF STATUS,RP0
BSF STATUS,RP1
RETURN

;////////////////////////////////////////////////////////////////////////////////////////////////////
;/////////////////////////////////////// R U T I N A S  I 2 C ///////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////

WRITEI2C
CALL BANCO0
MOVWF SSPBUF
CALL WAITMSSP
RETLW 0x00

STARTBIT
CALL BANCO1
BSF SSPCON2,SEN
CALL BANCO0
CALL WAITMSSP
RETLW 0x00

RESTARTBIT
CALL BANCO1
BSF SSPCON2,RSEN
CALL BANCO0
CALL WAITMSSP
RETLW 0x00

STOPBIT
CALL BANCO1
BSF SSPCON2,PEN
CALL BANCO0
CALL WAITMSSP
RETLW 0x00

ACKBIT
CALL BANCO1
BCF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
CALL BANCO0
CALL WAITMSSP
RETLW 0x00

NACKBIT
CALL BANCO1
BSF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
CALL BANCO0
CALL WAITMSSP
RETLW 0x00

WAITMSSP
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
RETLW 0


WRITETIME

CALL STARTBIT

MOVLW DIR_R
CALL WRITEI2C

MOVLW 0x00
CALL WRITEI2C

MOVLW .25
CALL BCD
SWAPF DECENA,W
MOVWF AUX
MOVF UNIDAD,W
IORWF AUX
MOVF AUX,W
CALL WRITEI2C



CALL STOPBIT

RETURN

;////////////////////////////////////////////////////////////////////////////////////////////////////
;///////////////////////////////////// R U T I N A S     B C D //////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////////////

BCD
CLRF CENTENA ; Carga los registros con el resultado inicial.
CLRF DECENA ; En principio (Centenas)=0 y (Decenas)=0.
MOVWF UNIDAD ; Se carga el número binario a convertir.
RES10
MOVLW .10 ; A las unidades se les va restando 10 en cada
SUBWF UNIDAD,W ; pasada. (W)=(Unidades)-10.
BTFSS STATUS,C ; ¿(C)=1?, ¿(W) positivo?, ¿(Unidades)>=10?.
GOTO BCD_FIN ; No, es menor de 10. Se acabó.
INC_DEC
MOVWF UNIDAD ; Recupera lo que queda por restar.
INCF DECENA,F ; Incrementa las decenas y comprueba si llega a
MOVLW .10 ; 10. Lo hace mediante una resta.
SUBWF DECENA,W ; (W)= (Decenas)-10.
BTFSS STATUS,C ;  ¿(C)=1?, ¿(W) positivo?, ¿(Decenas)>=10?.
GOTO RES10 ; No. Vuelve a dar otra pasada, restándole 10.
INC_CEN
CLRF DECENA ; Pone a cero las decenas
INCF CENTENA,F ; e incrementa las centenas.
GOTO RES10 ; Otra pasada, resta 10 al número a convertir.
BCD_FIN
SWAPF DECENA,W ; En el nibble alto de W también las decenas.
ADDWF UNIDAD,W ; Las unidades están en el nibble bajo de W.
RETURN



END
« Última modificación: 30 de Septiembre de 2013, 17:10:38 por Goodfrey »

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: DS1307 con I2C y PIC16F887
« Respuesta #1 en: 01 de Octubre de 2013, 12:34:59 »
Amigos por favor necesito una colaboración para resolver este inconveniente lo antes posible.

gracias.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: DS1307 con I2C y PIC16F887
« Respuesta #2 en: 01 de Octubre de 2013, 18:05:51 »
Amigos por favor necesito una colaboración para resolver este inconveniente lo antes posible.

gracias.

Amigos Ninguno Puede darme una mano con esto, de verdad necesito resolver este inconviente lo antes posible.

Gracias.