Página 1 de 1

Problema con Bus I2C

NotaPublicado: Mar Mar 18, 2014 3:37 pm
por mdptweety
Estoy programando un PIC16F877A con Pickit2 usando Proton+. Pero al revisar con el osciloscopio las salidas SDA y SCL los encuentro desincronizados y fuera de tiempo. Subo una imagen de la pata SCL:

Imagen

Y aca va el programa:

Device = 16F877A
Xtal = 20

'BUS I2C *****************************************************************************
Declare SDA_Pin PORTC.4 'DECLARO CUALES PINES DEL PIC VAN A SER
Declare SCL_Pin PORTC.3 'SDA Y SCL CON UN BUS DE MENOS DE 8 MHZ
Declare Slow_Bus 1

'NUESTRAS VARIABLES DE TRABAJO *********************************************************
Symbol BB2 = %00000010 'BAND-SWITCH BYTE EN VHF BANDA ALTA
Symbol ADBW = %11000010 'ADRESS BYTE (TERMINA EN CERO = ESCRIBIREMOS FRECUENCIA EN EL SINTO)
Symbol CB = %11001110 'CONTROL BYTE(MODO NORMAL /AVANZAMOS POR PASOS DE 62.5 KHZ)
Symbol DIVIDER1 = %00001110 'DIVIDO POR 3632 PARA QUE EL OSCILADOR LOCAL QUEDE EN 227 MHZ
Symbol DIVIDER2 = %00110000 'ASI 181.25 MHZ + 45.75 MHZ = 227 MHZ (SINTONIZO CANAL 8)

Clear 'LIMPIO LA RAM AL INICIAR
DelayMS 300

Repeat
BStart 'INICIO EL CONTACTO I2C
BusOut ADBW 'ENVÍO EL BYTE DE ADDRESS PARA ESCRIBIR EN EL SINTO
BusOut DIVIDER1 'ENVÍO EL PRIMER BYTE DEL DIVISOR PROGRAMABLE (DIVIDER1)
BusOut DIVIDER2 'ENVÍO EL SEGUNDO BYTE DEL DIVISOR PROGRAMABLE (DIVIDER2)
BusOut CB 'ENVÍO EL CONTROL BYTE
BusOut BB2 'ENVÍO EL BAND-SWITCH BYTE (VHFH)
BStop 'TERMINO EL CONTACTO I2C
DelayMS 300
Until 1

-------------------------------------------------------------------------------------------------------
Estoy errando en la programacion? O tendre algun problema en el PIC? Deberia ser una cosa sencilla de programar y sin embargo me trae varios problemas

Re: Problema con Bus I2C

NotaPublicado: Mié Mar 19, 2014 9:16 am
por HJ
hola mdptweety, lamentablemente no manejo Proton, pero estaría bueno una captura pero de las dos señales al mismo tiempo para ver la desincroinización que mencionas.

saludos
HJ

Re: Problema con Bus I2C

NotaPublicado: Mié Mar 19, 2014 3:21 pm
por mdptweety
La verdad que no me avive de tomar una captura de las dos señales (SDA Y SCL) en simultaneo porque cuando vi SCL toda desincronizada asumi el error por ahi. Pense que SCL deberia ser un pulso fijo de 100 khz pero leyendo mas sobre el bus i2c lei que el SCL depende del SDA y de la comunicacion. Como ven esos pulsos? Me parece que estan medio feos para una buena comunicacion (desde ya lo que intento controlar con esos pulsos no reacciona, asi que asumi que el problema era ese)

Re: Problema con Bus I2C

NotaPublicado: Jue Mar 20, 2014 8:02 pm
por Switchxxi
Guenas...

xdmw0dcupkf1982z1et8k.jpg


Esos pulsos son de casi 500mv por lo que veo... Lleva la escala de tiempo a una menor para ampliar las ondas y ver si no estan apareciendo de por medio pulsos raros...

Preguntas:

