SoloCodigo

Programación Específica => Microcontroladores => Mensaje iniciado por: borgo en Martes 20 de Septiembre de 2005, 15:03

Título: I2c
Publicado por: borgo en Martes 20 de Septiembre de 2005, 15:03
Hola Amigos

Tengo la siguiente consulta, en este código intento generar la condición de inicio en un bus I2C, notaran que subo un pin de control el bit 7 del puertoB  para bajarlo luego de que la secuencia se completó, pues ESO NUNCA SUCEDE y no se porqué no puedo generar la condición de inicio    :angry:
,---------------------------------------------------------------------------------------
Send_Start   bcf   PIR1,SSPIF
      bsf   STATUS,RP0   ;Seleciona página 1
      bsf   SSPCON2,SEN   ;Activa secuencia de inicio
      bsf   STATUS,RP0
      bsf PORTB,7   
Start_Wait   btfss   PIR1,SSPIF   ;Fin de secuencia de inicio ??
      goto   Start_Wait   ;No, esperar
      bcf   PORTB,7      
      return
;----------------------------------------------------------------------------------------
La configuración del bus la tengo así:

Inicio           clrf   PORTC      
      bsf   STATUS,RP0   ;Selecciona banco 1
      movlw   b'11111111'
      movwf   TRISC      ;RC3/SCL y RC4/SDA entradas (como salidas se comporta igual)
      movlw 0x00   
      movwf TRISB        ;puerto B como salida
      movlw   b'10000000'
      movwf   SSPSTAT      ;Velocidad estándar con niveles I2C
      movlw   .9
      movwf   SSPADD      ;Velocidad de 100KHz
      bcf   STATUS,RP0   ;Selecciona banco 0
      clrf PORTB
;Módulo MSSP en el modo Master I2C

      movlw   b'00101000'
      movwf   SSPCON      ;Módulo MSSP en On

                               etc etc
;-----------------------------------------------------------------------------------------

Si alguien tiene alguna sugerencia lo agradeceré porque realmente no se el motivo del NO FUNCIONAMIENTO.


   Gracias a todos por su tiempo.
Título: Re: I2c
Publicado por: © Jonathan © en Martes 20 de Septiembre de 2005, 16:12
Hola, intenta subir el bit 7 del puerto B antes de iniciar la secuencia, despues de terminada la bajas..

,---------------------------------------------------------------------------------------
bsf PORTB,7

Send_Start bcf PIR1,SSPIF
bsf STATUS,RP0 ;Seleciona página 1
bsf SSPCON2,SEN ;Activa secuencia de inicio
Start_Wait
btfss PIR1,SSPIF ;Fin de secuencia de inicio ??
goto Start_Wait ;No, esperar

bcf PORTB,7
return
;----------------------------------------------------------------------------------------

si no funciona asi me comentas.. solo por curiosidad, sin intentar activar este bit, la comunicacion funciona?. Saludos :)
Título: Re: I2c
Publicado por: borgo en Martes 20 de Septiembre de 2005, 16:33
Hola Jonathan   :hola:

Pues mira la cuestión es que el programa nunca va mas allá de esta línea

btfss PIR1,SSPIF ;Fin de secuencia de inicio ??
goto Start_Wait ;No, esperar

Se queda esperando la confirmación del sspif, pero no entiendo el motivo, la condición de inicio nunca se genera y desde luego la comunicación no ocurre.


Gracias Jonathan y si se te ocurre algo bienvenido sea, no intento hacer nada en particular solo explorar las comunicaciónes para entender un poco mas.   :rolleyes:

   Saludos
Título: Re: I2c
Publicado por: borgo en Martes 20 de Septiembre de 2005, 22:09
:whistling:  Opsssssss

Solucionado !!!!!!
  El problema estaba en que me faltaban las resistencias a + en los pines SDA y SCL .

   Gracias ... saludos para todos.
Título: Re: I2c
Publicado por: © Jonathan © en Miércoles 21 de Septiembre de 2005, 01:40
hU!! :ph34r:  .. BUENO, detalle importante el que pasaste por alto :P .. con esto se aprende que los errores que creemos estan en el codigo fuente aveces estan mas bien en el hardware .. Me alegro que hayas solucionado tu problema :) :lightsabre:

Saludos :) :hola: