Autor Tema: Error de visualización GLCD, con protocolo I2C [SOLUCIONADO]  (Leído 513 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7856
Re:Error de visualización GLCD, con protocolo I2C [SOLUCIONADO]
« Respuesta #30 en: 25 de Julio de 2020, 14:59:19 »
Bueno pero en este caso es un dispositivo programado... que ofrece la opcion de pasar la direccion, por que puede tener varias direcciones, para distintas partes (dentro del mismo micro) o por otros motivos.

Citar
The SSPxADD register (Register 15-7) contains the Slave mode address. The first byte received after a Start or Restart condition is compared against the value stored in this register. If the byte matches, the value is loaded into the SSPxBUF register and an interrupt is generated. If the value does not match, the module goes Idle and no indication is given to the software that anything happened

Es decir solo las direcciones que coinciden generan una interrupcion y permiten la llegada de datos. En este caso no tiene sentido que pase la direccion, y es el funcionamiento de tu dispositivo (sensor, rtc, etc).

PERO...

Ademas tenes una mascara.

Citar
An SSPx Mask (SSPxMSK) register (Register 15-6) is available in I2C Slave mode as a mask for the value held in the SSPxSR register during an address comparison operation. A zero (‘0’) bit in the SSPxMSK register has the effect of making the corresponding bit of the received address a “don’t care”.

Donde podes crear un cierto "rango" de direcciones, en los cuales podes recibir tus datos, o por ejemplo si quisieras analizar todo el trafico de I2C y enviarlo por UART a una PC.
O tener la direccion con terminacion 1 para una cosa, y la terminacion 2 para otra.
Es necesario tener el valor de la direccion para saber a que se dirige y por lo tanto necesitas si o si el valor de la dirección.

Sino estarías acotando el funcionamiento del I2C. Y como todo, aumenta la complejidad del modulo (entenderle, usarlo, crearlo) pero permite mas cosas.

Por lo que no lo veo como algo "malo", lo malo fue que no lei el datasheet antes :P jeje y asumi igual que vos que la direccion no pasaba.

Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 450
Re:Error de visualización GLCD, con protocolo I2C [SOLUCIONADO]
« Respuesta #31 en: 25 de Julio de 2020, 15:12:35 »
Yo cuando he trabajado I2c en slave con un pic he recibido primero la dirección y si es la deseada atendía una interrupción donde enviaba ACK y recibía el siguiente dato.

  Luego no solo eso, sino que ademas comprobaba si a continuación hay condición de stop o de re-start. Por si el máster me quiere enviar varios bytes seguidos.

   Lo que pasa es que lo hago todo manejando manualmente el módulo y no tirando de librerías. Daba por sentado que la librería Haría todo eso, y más en CCS.

 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7856
Re:Error de visualización GLCD, con protocolo I2C [SOLUCIONADO]
« Respuesta #32 en: 25 de Julio de 2020, 15:31:36 »
Tenes que ver el micro... Este micro posee todo eso.. Los micros mas viejos no y habia que hacerlo como vos los planteas.

Si la direccion no es la correcta, ni avisa al software.
Si vos no lees el dato y el buffer esta lleno, automaticamente manda un NACK
Si recibe un dato envia el ACK.

Y asi... pero podes hacerlo por software si lo deseas. Pudiendo generar un NACK si esta ocupado el micro por ejemplo al detectar cierta direccion.

Te digo que uno de los grandes dolores de cabeza era generar esa maquina de estado.. Interrupcion por un start, interrupcion por un stop, etc, etc. Ahora es mucho mas sencillo xD.
« Última modificación: 25 de Julio de 2020, 15:39:02 por KILLERJC »

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 397
    • Mcu Tronics
Re:Error de visualización GLCD, con protocolo I2C [SOLUCIONADO]
« Respuesta #33 en: 25 de Julio de 2020, 15:37:13 »
Completamente de acuerdo Killer,remi04, asumí que operaria de cierto modo y cometí el error de no leerme la parte del I2C del datasheet nuevamente, es que muchas veces tenemos tan mecanizada cierta acción o proceso que cuando pasa algo fuera de lo que acostumbramos ver, sucede esto jejeje, lección, aprendida

al menos queda la experiencia para no cometer el mismo error y al contrario, mejorar el proceso

Nunca se deja de aprender