Autor Tema: bus I2C y pic 16f8xx  (Leído 3215 veces)

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

Desconectado m-o-s

  • PIC10
  • *
  • Mensajes: 45
bus I2C y pic 16f8xx
« en: 16 de Mayo de 2008, 06:40:25 »
Hola compañeros, estoy utilizando dos pic 16f8xx como exclavo y pic 18f252 como maestro. El exclavo lo utilizo unicamente para controlar un lcd, es decir solo recibe informacion y visualiza. Todo funciona bien hasta que he añadido un sensor de temperatura.

El caso es que el pic exclavo muestra todos los datos que le voy enviando, cada 10 segundos el pic maestro lee la temperatura del sensor ds1621 que va por bus I2C, a partir de aqui ya el pic exclavo no se comunica con el maestro.

Por las pruebas que estoy haciendo, pienso que el pic exlavo (encargado solo de visualizar) se queda bloqueado al ver que la direccion enviada no es la suya.

No se que se puede hacer para que el pic exclavo al recibir una direccion que no es la suya, la borre y se mantenga a la espera de que le llegue su direccion.
Estos registros son los que tiene el pic exclavo mientras esta funcionando bien:
SSPBUF   0x0013   0b00000000
SSPCON   0x0014   0b00110110
SSPCON2   0x0091   0b00000000
SSPSTAT   0x0094   0b00110000
SSPADD   0x0093   0xE4                 ; esta es la direccion que le tengo puesta al pic exclavo
PIR1   0x0F9E   0b00001000

Y asi es como se queda el pic exclavo cuando hago una lectura del sensor ds1621:

SSPBUF   0x0013   0b10011110   ; esta direccion que aparece aqui es la que le tengo puesta al sensor ds1621
SSPCON   0x0014   0b01110110
SSPCON2   0x0091   0b00000000
SSPSTAT   0x0094   0b00010001
SSPADD   0x0093   0xE4
PIR1   0x0F9E   0b01001000
;
No se como configurar el exclavo para que esto no pase, me trae de cabeza. Un saludo compañeros. :(

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bus I2C y pic 16f8xx
« Respuesta #1 en: 16 de Mayo de 2008, 09:02:21 »
mos hace un largo rato que no uso I2C pero te digo un par de consejos

1) Si estás en modo 7bits para el direccionamiento, si mal no recuerdo el último bit no se usaba ya que este indicaba si el comando que se recibía era de lectura o de escritura.  Es allí donde las direcciones eran PARES siempre ya que la IMPAR correspondía al mismo dispositivo en operaciones de lectura

2) En los pics es tu código el responsable de hacer que responda o no.  Y si está queriendo responder o envía un ACK por el bus es porque reconoce la dirección con lo cual estás teniendo claramente un problema de conflicto de direcciones entre tu esclavo y el nuevo integrado que agregaste al bus.

3) Tienes resistencias de pullup? suelen ser necesarias aunque esto disminuye la velocidad del bus son imprescindibles cuando usas varios ICs

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado m-o-s

  • PIC10
  • *
  • Mensajes: 45
Re: bus I2C y pic 16f8xx
« Respuesta #2 en: 17 de Mayo de 2008, 03:35:06 »
Hola compañero, si la tengo puesta los ( resistores pull-up), el bit de escritura/lectura eso esta controlado. El problema esta en que me falta codigo para el pic exclavo, para que cuando se de esa situacion en la que por el bus venga una direccion que no sea la suya haga caso omiso y siga esperando su direccion. Sigo probando pero hay algo que no hago. Un saludo compañero. :P

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bus I2C y pic 16f8xx
« Respuesta #3 en: 18 de Mayo de 2008, 14:10:55 »
Hola compañero, si la tengo puesta los ( resistores pull-up), el bit de escritura/lectura eso esta controlado. El problema esta en que me falta codigo para el pic exclavo, para que cuando se de esa situacion en la que por el bus venga una direccion que no sea la suya haga caso omiso y siga esperando su direccion. Sigo probando pero hay algo que no hago. Un saludo compañero. :P

A ver, vayamos por partes. 

1. Si tu tienes a tu maestro y a tu esclavo solos en la red , tu software funciona?
2. Si le agregas el esclavo a la red pero direccionas solo al esclavo tu software funciona?


Quiero separar lo que pueda ser conflicto de bus con lo que sea simplemente la lógica de tu esclavo.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado m-o-s

  • PIC10
  • *
  • Mensajes: 45
Re: bus I2C y pic 16f8xx
« Respuesta #4 en: 18 de Mayo de 2008, 18:16:53 »
EL circuito funciona siempre y cuando el maestro no direccione a otro dispositivo.

Ahora, cuando le pido que lea la temperatura que lo hago cada 10 segundos es cuando el pic exclavo ya deja de recibir datos,
y si los dejo solos maestro y exclavo y quito el sensor de temperatura le pasa igual. El pic exclavo sigue funcionando pero sin detectar ninguna direccion, con lo que ya no recibe datos.

Se activa el señalizador en el pic exclavo de que no se ha leido el byte de direccion SSPCON,SSPOV, tambien se activa otro bit señalizador PIR1,ADIF. :P

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: bus I2C y pic 16f8xx
« Respuesta #5 en: 18 de Mayo de 2008, 19:11:32 »
seria mejor que pusiera el codigo completo porque algo hace tu mal ahi, segun he leido cuando el master envia al esclavo algun datos el master espera una respuesta de comprobacion (llamado ACK), un consejo te doy para que te puedan ayudar, es poner todos los datos y si usa alguna libreria tambien.
Saludos

Desconectado m-o-s

  • PIC10
  • *
  • Mensajes: 45
Re: bus I2C y pic 16f8xx
« Respuesta #6 en: 21 de Mayo de 2008, 15:26:34 »
Hola compañeros ya lo tengo resulto, solo tenia que liberar SSPBUF y asunto resuelto. Gracias compañeros un abrazo. :-)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bus I2C y pic 16f8xx
« Respuesta #7 en: 21 de Mayo de 2008, 15:27:17 »
Hola compañeros ya lo tengo resulto, solo tenia que liberar SSPBUF y asunto resuelto. Gracias compañeros un abrazo. :-)

Me alegro mucho  :)

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)