Este documento presenta 4 problemas relacionados con sistemas embebidos y el microcontrolador AVR ATmega328P. El primer problema trata sobre el protocolo de comunicación I2C y cuales afirmaciones son correctas sobre su funcionamiento. El segundo problema trata sobre el diagrama de tiempo del protocolo RS-232 y cuales afirmaciones son ciertas. El tercer problema trata sobre los registros de configuración del microcontrolador y cuales afirmaciones son verdaderas. Finalmente, el cuarto problema trata sobre la arquitectura del microcontrolador y cuales afirmaciones sobre su mem
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, Mejoramiento (2020 PAO 1)
1. vasanza
SISTEMAS EMBEBIDOS
EVALUACIÓN DE MEJORAMIENTO
Fecha: 2020/09/23 PAO1 2020-2021
Nombre: ______________________________________________ Paralelo: __________
Problema #1: (15%)
En los siguientes diagramas de bloques funcionales, se muestra la escritura y lectura de datos usando
el protocolo de comunicación I2C (Inter-Integrated Circuit). Indicar cuales de las siguientes
afirmaciones son correctas:
a) [S] es la condición de Acknoledge (Ack/Nack Condition).
b) [A] es la condición de Acknoledge (Ack/Nack Condition).
c) [P] Condición de re-arranque (Start Condition).
d) [S] Condición de arranque (Start Condition).
e) [DATA] Transmisión de Datos (Data Transfer).
f) [R] Condición de parada (Stop Condition).
Respuesta:
2. vasanza
Problema #2: (15%)
La siguiente gráfica corresponde al diagrama de tiempo al transmitir un dato usando el protocolo de
comunicación RS-232. Indicar cuales de las siguientes afirmaciones son correctas:
a) En reposo TxD está a ‘1’.
b) Uno o dos bits de fin.
c) Dato de 7 u 8 bits.
d) Bit de inicio ‘0’.
e) Paridad Par / Paridad Impar / Sin bit de paridad.
Respuesta:
Problema #3: (15%)
¿Cuáles de las siguientes afirmaciones de los registros de configuración del AVR ATmega328P son
ciertos?
a) El registro DDRB (Port B Data Direction Register) permite configurar cada uno de los pines
del puerto B como entrada o salida. Con un valor de 1 se configura como salida el bit
correspondiente a cada pin, de igual forma, con un valor de 0 se configuran como entradas.
b) El registro DDRB (Port B Data Direction Register) permite configurar cada uno de los pines
del puerto B como entrada o salida. Con un valor de 1 se configura como entrada el bit
correspondiente a cada pin, de igual forma, con un valor de 0 se configuran como salidas.
c) El registro PORTC (Port C Data Register) permite leer el valor digital presente en los pines
correspondientes a los bits del puerto que han sido configurados como entradas previamente
con el registro DDRC.
3. vasanza
d) El registro PORTC (Port C Data Register) permite setear un valor digital en los pines
correspondientes a los bits del puerto que han sido configurados como salidas previamente con
el registro DDRC.
e) Los bits 7 y 6 (COM2A1, COM2A0) del registro TCCR2A (Timer/Counter Control Register
A) controlan el comportamiento del pin de comparación de salida (OC2A). Si se configuran
uno o ambos COM2A1: 0 bits, la salida OC2A anula la funcionalidad del puerto normal del pin
de E / S al que está conectado. Sin embargo, tenga en cuenta que el bit de registro de dirección
de datos (DDR) correspondiente al pin OC2A debe establecerse para habilitar el controlador de
salida.
f) Los bits 5 y 4 (COM2B1, COM2B0) del registro TCCR2A (Timer/Counter Control Register
A) controlan el comportamiento del pin de comparación de salida (OC2B). Si se configuran
uno o ambos COM2B1: 0 bits, la salida OC2B anula la funcionalidad normal del puerto del pin
de E / S al que está conectado. Sin embargo, tenga en cuenta que el bit de registro de dirección
de datos (DDR) correspondiente al pin OC2B debe establecerse para habilitar el controlador de
salida.
g) El temporizador / contador (TCNT0) y los registros de comparación de salida (OCR0A y
OCR0B) son registros de 10 bits.
h) El registro de comparación de salida con doble búfer (OCR2A y OCR2B) se compara con el
valor del temporizador / contador en todo momento. El generador de forma de onda puede
utilizar el resultado de la comparación para generar una salida PWM o de frecuencia variable
en los pines de comparación de salida (OC2A y OC2B).
Problema #4: (15%)
¿Cuáles de las siguientes afirmaciones referentes a la arquitectura del AVR ATmega328P son ciertas?
a) La SRAM es una memoria volátil con capacidad de 2K Bytes, de los cuales 0.5K Bytes son
usados por el bootloader.
b) La memoria EEPROM no volátil es de una capacidad de 1024 Bytes, además, el proceso de
escritura en esta memoria tarda 3,3 ms para ser completado y la cantidad máxima de ciclos de
escritura / borrado es de 100.000 ciclos.
c) La memoria FLASH no volátil de código de programa tiene una capacidad de 32K Bytes y
puede ser utilizada para almacenar datos de forma permanente, los mismos que pueden ser
leídos y modificados constantemente durante la ejecución de un programa. Además, para
obtener un dato almacenado en memoria FLASH es necesario incluir la librería
<avr/pgmspace.h> y utilizar la función pgm_read_byte con el puntero a la dirección en
memoria del dado almacenado previamente con la instrucción PROGMEM.
d) Este microcontrolador posee 6 entradas analógicas (ADC0-ADC5) distribuidos en los pines (0-
5) del Puerto C, respectivamente.
e) Para hacer uso de la memora SRAM de datos de forma dinámica, es suficiente crear un vector
con el tamaño máximo posible de Bytes para los datos que se desean almacenar.
f) Dela librería <EEPROM.h>, las funciones EEPROM.write(Address, Data) e
EEPROM.read(Address) permiten escribir y leer datos de tamaño de 1 Byte de direcciones
específicas en memoria EEPROM, por otro lado, las funciones EEPROM.put(Address, Data) e
EEPROM.get(Address, Data) permiten escribir y leer tipos de datos que requieren espacios
mayores a 1 Byte (Cadena de caracteres, flotas, etc.) en memoria EEPROM.
g) Para hacer uso de la memora SRAM de datos de forma estática, es necesario utilizar la función
malloc que nos permite reservar n espacios de memoria. Esta función retornara el puntero a
dirección de memoria donde escribiremos nuestros n datos, por otro lado, es importante que
liberemos el puntero (utilizando la función free) al dejar de usar los n espacios de memoria
previamente reservados, ya que de lo contrario esos espacios de memoria no podrá ser utilizado
posteriormente.