Demo de ADC con un I2C de lectura y escritura.

220 views
Skip to first unread message

Democrito

unread,
Oct 28, 2020, 9:53:33 PM10/28/20
to FPGAwars: explorando el lado libre
Hola,

He estado trabajando en un I2C de lectura y escritura de paquetes de anchura variable. Como algunos/as sabéis hice uno que era de sólo escritura, pero he conseguido que también lea.

Lo he probado sobre el ADC que viene en las Alhambras y funciona estupendamente genial. De momento la prueba es leer un sólo byte. Tengo pensado leer más bytes y para ello utilizaré un magnetómetro en el que hay que leer 6 bytes (amén de las configuraciones que necesita). Si lo consigo, entonces haré un tutorial de lectura y escritura (de paquetes variables) para saber manejar este módulo. Y como sé que no es sencillo entender el funcionamiento, también tengo pensado ir sacando todos los módulos posibles de I2C listos para funcionar.

La hoja de ruta que tengo es primero resolver y sacar todo lo posible sobre el I2C, y después aplicar la misma filosofía al SPI.

Adjunto el ADC (ADS7924) para los que quieran y puedan probarlo. Sólo funcionará con el canal 0, porque lo único que me interesaba ahora era saber que podía leer y escribir.



Pongo una imagen de cómo se ven las señales a través del Pulse View.

ads7924_signals.PNG


Ya existe un módulo para este ADC, lo importante es podamos leer y escribir tantos bytes como necesitemos, esto es sólo una demo.

Saludos.
ads7924_leds_i2c.ice

charli va

unread,
Oct 29, 2020, 2:17:54 AM10/29/20
to fpga-wars-explora...@googlegroups.com
Que buena pinta Demócrito! en cuanto termine con unas cosas de Icestudio me lio a probar esto.

Gracias!


--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/a1578e4e-939c-42ab-9ad5-b0550b9a7e53o%40googlegroups.com.

ANDRES AMAUTA GONZALESZAPATA

unread,
Oct 29, 2020, 3:43:11 PM10/29/20
to fpga-wars-explora...@googlegroups.com
Que bién Democrito el tema del i2c es muy interesante muchas gracias por compartir tanto conocimiento !


Advertencia legal: 
Este mensaje y, en su caso, los archivos anexos son confidenciales, especialmente en lo que respecta a los datos personales, y se dirigen exclusivamente al destinatario referenciado. Si usted no lo es y lo ha recibido por error o tiene conocimiento del mismo por cualquier motivo, le rogamos que nos lo comunique por este medio y proceda a destruirlo o borrarlo, y que en todo caso se abstenga de utilizar, reproducir, alterar, archivar o comunicar a terceros el presente mensaje y ficheros anexos, todo ello bajo pena de incurrir en responsabilidades legales. Las opiniones contenidas en este mensaje y en los archivos adjuntos, pertenecen exclusivamente a su remitente y no representan la opinión de la Universidad de Cuenca salvo que se diga expresamente y el remitente esté autorizado para ello. El emisor no garantiza la integridad, rapidez o seguridad del presente correo, ni se responsabiliza de posibles perjuicios derivados de la captura, incorporaciones de virus o cualesquiera otras manipulaciones efectuadas por terceros.

Democrito

unread,
Oct 29, 2020, 5:37:52 PM10/29/20
to FPGAwars: explorando el lado libre
Charli & Zupay, gracias por estar ahí!

Acabo de comprobar que el "NACK" funciona perfecto. En el protocolo I2C (hasta donde he aprendido), sólo se produce esta señal cuando finaliza una lectura (antes del stop al terminar una lectura). En el resto de datos, sean de escritura o lectura, siempre ha de ser "ACK" ese noveno bit (exceptuando cuando termina una lectura). Por supuesto que si sólo es un byte de lectura, entonces ya lo ha de llevar, pero si son varios, sólo el último ha de llevarlo. Perdón si parece que me repito, pero es que estoy contento de ver que funciona tal como se espera, lo acabo de comprobar.

Un abrazo a los dos!

Obijuan

unread,
Oct 30, 2020, 1:25:38 AM10/30/20
to FPGAwars: explorando el lado libre
Hola Demócrito!

