viernes, septiembre 29, 2006

[Proyecto] ¡Por fin pude comunicarme con el ADS1210!

El fin de semana pasado fui a la casa de Marcelo que se ofreció a darme una mano con la comunicación del conversor ADC ADS1210 ya que tiene un osciloscopio y gracias a su ayuda pude ver más o menos donde estaba el problema. Al parecer yo ponía el conversor como maestro y al PIC como esclavo pero el ADC no me estaba enviando ninguna señal de reloj por lo que la comunicación no se producía.
En el código puse bloques que se compilaban con comunicación maestro o esclavo desde el PIC usando las directivas del compilador #define, #if, #else y #endif. Por ejemplo:

#ifndef ADS1210_MASTER
#define ADS1210_MASTER 0
#endif

#if ADS1210_MASTER == 1
// Código para usar en modo maestro al ADC
#else
// Código para usar en modo esclavo al ADC
#endif

De esta forma solo tenía que cambiar el valor de ADS1210_MASTER para que sea esclavo o maestro y re-compilarlo. Marcelo me aconsejó poner al ADC en modo esclavo pero yo me resistía porque estoy usando en el PIC tiene un Sistema Operativo En Tiempo Real llamado SalvoRTOS y no quería tener que controlar más cosas. En este momento estoy manejando un teclado, un LCD con menus y sub-menus y 4 display de 7 segmentos. No quería poner más control sobre el PIC y quería que la comunicación por SPI lo manejase el ADS1210 a través de interrupciones.
De todas formas le hice caso y mirando bien el código descubrí que tenía problemas con los tiempos y que estaba manejando mal la pata SDO cuando la ponía como entrada al finalizar la comunicación. Este problema es debido que el ADS1210 tiene la entrada y salida de datos por defecto por la misma pata y se debe configurar para que realice la comunicación en la forma que la hace el PIC. Para no dañar el conversor, después de intentar configurarlo la ponía como entrada (SDO) por si las dudas pero cortaba el último byte por la mitad, ahí estaba principalmente el error. El problema era configurarlo para que funcionara con el PIC cosa que no había logrado hasta el momento.
Por suerte y en un estado gripal terrible pude hacerlo andar y ya estoy por terminar el proyecto.

Quiero agradecerle al Ingeniero Marcelo Lorenzati por la ayuda y por ser tan apasionado con lo que hace.

Saludos.

Martín

PD: Ahora estoy de cama con 37,5 grados de fiebre así que me disculpo por algún error o frase no entendible en este texto.

PD2: Quiero recomendarles este blog llamado Microcontroller Programming.

Etiquetas: