Conversor ADC 12030 de 12 bits más signo serie I/O A/D con MUX y Sample & Hold Características fundamentales: ADC 12030: conversor de 12 bits más el signo de aproximaciones sucesivas Tiene entradas y salidas serie y un multiplexor con entradas configurables Poseen 2 ,4 y 8 entradas. Las salidas diferenciales del multiplexor y las entradas están disponibles en los pines MUXOUT1,2 A/DIN1,2 El ADC12030,12H030 tienen 2 multiplexores de canales con la salida del multiplexor internamente conectadas a las entradas del A/D La diferencia entre los signados con H es la velocidad , para estos es 8Mhz y para los primeros 5MHz. A pedido del programa estos conversores A/D pueden ejecutar una rutina de calibración que ajusta linealmente errores de cero y full scale a menos de ±1 LSB. Las entradas analógicas pueden ser configuradas para operar en varias combinaciones Salida simple (no balanceada) Diferencial Pseudo diferencial. El rango diferencial unipolar total de 0 a +5V se puede lograr con una fuente de alimentación de 5V. En modo diferencial la salida será válida aún con valores negativos más grandes que los positivos esto es así debido a que la indicación del formato de salida tiene signo. La interfaz serie está configurada para la norma NSC Microwire Especificaciones clave Resolución 12 bits + signo Tiempo de conversión 5.5 s Tiempo de transferencia 8.6 s. 14 s. Error de linealidad ±1 LSB Alimentación simple 5V Consumo 33mW Descripción de los pines CCLK (control clock)El clock aplicado controla el intervalo de tiempo del registro de aproximaciones sucesivas y el tiempo de adquisición. El tiempo de subida no debe exceder de 1 s. SCLK (serial clock)implementado en el pic Es la entrada de clock para temporizar los datos serie. El clock aplicado a la entrada controla la tasa a la cual sucede el intercambio de datos serie. El flanco de subida carga la información del pin DI de la dirección del multiplexor y la selección de modo del registro de desplazamiento. Esta dirección controla cual canal de entrada analógica del multiplexor es seleccionada y el modo de operación del A/D. Cuando el CS esta bajo, el flanco descendente de SCLK desplaza el dato resultante de la conversión A/D previa a la salida DO con excepción del primer bit de datos Cuando CS está bajo continuamente el primer bit de datos es temporizado con el flanco de subida de EOC ( fin de conversión) cuando CS es conmutado el flanco descendente siempre temporiza el primer bit de datos. El CS debería ser forzado al nivel lógico bajo cuando SCLK está bajo Los tiempos de subida y bajada no deberían exceder de 1 s. DI Por este pin entra la señal de datos. Los datos aplicados a este pin son desplazados por el flanco ascendente SCLK dentro de la dirección del multiplexor o dentro del registro de selección de modo. DO Es el pin de salida de datos. Este pin es un push pull de salida cuando CS está bajo. Cuando CS esté alto esta salida presenta tercer estado. El resultado de conversiones A/D D0 ...D12 y el dato de estado del conversor son temporizados por el flanco de bajada del SCLK y este pin. La longitud de palabra y el formato pueden variar . La longitud de palabra y formato son controlados por el dato desplazado dentro del multiplexor de direcciones y el registro de selección de modo EOC este pin es una salida push pull efectiva e indica el estado del ADC12030. Cuando está bajo la señal indica que el conversor está ocupado con una conversión, auto calibración auto cero o ciclo de apagado El flanco de subida del EOC indica el final de esos ciclos CS Este es el pin de selección de chip. Cuando se le aplica un bajo lógico el flanco de subida del SCLK desplaza los datos sobre DI al registro de direccionamiento Este bajo también saca a DO del tercer estado . Con CS bajo, el flanco de bajada de SCLK desplaza los datos de la conversión previa enviándolos por D0 con excepción del primer bit de datos. Cuando CS esta permanentemente en bajo el primer bit de datos es temporizado en el flanco ascendente del EOC (end of conversion) . Cuando CS es conmutado, el flanco descendente de CS siempre temporiza el primer bit de datos. CS debería ser puesto en estado bajo cuando SCLK está bajo. El flanco de bajada de CS reinicia (resetea) una conversión en progreso y comienza la secuencia para una nueva conversión, cuando el CS es vuelto a poner bajo en una conversión esta es terminada prematuramente. El dato en los registros (latches) de salida puede estar corrupto. En consecuencia cuando se envía un CS bajo durante una conversion el dato en los registros de salida debería ser ignorado. El CS podría dejarse bajo, en este caso es imperativo que se aplique el número correcto de pulsos de SCLK con el propósito de conservar el sincronismo. Después de aplicar la alimentación el adc aguarda 13 pulsos de reloj por cada secuencia de entrada /salida(I/O)El numero de ciclos que espera el ADC es el de la misma longitud que el de la palabra digital de salida .la longitud de palabra puede ser modificada por el dto desplazado en el pin D0 DOR: Este es el pin que indica que el dato de salida esta listo. Es una salida activa Push Pull Esta bjpo mientras el resultado de conversión está siendo desplazado y va alto para indicar que el dato ha sido enviado en serie (shifted out) CONV Se requiere un bajo lógico en este pin para programar cualquier modo o cambiar la configuración ADC según los distintos modos de programación tal como conversión de 12 bits conversión de bits Auto cal ,auto cero etc. Cuando ADC esta alto, el conversor está en modo solo lectura. Mientras se permanezca en el modo “solo lectura”(read data only mode ) con CS bajo y conmutando SCLK, solo se temporizará cualquier dato almacenado en los registros de desplazamiento de salida. El dato en DI será ignorado. No se deberá comenzar euna nueva conversión y el ADC permanecerá en el modo y/o configuración previan¡mente programada La lectura de datos no puede ser realizada si una conversión Auto cal ,auto cero está en progreso. PD Es el pin de apagado Power down con PD alto el A/D es pagado , caso contrario es encendido. Despues de enviado el comanado al A/D le toma 250 s encenderse. CH0 CH7 estas son las entradas analógicas del MUX. Un canal de entrada se selecciona de acuerdo a la información de la dirección presente en el pin DI. Que se carga con los flancos ascendentes de SCLK en el registro de direcciones. La tensión aplicada a estas entradas no deberia exceder los niveles GND - +V de no ser asi podría distorsionarse la lectura del canal seleccionado COM Es un pin de entrada analógica Es usada como una pseudo tierra cuando e mpx es de entrada no balanceada (single ended) MUXout1 , MUXout2 Son los pines de salida del mpx A/DIN1, A/DIN2 Son los pines de entrada del conversor. MUXout1 esta ligado a A/DIN1 , mientras MUXout2 lo está a A/DIN2 . Si se ubica circuitería externa entre MUXout1y A/DIN1 ,o entre MUXout2y A/DIN2 entonces debe protegerse los pines de manera de no exceder los niveles AGND - +VA. VREF+ Tensión de referencia analógica. Para mantener la exactitud debe estar entre 1V y 5V y no exceder VA+ VREF- Tensión de referencia analógica. Para mantener la exactitud no debe estar debajo de GND y no exceder VA+ VA+ ,VD+ Pines de alimentación analógico y digital DGND, AGND Tierras analógica y digital. Interface digital Veamos la típica secuencia de eventos después de encender el ADC DI Auto cal Read Status Read Status 12 BIT+SIGN CONV 1 12 BIT+SIGN CONV 2 DO Trash Trash Status Data (Low) Satus data Conv 1 data La primera instrucción al A/D vía DI inicia la auto calibración,0000100 el dato que casi simultáneamente ( medio ciclo de sclk) sale por DO carece de significado y es completamente aleatorio. Para determinar si la auto cal se ha completado se le envía una instrucción de lectura de estado (read status)00001100.Nuevamente el dato que sale carece se significado ya que el procedimiento de auto cal modifica el dato a la salida del registro de desplazamiento salida.para recuperar la información de estado se enváa nuevamente una instrucción de lectura de estado al A/D En este lapso el dato de estado esta disponible en D0 si el bit de cal ( D02) en la palabra de estado está baja, XX0XXXXX la Auto Cal ha sido realizada .En consecuencia la siguiente instrucción puede ser el inicio de conversión. Por ej 00001000 (entrada diferencial ,12 bits +sgn ,primer bit recibido o “justificación” LSB) El dato de salida en esta oportunidad es nuevamente información del estado. Para protegerse del ruido la salida del A/D no debe ser leída mientras progresa la conversión. Si CS es puesta a tierra en una ranura temporal (strobe) la conversión finaliza porematuramente Par determinar el fin de la conversión puede utilizarse la señal EOC o el controlador del A/D pude ser vigilado por software acerca de cuando sería apropiado comunicarse con el A/D nuevamente. El dato puede ser leído cuando se envíe la siguiente instrucción al A/D Programa PIC 16F873. Objetivos: Se prueba el comando de Autocalibración escribiendo 1) Se manda el código 00000100 "AutoCal" con el LSB primero 2) Se manda el código 00001100 "Read Status" con el LSB primero y se repite este comando hasta que el bit DO2 (XX0XXXXX) leído sea "0". Inicialmente en el Power Up es "1"). El bit DO2 corresponde al bit 5 de TINADC ya que se leen 8 bits y el LSB es el primero que entra y se va desplazando a izquierda en TINADC. ;3) Luego de detectar fin de autocalibración se manda el comando: "Conversión de 12 bits" 00001000 que corresponde a: Entrada diferencial con CH0(+) y CH1(-). 12 bits mas signo. Formato de 12 bits. Primer bit recibido: LSB 4) Se llama a la rutina de Display donde se visualiza el dato de la conversión en el port B que contiene los 8 bits menos significativos y en el port C los 4 bits mas significativos mas el signo. 5)transmisión de los datos por el puerto serie a PC Se repite permanentemente 3) y 4) Inicialización Definición de entradas y salidas Se utiliza la interrupción de timer para generar el clock serie (SCLK) Se midió 240Hz como frecuencia de SCLK y un período de muestreo de 58,2ms. Rutina AUTADC (Envío de la instrucción de AUTOCALIBRACION) Se detecta si el clock SCLK =RA0 paso de uno a cero Si está en cero se pone CS =0 1->0 (loop INVES1) Se enviaran datos de control al PIC a través de DI, (pin 13 Adc12030) en este caso la instrucción de Autocalibracion 0000100:El adc12030 responderá con datos aleatorios en las 2 primeras lecturas para saber cuando iniciar la conversión se debe testear el el bit d2 del registro de estado Las palabras enviadas por el adc12030 se recibirán en el RA1 Inicialización de registros auxiliares para leer las entradas al pin RA1 cada bit de RA1 se almacena en TINADC, OFFSET apuntara a cada bit de RA1 En RAUTADC esta cargado 00000100 AUTOCALIBRACIÓN. TOUTADC es el registro de salida TINADC Borra registro de entrada de datos al PIC. RCUEADC Puesta a cero registro de conteo de ciclos de SCLK con 0. Envío efectivo de la instrucción de AUTOCALIBRACION Se pasa el contenido de RAUTADC a TOUTADC. El contenido de TOUTADC será enviado por el pin RA0 por medio de sucesivas rotaciones a derecha . El procedimiento es testear cada bit de RAUTADC. Si es CERO se envía a POINO y se saca un cero por el RA0 En caso contrario se envia un UNO Luego de cualquiera de estos casos se rota a derechaSe debe generar el flaco de subida luego de cada rotación Generación del flanco de subida para escritura en el ADC12030. Recordar que sclk se genera con el timer1 y el registro INVERT En el flanco de subida de SCLK el ADC12030 lee un nuevo dato de DI. Se detecta si el clock paso de cero a uno 0->1 (loop INVES0) Si es asi se testea RA1=D0 .Si fue cero se envia a ENTINO. Si fue uno se carga el contenido de offset en ese bit( operación IORFW) Si pasa a ENTINO : a) Se debe esperar que el flanco de reloj baje para detectar una nueva subida b) Se debe preparar el registro OFFset con una rotación izquierda previo borrar el bit de carry para la eventual llegada de un uno en el próximo ciclo c) Se debe contar si no se llego al octavo (ultimo) bit de la palabra a enviar registro RCUEADC loop INVES1 SCLK=1 ->0 NO SI CS=0 RAUTADC =00000100 OFFSET=1 RCUEADC=0 RAUTADC a TOUTADC O? RA0=1 POINO RA0=0 TOUTADC Espera para Generación de flanco Registro INVERT (sale por RA2) (loop INVES0) Lectura del Random BYTE Llegó un 1? NO ENTINO Esperar flanco de Bajada Rotar OFFSET Descontar NO RCUEADC=8 CS=1 SI RA1=1 Rutina LEERADC (leer el registro de estado ) Similar a AUTADC solo cambia RLEEADC en lugar de RAUTADC Se carga en W la palabra de control para LEER STATUS. Rutina CONADC Similar a AUTADC solo cambia RCOADC0 en lugar de RAUTADC Se carga en W la palabra de control para CONVERSIÓN CH0(+) CH1(-). Como se deben leer 13 signos se carga primero RCUEADC con 8 y luego con 13 Ademas se agregan INVESOZ (detección de flaco de bajada) ENTINOZ. Carga de bits leidos en TINADC2 para leer el total de bits Rutina DISPLAY Muestra los datos guardados en TINADC Y TINADC2 en los leds. PUERTOS B Y C respectivamente Rutina para transmisión serie (conversión a ASCII??) Diagrama de Tiempo SCLK Loop INVES1 Loop INVES0 ENTINO CS