Lo acabo de probar y FUNCIONA FENOMENAL!!!  He estado mirando todos los bloques y madre mía... qué trabajazo! Es increible! No me extraña que estés orgulloso de tu criatura. Muchísimas gracias por compartirlo! 🙂

Saludos, Obijuan

charli va

unread,
Oct 30, 2020, 1:29:26 AM10/30/20
to fpga-wars-explora...@googlegroups.com
Gracias a ti Democrito!! Funciona genial!! Sigue en esta línea que este bloque va a ser una pieza fundamental para muchas cosas.

Gracias de nuevo y a la espera ansiosa de avances!!!



--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Democrito

unread,
Oct 30, 2020, 4:41:15 AM10/30/20
to FPGAwars: explorando el lado libre
De nuevo muchísimas gracias por los comentarios porque es "gasolina" para seguir adelante.

Este finde trataré de poner en marcha el magnetómetro, que además tiene una peculiaridad (por eso lo elegí), cuando ha de leer hay que decirle al magnetómetro cuantos bytes quieres leer (se pone la dirección con el RW=1 y el siguiente byte no es de lectura que sería lo normal, sino que hay que poner otro número y ese número son los bytes a leer). Creo que el diseño soporta esta acción y si funciona, entonces ya daré por hecho que realmente vale para cualquier I2C. Entonces crearía el tutorial de cómo funciona y formas de generalizar para cualquier I2C.

Muchas gracias por el apoyo!

Democrito

unread,
Oct 30, 2020, 4:55:13 AM10/30/20
to FPGAwars: explorando el lado libre
El magnetómetro que voy a utilizar es el HMC5883L por si alguien se lo pregunta.

Alberto Nicas

unread,
Oct 30, 2020, 5:03:05 AM10/30/20
to FPGAwars: explorando el lado libre
Bravo Democrito, trabajazo!!! eso abre un montón de posibilidades!!! si señor. ENHORABUENA.

Democrito

unread,
Oct 30, 2020, 3:41:18 PM10/30/20
to FPGAwars: explorando el lado libre
Gracias Alberto!

Democrito

unread,
Nov 1, 2020, 6:12:10 AM11/1/20
to FPGAwars: explorando el lado libre
Hola,

Hace un par de horas que conseguí ponerlo en marcha y he comprobado que permite hacer lo que quieras, eso significa que ya tenemos un maestro I2C genérico que permite leer y escribir tantos bytes como queramos (el máximo es de 7281 bytes, que sale de dividir 65536/9), e incluso poner la dirección de lectura, escribir varios bytes y luego leer.

Dejo un vídeo para ver la puesta en marcha del magnetómetro de tres ejes HMC5883L. Hay que tener en cuenta que los valores que da es sobre un rango y dentro de una ganancia, además de que sólo tomo el byte bajo de un "word" de 16 bits del eje X.


Lo ideal para comprobar que el módulo trabaja bien es ver las señales a través de PulseView:

Esta es la trama de configuración:

HMC5883L config.PNG


Luego hay que dar más de 67 ms de tiempo al magnetómetro para que pueda hacer la lectura y poder disponer de esos datos.

Y en la lectura tenemos lo siguiente:

HMC5883L read.PNG

Escribe la dirección de lectura 1E, además escribe "6" (que es la cantidad de bytes a leer) y los siguientes 6 bytes es la lectura en sí. Cada eje ocupa 16 bits, por ello hay que agruparlos de dos en dos.

Este chip lo que hace es medir la fuerza del campo magnético, para conseguir convertirlo en una brújula es más complicado porque se necesita el arcotangente (my/mx).

Estos días me pondré a documentar el funcionamiento aplicado a cualquier I2C, y como la parte de escritura ya la tengo hecha, la lectura será menos densa.

Adjunto el circuito utilizado en el vídeo.

Saludos.
HMC5883L_ejemplo.ice

Jose Picó

unread,
Nov 1, 2020, 6:14:57 AM11/1/20
to fpga-wars-explora...@googlegroups.com
Wowwwwww!
Eso si que es épico!
Enhorabuena y muchas Gracias

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Democrito

unread,
Nov 1, 2020, 7:09:52 AM11/1/20
to FPGAwars: explorando el lado libre
Gracias José!

Perdonad, puse el vídeo en privado pensando que quedaba oculto. Ya he cambiado para poder verse.
Reply all
Reply to author
Forward
0 new messages