- Controlaste que los pines vallan a sus correspondientes en el otro extremo ? SDA ---> SDA y SCL --> SCL ?
- Mediste con el osciloscopio ambas señales a ver si los pulsos de clock se sincronizan bien con los de datos y mas aun si se esta generando el START bit y el STOP bit ?
- Mediste como es la forma de onda de ambas señales sin conectar el micro al receptor ?
- Capacitor de desacoplo en la alimentacion que va al micro pegado al mismo ?
- Fuente de alimentacion bien filtrada ?
- Si mal no estoy viendo, ya que parece que la escala de tiempo es de 25us es que cada pulso dura 5us con lo que seria 100khz en la comunicacion, lo cual no esta mal, pero esta en el limite de lo que especifica la norma I2C... Probaste con una velocidad de comunicacion menor ?

Proton no es muy amigo mio lamentablemente...

Saludos.
- Javier -

PD: Deja este post para preguntar, no lo hagas en otro hilo ya que se arma un desastre al ir a ver y venir a contestar e ir a leer y contestar alla, y... ya me maree..

Re: Problema con Bus I2C

NotaPublicado: Jue Mar 20, 2014 8:58 pm
por mdptweety
- Controlaste que los pines vallan a sus correspondientes en el otro extremo ? SDA ---> SDA y SCL --> SCL ?... Claramente si...

- Mediste con el osciloscopio ambas señales a ver si los pulsos de clock se sincronizan bien con los de datos y mas aun si se esta generando el START bit y el STOP bit ? No. Te explico, el proyecto es parte de mi tesis en ingenieria electronica y lamentablemente como trabajo todo el dia tengo poco tiempo para ir al laboratorio de la facultad y poder hacer las pruebas correspondientes, en la semana que viene vuelvo y hare mejores mediciones.

- Mediste como es la forma de onda de ambas señales sin conectar el micro al receptor ? No, va a ser parte de mis primeras pruebas cuando vuelva al laboratorio. Calculo que la forma "fea" de los pulsos y que no todos esten equiespaciados sea cula de alguna capacidad parásita en los cables que conectan las patas sda y scl.

- Capacitor de desacoplo en la alimentacion que va al micro pegado al mismo ? Si

- Fuente de alimentacion bien filtrada ? Si

- Si mal no estoy viendo, ya que parece que la escala de tiempo es de 25us es que cada pulso dura 5us con lo que seria 100khz en la comunicacion, lo cual no esta mal, pero esta en el limite de lo que especifica la norma I2C... Probaste con una velocidad de comunicacion menor ? Lamentablemente no soy muy experimentado en la programacion PIC y con el PROTON+ encontre un software que mediante pocas instrucciones podia controlar las funciones que necesitaba. El Proton me permite unicamente activar el Slow bus ON que estaria funcionando en los 100 KHZ.

PD: Perdon por subir la imagen a otro hilo pasa que es parte de aquel proyecto tb, aunque en esta etapa tiene que ver mas con los microcontroladores.

Gracias por la ayuda!!!

Re: Problema con Bus I2C

NotaPublicado: Sab Mar 22, 2014 8:47 pm
por Switchxxi
Prueba esto a ver que pasa:

Código: Seleccionar todo
BStart 'INICIO EL CONTACTO I2C
BusOut ADBW, DIVIDER1, DIVIDER2, CB, BB2
BStop 'TERMINO EL CONTACTO I2C


Lo que no se es si proton genera los pulsos de reloj para esperar el reconocimiento (ACK) después de cada byte enviado si lo enviás por separado como en el código que pusiste al principio.

Con probar no se pierde nada.

Re: Problema con Bus I2C

NotaPublicado: Dom Mar 23, 2014 1:18 pm
por mdptweety
Lo simule con PSI escribiendo en una memoria (cambiando por supuesto la direccion del dispositivo) y viendo en la salida de osciloscopio a nivel programa esta todo correcto, asi que voy a controlar si hay alguna capacidad parasita jodiendo que puede hacer que no reciba bien los datos el sintonizador, gracias.