0% encontró este documento útil (0 votos)
15 vistas6 páginas

Microcontroladores Notas

El documento detalla el funcionamiento del Conversor Analógico-Digital (ADC) y la interfaz de comunicación TWI (I2C) en el microcontrolador ATmega328P, incluyendo configuraciones, registros y cálculos prácticos. También se abordan aspectos del protocolo USART, sus modos de operación y registros de control. Se incluyen ejemplos de uso y cálculos relacionados con la conversión de señales analógicas y la comunicación entre dispositivos.

Cargado por

Jose F Sanchez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas6 páginas

Microcontroladores Notas

El documento detalla el funcionamiento del Conversor Analógico-Digital (ADC) y la interfaz de comunicación TWI (I2C) en el microcontrolador ATmega328P, incluyendo configuraciones, registros y cálculos prácticos. También se abordan aspectos del protocolo USART, sus modos de operación y registros de control. Se incluyen ejemplos de uso y cálculos relacionados con la conversión de señales analógicas y la comunicación entre dispositivos.

Cargado por

Jose F Sanchez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd

¡Claro!

Aquí tienes las respuestas a las preguntas que pueden venir en tu examen, extraídas de las
fuentes proporcionadas y de nuestra conversación anterior:

Respuestas del examen


Sobre el Conversor Analógico-Digital (ADC)
• Fundamentos y Componentes:
• El ADC incorporado en el microcontrolador ATmega328P tiene una resolución de 10
bits. Opera bajo el principio de aproximaciones sucesivas.
• El ADC del ATmega328P admite tres modos de funcionamiento diferenciados:
conversiones simples, automáticas y mediante interrupciones.
• La función principal de los registros es:
• ADMUX: Se encarga de seleccionar la entrada analógica, el voltaje de
referencia y el formato del resultado de la conversión.
• ADCSRA: Controla la habilitación del ADC, el inicio de la conversión, la
configuración del preescalador y el estado del ADC.
• ADCSRB: Controla el modo de disparo automático del ADC.
• Configuración del ADC:
• Para configurar el registro ADMUX y seleccionar el voltaje de referencia interno
de 1.1V con capacitor en AREF, los bits REFS1:REFS0 deben establecerse en 11.
• Para seleccionar el canal de entrada analógica ADC5, la combinación de bits
MUX3-MUX0 que se debe establecer en el registro ADMUX es 0101.
• Para habilitar el ADC, el bit ADEN en el registro ADCSRA debe ser configurado a 1.
Para iniciar una conversión, se establece el bit ADSC a 1; este bit se limpia
automáticamente una vez que la conversión ha comenzado. El bit ADIF (Bandera de
interrupción del ADC) indica que el resultado de la conversión está listo; se limpia
escribiendo un 1 en él.
• La importancia de configurar el preescalador del ADC radica en asegurar que la
frecuencia de reloj del ADC esté por debajo del límite máximo recomendado de 200
kHz. Para lograr un factor de división de 128, los bits ADPS2:ADPS0 deben
configurarse como 111.
• Para habilitar el modo de disparo automático del ADC, el bit ADATE en el registro
ADCSRA debe ser configurado a 1.
• Tres modos de disparo automático que se pueden configurar utilizando los bits
ADTS2:ADTS0 del registro ADCSRB son: Disparo libre (000), Comparador
analógico (001) e Interrupción externa INT0 (010). También se pueden mencionar
Coincidencia en la comparación del Timer 0 (011), Desbordamiento del Timer 0
(100), Coincidencia en la comparación del Timer 1 unidad B (101),
Desbordamiento del Timer 1 (110) y Evento de captura del Timer 1 (111).
• Cálculos Prácticos (Basado en el Ejemplo 1):
• Si la temperatura ambiente es de 35°C con un sensor LM35 (10 mV/°C) y un voltaje
de referencia de 5V:
• El voltaje presente a la entrada del ADC es $35 \times 10 \text{ mV/°C} =
350 \text{ mV} = \textbf{0.35 V}$.
• El resultado de la conversión en la salida digital del ADC se calcula como
$(V_{entrada} / V_{ref}) \times 1023$. Entonces, $(0.35 / 5.0) \times 1023 \
approx 71.61$. Aproximando al valor entero menor, el Valor_ADC es 71.
• Si el resultado digital de la conversión entregado por el ADC es 150 en
representación decimal, con un voltaje de referencia de 5V:
• El voltaje correspondiente a la entrada analógica del microcontrolador se
calcula como $(Valor_ADC / 1023) \times V_{ref}$. Entonces, $(150 / 1023)
\times 5.0 \approx \textbf{0.733 V}$.
• La temperatura asociada si se utiliza un sensor LM35 (10 mV/°C) es
$V_{sensor} / (10 \text{ mV/°C}) = 0.733 \text{ V} / 0.01 \text{ V/°C} = \
textbf{73.3 °C}$.
• Muestreo por Interrupción (Basado en el Ejemplo 2):
• Para una frecuencia de muestreo de 500 Hz, fclk_I/0 de 16 MHz y N = 1, el valor
que se debe cargar en el registro OCR1A es: $(16000000 / (1 \times 500)) - 1 =
32000 - 1 = \textbf{31999}$.
• En las líneas 57-58 del programa para el ADC, se configura el registro ADMUX para
seleccionar el voltaje de referencia AVCC y la entrada analógica ADC0.
• En las líneas 59-62 del código, se configuran los bits del registro ADCSRA para
habilitar el ADC (ADEN), NO iniciar una conversión (ADSC=0), habilitar el
autodisparo (ADATE), activar el habilitador local de interrupción (ADIE), y
establecer un factor de división del preescalador de 128 (ADPS2:ADPS0 = 111).
• En la línea 63 del código, se selecciona como fuente de disparo para el disparo
automático de la conversión la coincidencia con OCR1B del Timer 1.
• Se verifica si se han alcanzado las 200 muestras en la rutina de interrupción
ADC_ISR (líneas 79-80) mediante la instrucción CPI (Compare Immediate) para
comparar el valor del indice (que cuenta las muestras) con 200. Si no son iguales,
la instrucción BRNE (Branch if Not Equal) salta a SALIR_DE_ISR.

