Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEMESTRE 2021-3
PREINFORME DE PRÁCTICA No. 2
FILTRO FIR-IIR. PARTE 1
1. OBJETIVOS
Objetivo General
Implementar técnicas de manejo de ADC-DAC por medio de un microcontrolador
manejando la temporización y uso de recursos de forma eficiente.
Objetivos Específicos
1. Describir los periféricos asociados al microcontrolador que se usarán para realizar los
procesos de conversión analógica y digital.
2. Desarrollar rutinas de conversión para el ADC del procesador: configuración del
ADC, tiempos de muestreo, formato de datos.
3. Desarrollar las rutinas para mostrar datos digitales en un conversor DAC usando
SPI.
4. Manejar eficientemente la interacción entre las rutinas del ADC, DAC y Timers
para usar eficientemente los recursos hardware y software de estos periféricos.
Es un dispositivo que se encarga de convertir una señal analógica en una señal digital, con la finalidad
de poder realizar de forma sencilla el procesamiento y análisis en un sistema digital.
Se definen varios parámetros de rendimiento para realizar la conversión, como lo es la velocidad de
muestreo, teniendo en cuenta el teorema de Nyquist, así entonces se tomará como el doble de la
frecuencia máxima de la señal de entrada, de esta forma la resolución de ADC muestra la precisión
de la representación digital discreta para el rango de valores análogos. Es importante resaltar esa tasa
de muestreo ya que es la que permite representar esa frecuencia en la señal de entrada ya que se va
muestreando cada cierto intervalo de tiempo.
El conversor funciona tomando muestras en instantes de tiempo de la señal de entrada, donde cada
conversor cuenta cona una frecuencia asociada al muestreo (Hz a KHz), al tomar ciertas muestras por
segundo hasta miles dependiendo de la aplicación, este proceso es conocido como muestreo.
El proceso de codificación parte de cuantizar los valores entre muestras de una señal
digitalizada, donde se muestra un código binario determinado. La figura 2 muestra un
ejemplo que parte de un valor decimal (7), asignando un código binario de 3 bits (111), o si
es 0, asociándolo a 000, lo anterior es basado en la resolución del sistema y cada uno de los
sistemas de cuantización.
La configuración del ADC para los requerimientos, parte de configurar los puertos, el canal, dar
referencia, fuentes de reloj, los formatos de resultado, los controles respectivos.
La configuración de Puertos se debe hacer de la siguiente manera:
Colocar los bits 1 y 0 del registro TRISA en 1, estás indican las entradas de señal.
De igual forma para el selector, si se colocan los bits del registro 0 y 1 del registro ANSELA en valor
1, coloca cada uno de los pines como si fueran de configuración análoga.
Configuración de Canal: Con los puertos configurados, lo siguiente es poder realizar la configuración
de las entradas análogas que son RA0 y RA1. Se deben configurar los bits del registro ADPCH:
o Para entrada en RA0: 0b00000000. //
o Para entrada en RA1: 0b00000001. //
Referencia de la conversión ADC: Poner los bits 4,1 y 0 del registro a valor ‘0’, de tal forma que se
ajusta la referencia del ADC a lo que se alimenta el microprocesador (entre VSS y VDD), siendo
ADREF = 0b00000000.
Fuente de Reloj para la conversión ADC:
Se configura de manera interna de 16MHz HF
Resultado: lo primero es tratar de contrastar el resultado de manera que esté justificado a la derecha
por facilidad de análisis.
Control de ADC: ADCON0:
- Bit 7 ON: 1, activa el ADC.
- Bit 6 CONT: 0, el ADC se limpia después de cada conversión.
- Bit 5,3 y 1 son bits que no se implementan por tal motivo se leen como 0.
- Bit 4 CS: Se configura en 0, dado que se usa el Reloj dado por Fosc, o el reloj interno, a
diferencia que si se toma el bit en 1 se alimenta por el oscilador dedicado por el FRC.
- Bit 2 FM: al ajustar este registro en 1, lo que es ADRES y PREV muestra los resultados
justificados a la derecha.
- Bit 0 GO: se ajusta en 1 si la conversión esta en progreso en 0 es para indicar si se completo
o simplemente no esta en progreso.
Para ajustar el registro ADCON1 se debe poner:
- Se colocan del bit 7 al 0 configurados o seteados en 0.
- Bit 7 PPOL se indica que al estar conectado en 0 en la parte externa hay una conexión sobre
VSS y Chold se conecta a VDD, por lo que en la parte interna se toma como referencia el capacitor
interno de muestreo.
- Bit 6 DSEN indica los ciclos de conversión que usa la precarga y guarda valores específicos
de ADPPOL y ADGPOL.
- Bit 5 Bit selección de polaridad del anillo de protección (GPOL) al habilitarlo en 0 lo que
realiza allí es inicializar de forma digital mientras se carga en bajo para un estado de precarga.
- BIT 4 a 1 no se usan.
- Bit 0: 1, Habilita que haya dos conversiones ADC, haciendo que la primera conversión
aparezca en el registro PREV.
El microprocesador para utilizar que es fundamental en la práctica es el MCP4822, que parte de una
conversión digital análoga, partiendo por una red de resistencias, esa red va generando un promedio
ponderado de bits de entrada digital, por lo que el bit más significativo indica esa ponderación alta,
mientras que el bit menos significativo LSB recibe lo más bajo, partiendo de lo anterior los DAC se
parte de un filtro de reconstrucción para evaluar por medio del anti-aliasing para tomar esos pasos de
muestreo, pero eso a su vez para evitar el traslapamiento o solapamiento de una señal muestreado
partiendo de lo siguiente:
Figura 3. Configuración DAC con Escalera de Resistencias.
Para configurar el microprocesador parte de configurar el registro de control del DAC:
DAC1CON0:
Bit 7: EN: se configura el DAC en 1 para que quede habilitado.
Bit 6 junto bit 1 quedan sin implementar.
Bit 5 OE1: Enable de voltaje de Salida del DAC: Se configura en 1 para indicar que hay salida del
nivel de voltaje se da por salida del Pin DAC1OUT1.
Bit 4: OE2: al habilitar en 1 ocurre algo similar a lo anterior por lo que en resumidas cuentas se busca
dejar en 1 o activo para que haya salida de nivel de voltaje por salida del pin DAC1OUT2.
Bit 3 al 2 configurando PSS<1:0> configurándolos en 00 prácticamente queda en VDD.
En Bit 0 se configura NSS para que la fuente quede en VSS, es decir, en 0.
Configuración para usar el DAC externo (MCP4822): Este está relacionado con el reloj de la
transmisión SPI, por tanto, la configuración se encuentra en la sección de la SPI. Para ajustar el
funcionamiento de este, desde el microprocesador se debe configurar:
- Poner como salida digital el pin RC5, es decir, ajustar el bit 5 del registro TRISC en ‘0’.
- Poner como salida digital el pin RB4, es decir, ajustar el bit 4 del registro TRISB en ‘0’.
- Poner como salida digital el pin RE0, es decir, ajustar el bit 0 del registro TRISE en ‘0’.
Recepción USART
Se pregunta por cual frecuencia de muestreo que se eligió, se tiene pensado de la siguiente manera:
Comando Ts(s)
F5 500µ
F6 600µ
F7 700µ
F8 800µ
F9 900µ
FA 1000µ
Tabla 1. Comandos y tiempos de muestreo
Con ayuda del timer se realiza un conteo con el numero del comando que se recibe de la USART.
Algo parecido a esto:
I=+1 ;
if( i>= #comando) {
i=0;
function/variable;
}
else
state = wait;
Al trabajar el timer con interrupciones, cada vez que pasa un periodo de 100 µs, se vuelve a aumentar
el contador.
Transmisión DAC
El comando de escritura inicia al activar el pin CS bajo, seguido de la sincronización de los 4 bits de
configuración y los 12 bits de datos en el pin SDI en el borde ascendente de SCK. Se eleva el pin CS
lo que hace que los datos queden en los registros de entrada del DAC seleccionado, DACA o DACB.
̅̅̅̅̅
A/B: 𝐷𝐴𝐶𝐴 𝑜 𝐷𝐴𝐶𝐵 𝑏𝑖𝑡 𝑑𝑒 𝑠𝑒𝑙𝑒𝑐𝑐𝑖𝑜𝑛
1 = escritura en DACB
0 = escritura en DACA
̅̅̅̅
GA: 𝐵𝑖𝑡 𝑑𝑒 𝑠𝑒𝑙𝑒𝑐𝑐𝑖ó𝑛 𝑑𝑒 𝑔𝑎𝑛𝑎𝑛𝑐𝑖𝑎 𝑑𝑒 𝑠𝑎𝑙𝑖𝑑𝑎
1 = 1x (VOUT = VREF * D/4096)
0 = 2x (VOUT = 2 * VREF * D/4096), where internal VREF = 2.048V.
̅̅̅̅̅̅̅̅̅
SHDN: 𝐵𝑖𝑡 𝑑𝑒 𝑐𝑜𝑛𝑡𝑟𝑜𝑙 𝑑𝑒 𝑎𝑝𝑎𝑔𝑎𝑑𝑜 𝑑𝑒 𝑠𝑎𝑙𝑖𝑑𝑎
1 = Funcionamiento en modo activo. Vo está disponible.
0 = Apague el canal DAC seleccionado. La salida analógica no está disponible en el canal que
se cerró.
El or me permitirá que los 4 bits de datos queden como vienen del registro ADRESH y los 4 bit
del control de SPI queden tal cual están escritos ya que los 4 bits más significativos del ADRESH
son 0.
SPI1TXB = SPIA[0];
SPI1TXB = SPIA[1];
Para esta trasmisión debemos tener en cuenta activar y desactivar el bit de CS como se
mencionaba anteriormente para una correcta comunicación.
SPI: Interfaz de periféricos en serie, consta de un bus de 4 cables, con un reloj en serie una salida de
maestro/entrada esclavo o viceversa, por ello la comunicación se da en modo full-dúplex, en este caso
referirse a dúplex se usa para definir un sistema capaz de tener una comunicación de 2 direcciones,
de forma que reciba y envié mensajes de manera instantánea. A su vez retomando la comunicación
serial consiste en recibir y transmitir la información de modo que 2 dispositivos se comuniquen
simultáneamente por medio de canales diferentes, por lo que se requiere de un canal adicional para
generar sincronía de comunicación entre dispositivos.
Para lo anterior se cuentan con líneas lógicas que dan composición al protocolo:
- MOSI: Master Out Slave In: Busca que la línea utilizada para llevar bits tenga una
proveniencia de un maestro a un esclavo.
- Master In Slave Out: a diferencia de la anterior busca que la línea que se usa lleve los bits
que los bits que provienen pasen de esclavo a maestro.
- SCLK: es la línea que viene del maestro, por ello parte de enviar la señal de reloj para
sincronizar los dispositivos conectados a un protocolo.
- SS: es la línea que selecciona y habilita los esclavos.
Figura 4. Configuración de los protocolos SPI Tipo Encadenado
Para cumplir con los requerimientos se toma 100𝜇𝑠 para el periodo del timer por lo que nuestro
registro TMR0H se carga con 199. El preescaler se selecciona de 1:32 este seleccionado de manera
empírica. Decidimos usar el Timer por interrupciones, la bandera de interrupción TMR0IF se activa
cuando el valor del timer coincide con el valor cargado en TMR0H.
Diagramas de tiempo: Se decidió configurar el reloj del sistema con diferentes valores, ya que el
rango requerido de tiempos de muestreo es bastante extenso. Como lo requerido es 2000 tiempos de
muestreo diferentes entre 500us y 50ms se elegirá usar 64MHz
Como se dijo anteriormente que el reloj del sistema será variable, el diagrama de tiempo se hace de
forma general:
El valor de Ts estará definido por la frecuencia de muestreo que se solicite, con la relación fs = 1/Ts.
Para la conversión análoga a digital se usará el reloj del sistema, para ellos se procede a convertir
secuencialmente por los 2 puertos.
Comunicación UART
Se caracteriza por ser una comunicación que permite transmitir o recibir datos de bit en bit, por lo
que al ser una comunicación serial, no se cuenta como un protocolo, más bien si se cuenta como un
dispositivo, por lo que requiere estar construido por medio de un microcontrolador, esta comunicación
lo que hace es poder realizar una transmisión de datos seriales, por lo que toma bit a bit cada uno de
los datos del registro y los envía por líneas de transmisión, implementando código partiendo del
programa y mandando información serializada de un receptor.
Esta comunicación se caracteriza por ser de tipo asincrónica, por lo que cuenta con una señal de reloj
con protocolo SPI para indicar el tiempo en que transmite cada dato, por lo que los datos poseen un
bit de inicio y uno de parada en casos comunes, cuentan con bits de paridad que indican si hay un
dato es determinar correcto o incorrecto. Por lo que los dispositivos se comunican correctamente y
que esa velocidad de transmisión coincida.
Si se cuenta con un bit de parada en 1, parte de detener la transmisión, por lo que cuenta con el
transmisor como el receptor deben tener los parámetros de configuración.
Figura 9. Transmisión UART.
UART para transmitir y recibir datos usa el estándar Non-returnto-zero (NRZ). En este
estándar cuando se envían dos bits consecutivos del mismo valor se mantiene la salida en ese
valor sin volver a un valor neutral entre cada bit de transmisión. Cada bit perdurará
𝟏
𝑻𝒊𝒆𝒎𝒑𝒐𝒅𝒆𝑩𝒊𝒕 =
𝑻𝑩𝒂𝒖𝒅𝒊𝒐𝒔
Si se seleccionara como en la práctica pasada el tiempo sería. Nota: La tasa de baudios la
calculamos abajo en la sección de tasa de baudios.
𝟏
𝑻𝒊𝒆𝒎𝒑𝒐𝒅𝒆𝑩𝒊𝒕 = = 𝟓𝟎𝟎𝝁𝒔
𝟐𝟎𝟎𝟎
𝑻𝒊𝒆𝒎𝒑𝒐𝒕𝒐𝒕𝒂𝒍𝑻𝒙 = 𝟓𝝁𝒔
Transmisión UART
La transmisión es el registro de corrimiento TSR, al cual no se puede acceder directamente por el
software. El TSR obtiene los datos del buffer de transmisión, el cual usa el registro UxTXB.
Configuración:
Se deben configurar 5 bits de control a su vez deben estar en su estado por defecto. Los que se deben
configurar son los siguientes:
- TXEN: parte del registro UxCON0; en 1 para habilitar la transmisión del módulo
- Mode<3:0> al igual que TXEN el registro UxCON0; se selecciona el modo deseado, en este
caso queremos el de alta velocidad.
- RxyPPS; pin de salida deseado
- UxBRGH:L Tasa de baudios deseada
- UxBRGS: Multiplicado de tasa de baudios deseada.
La transmisión se establece de escriire un carácter en el registro UxTXB, se envía al registro TSR. La
condición presente en el TSR parte de generar algún carácter, que debe quedar el dato en el registro
UxTXb hasta que sea transmitido por completo el carácter y se desocupe TSR. El carácter pendiente
luego será transmitido.
Protocolo de Pruebas
1. La frecuencia de muestreo del ADC parte de configurar el PIN RD0 como salida
digital y se le asigna el valor de la bandera ADIF del registro PIR1. En el
osciloscopio se medirá el periodo ‘𝑇𝑠 o tiempo de muestreo’ de la señal de salida
1
por el pin RD0 junto con la frecuencia de muestreo será 𝑓𝑠 = 𝑇 . Con los anteriores
𝑠
datos, lo que se hace es exportar esa frecuencia de muestreo en formato ‘.csv’ para
un posterior análisis en el software Matlab, donde se realiza la respectiva
vectorización de las gráficas para cada uno de los análisis de las frecuencias a
trabajar.
3. Finalmente, se ajusta en el código el pin RD1 como salida a fin de que este
equivalga al bit SPITXIF, siendo este la bandera que indica la finalización de la
transmisión SPI. Con ello, se emplea un osciloscopio para medir el tiempo entre
cada transmisión. Tras obtener la señal en tiempo, se guarda en formato ‘.csv’ desde
el osciloscopio para su posterior análisis.
4. Repetir los pasos anteriores para cada tiempo de muestreo del ADC sugerido en la
práctica.
Referencias
https://core.ac.uk/download/pdf/46111717.pdf
https://www.sciencedirect.com/topics/computer-science/serial-peripheral-interface
https://blog.330ohms.com/2019/10/20/mejora-tu-programacion-en-arduino-
comunicacion-uart/