Sobre la Interfaz de Comunicación TWI (I2C)


• Terminología y Conexión Eléctrica:
• En el protocolo I2C, el Maestro es el dispositivo que inicia y controla la
comunicación. Los Esclavos son los dispositivos que responden a las solicitudes
del maestro.
• Las dos líneas a través de las cuales se realiza la comunicación I2C son SDA (Serial
Data), para la transmisión de datos, y SCL (Serial Clock), para la sincronización.
• Las resistencias pull-up son importantes en la conexión eléctrica de la interfaz I2C
porque el bus opera en modo de colector abierto. Estas resistencias aseguran que las
líneas SDA y SCL tengan un nivel alto cuando no están siendo activamente bajadas
por un dispositivo, permitiendo una comunicación confiable. Los valores típicos de
estas resistencias están entre 4.7 kΩ y 10 kΩ.
• Protocolo I2C:
• La secuencia de eventos durante una operación de escritura en el protocolo I2C es
la siguiente:
1. El maestro genera una condición de Inicio (START).
2. El maestro envía la dirección del esclavo deseado, seguida de un bit que
indica operación de escritura.
3. Si el esclavo reconoce su dirección, responde con un ACK (reconocimiento).
4. El maestro transmite la dirección del registro interno del esclavo al que
desea acceder.
5. El esclavo confirma la recepción de la dirección del registro con un ACK.
6. El maestro envía los datos, byte a byte.
7. El esclavo confirma la correcta recepción de cada byte mediante un ACK.
8. Finalmente, el maestro genera una condición de Parada (STOP) para
concluir la comunicación. (Aunque el STOP se menciona al final de la
lectura, es el cierre general de una transacción).
• Se necesita un START repetido en una operación de lectura porque, después de
enviar la dirección del registro interno a leer en modo escritura, el maestro necesita
cambiar el modo de comunicación a lectura para que el esclavo comience a enviar
los datos. Después de este START repetido, se envía la dirección del esclavo
acompañada del bit que indica una operación de lectura.
• El maestro indica el final de la lectura de datos desde el esclavo respondiendo con
un NACK (no reconocimiento) tras recibir el último byte, en lugar de un ACK.
• Registros del Módulo TWI:
• La función principal del registro TWBR es establecer la velocidad de
comunicación en el bus I2C. Su valor se relaciona con la frecuencia de la señal SCL
a través de la fórmula fSCL = fCPU_clk / (16 + 2(TWBR) × (Valor
del Pre-escalador)).
• En el registro TWCR:
1. El bit TWSTA habilita el envío de una condición de START.
2. El bit TWSTO habilita el envío de una condición de STOP.
• El registro TWSR proporciona información sobre el estado de la comunicación en
el bus I2C, con los bits TWS indicando códigos específicos de operación. Los bits
TWPS configuran el preescalador, afectando la velocidad de transferencia en
combinación con TWBR.
• El propósito del registro TWDR es actuar como buffer de datos para la
transmisión y recepción en la comunicación I2C. Los datos a enviar se cargan en
TWDR, y los datos recibidos desde el bus se almacenan en TWDR.
• La función del registro TWAR es definir la dirección del ATmega328P cuando
opera en modo esclavo en el bus I2C. El bit TWGCE habilita la capacidad de
responder a una dirección general (broadcast), permitiendo recibir comandos
dirigidos a múltiples dispositivos.
• Conversor Analógico-Digital I2C ADS1013:
• Las características principales del ADS1013 son: es un conversor analógico-digital
delta-sigma (ΔΣ) de 12 bits. Posee una referencia interna de 2.048V, lo que le
permite representar valores en un rango de ±2.048V. Su capacidad de muestreo es de
hasta 3300 muestras por segundo (SPS).
• Los valores posibles del registro puntero de dirección en el ADS1013 son: 0x00
para acceder al registro de conversión y 0x01 para acceder al registro de
configuración.
• Para obtener el valor correcto de 12 bits del registro de conversión del ADS1013,
considerando su formato de justificación a la izquierda (los 12 bits más significativos
contienen el resultado y los 4 menos significativos son ceros), es necesario desplazar
el contenido del registro 4 posiciones a la derecha.
• El bit OS (Operational Status) en el registro de configuración del ADS1013
controla el inicio de una conversión en modo de conversión única (escribiendo un 1)
y al leerlo, indica el estado del ADC: 0 significa que está realizando una conversión,
y 1 que está inactivo o la conversión ha finalizado.
• En el modelo ADS1013, los bits PGA (Programmable Gain Amplifier
configuration) (11 a 9) no tienen efecto sobre la operación del conversor, ya que el
rango de entrada permanece fijo en ±2.048 V, a diferencia de otros modelos de la
misma familia.
• La diferencia entre el modo de conversión única y el modo de conversión
continua del ADS1013 es que en el modo de conversión única, el ADC realiza una
conversión solo cuando es solicitado y luego entra en un estado de bajo consumo. En
el modo de conversión continua, el ADC realiza conversiones de manera
ininterrumpida y automática, actualizando el registro de conversión con cada nuevo
resultado. El modo predeterminado tras un reinicio es el de conversión única.
• Los bits DR[2:0] (Data Rate) determinan la velocidad de muestreo del ADC,
permitiendo seleccionar diferentes frecuencias de conversión. El valor
predeterminado de estos bits al encender el dispositivo es 100, que corresponde a
1600 SPS.
• Para configurar el ADS1013 en modo de conversión continua, el bit MODE en el
registro de configuración debe tener un valor de 0.
• Dada la fórmula Ventrada = 0.001 × Valor_ADC para el ADS1013, si el
Valor_ADC leído es 500, el voltaje de entrada correspondiente es $0.001 \times 500
= \textbf{0.5 V}$.
• En el Ejemplo 3, para una frecuencia de reloj de 16 MHz (FCPU) y una frecuencia
de la línea SCL de 100 kHz (SCLCLOCK), el valor obtenido para el registro TWBR
es: $((16000000 / 100000) – 16) / 2 = (160 – 16) / 2 = 144 / 2 = \textbf{72}$.
• En las funciones en C para el ADS1013 (archivo ads1013.h), la línea
muestra16 = muestra16 >> 4; (línea 22) significa que se está desplazando
el valor de muestra16 4 posiciones a la derecha. Esto es necesario porque el
registro de conversión del ADS1013 justifica los datos a la izquierda, y los 4 bits
menos significativos son ceros, por lo que este desplazamiento obtiene el valor
correcto de 12 bits de la conversión.
• Pantalla LCD de Texto I2C:
• El controlador de pantalla LCD de texto con interfaz I2C que se menciona para
facilitar su conexión con el ATmega328P es el AIP31068L.
• Dos instrucciones relevantes del controlador AIP31068L para la pantalla LCD son:
borrar pantalla (0x01) y configurar dirección de memoria DDRAM (que permite
posicionar el cursor de la pantalla). También se mencionan "retornar el cursor al
inicio", "configurar modo de entrada" y "control de pantalla encendida/apagada".
Sobre el Transmisor Receptor Asíncrono Síncrono Universal (USART)
• Fundamentos:
• Los dos modos fundamentales de operación del módulo USART son asíncrono y
síncrono. La diferencia principal es que en el modo asíncrono, la sincronización se
basa en un reloj interno y un esquema de muestreo, mientras que el modo síncrono
requiere una señal de reloj externa compartida para coordinar la transmisión.
• Los pines del ATmega328P dedicados a la transmisión y recepción de datos en el
USART son TX (Transmisión) y RX (Recepción). Específicamente, los pines son
TXD (PD1) y RXD (PD0).
• Para conectar eléctricamente dos dispositivos (como microcontroladores) para la
comunicación USART, el pin TXD del microcontrolador debe conectarse al RXD
del dispositivo remoto y viceversa.
• Protocolo y Trama de Datos:
• En modo asíncrono, los componentes de una trama de datos en el protocolo
USART son: un bit de inicio (start bit), seguido de 5 a 9 bits de datos,
opcionalmente un bit de paridad para detección de errores y, finalmente, uno o dos
bits de parada (stop bits).
• Registros del Módulo USART:
• Los cinco registros principales que controlan el módulo USART del ATmega328P
son: UCSR0A, UCSR0B, UCSR0C, UBRR0 y UDR0.
• En el registro UCSR0A, el bit UDRE0 indica que el registro de transmisión (UDR0)
está listo para recibir un nuevo dato.
• En el registro UCSR0B, los bits que habilitan el receptor y el transmisor del USART
son: RXEN0 (habilita el receptor) y TXEN0 (habilita el transmisor).
• En el registro UCSR0C se definen los siguientes parámetros de configuración del
protocolo USART: selección del modo de operación (asíncrono o síncrono),
configuración de paridad (par, impar o sin paridad), configuración del número
de bits de parada (1 o 2), y configuración de la longitud del dato transmitido y
recibido.
• El registro UBRR0 tiene la función principal de establecer la velocidad de
comunicación (baudiaje) en el módulo USART. Su valor define la relación entre la
frecuencia del reloj del sistema y la tasa de baudios deseada: un valor más alto en
UBRR0 reduce la velocidad de transmisión, mientras que un valor más bajo la
incrementa.
• Las dos fórmulas para calcular el Baudiaje en el módulo USART son:
• En modo asíncrono normal (U2X0 = 0): Baudiaje = fosc / (16 ×
(UBRR0 + 1)).
• En modo asíncrono de velocidad doble (U2X0 = 1): Baudiaje = fosc
/ (8 × (UBRR0 + 1)).
• El registro UDR0 funciona como buffer de datos para la transmisión y recepción
de información. Para enviar un dato, se escribe en UDR0, y cuando se recibe un dato,
este se almacena en UDR0 hasta que sea leído por el software.
• Cálculos y Ejemplos Prácticos (Basado en el Ejemplo 5):
• Según la fórmula utilizada en el programa uart.h (línea 9) para calcular ubrr en
modo asíncrono de velocidad doble (U2X0 = 1), si la frecuencia de reloj del
microcontrolador (F_CPU) es 16 MHz y se desea una velocidad de baudios de 9600:
ubrr = (F_CPU / 8 / baudrate) - 1 ubrr = (16000000 / 8 /
9600) - 1 ubrr = (2000000 / 9600) - 1 ubrr = 208.333 - 1
ubrr = 207.333 El valor entero de UBRR0 sería 207.
• En la simulación del Ejemplo 5 de comunicación bidireccional, el microcontrolador
ARD2 recibe el valor enviado por ARD1, y luego lo incrementa en 10 unidades
antes de retransmitirlo a ARD1.
• Si ARD1 envía el valor 15:
• ARD2 mostrará "Recibe: 15".
• ARD2 incrementa 15 en 10, entonces $15 + 10 = 25$. Por lo tanto, ARD2
retransmitirá el valor 25, y mostrará "Envia: 25".
Sobre la instrucción sbi

La instrucción sbi (Set Bit in I/O Register) es una directiva del lenguaje ensamblador para
microcontroladores AVR (como el ATmega328P) que se utiliza para establecer un bit específico en
un registro de E/S (Input/Output) a un valor de '1' [Información de nuestra conversación
anterior].
En el Ejemplo 2, la línea SBI TIFR1, TOV1 utiliza sbi. En este contexto, TIFR1 es el registro
de banderas de interrupción del Timer 1, y TOV1 es la bandera de desbordamiento (Overflow Flag)
del Timer 1. Generalmente, en los microcontroladores AVR, muchas banderas de interrupción se
borran escribiendo un '1' en el bit correspondiente. Por lo tanto, SBI TIFR1, TOV1 tiene el
efecto de limpiar (borrar) la bandera de desbordamiento del Timer 1 (TOV1), indicando que el
desbordamiento ha sido reconocido y procesado [Información de nuestra conversación anterior].
Es importante notar que la explicación detallada de sbi y su aplicación en la limpieza de banderas
es información proporcionada en nuestra conversación anterior y no se encuentra explícitamente
definida en las fuentes del documento [Información no contenida en las fuentes, sujeta a
verificación independiente].

También podría gustarte