1
MICROCONTROLADORES
M. C. Felipe Santiago Espinosa
Mayo de 2019
2
Recursos disponibles
• Los AVR tienen dos recursos para el manejo de información analógica:
▫ Un Convertidor Analógico Digital (ADC) de 10 bits que genera un número
proporcional a la amplitud de la señal analógica de la entrada.
▫ Un Comparador Analógico (AC) mediante el cual se evalúan dos entradas
analógicas (AIN0 y AIN1) y en un bit se indica si AIN0 es mayor que AIN1.
• En este sección se revisan ambos recursos.
• El Hardware contiene un multiplexor analógico compartido por ambos
recursos.
• El MUX hace posible evaluar más señales analógicas.
3
MICROCONTROLADORES
M. C. Felipe Santiago Espinosa
Mayo de 2019
4
Conversión de señales.
• Un ADC (convertidor Analógico-Digital) recibe un valor analógico, a
partir del cual, genera un valor digital (un número):
00110001
00110010
00110011
ADC ……
00001011
• Un DAC (convertidor Digital-Analógico) recibe un número (valor
digital) con el cual generará un nivel de voltaje (analógico) :
00110001
00110010
DAC
00110011
……
00001011
5
Señal analógica
• Una señal analógica toma un continuo de valores a lo largo del
tiempo:
6
Muestreo
• Para digitalizar una señal analógica se deben tomar muestras a
intervalos periódicos de tiempo, conocido como Periodo de
Muestreo:
7
Cuantificación
• Cada muestra se asocia con un elemento de un conjunto de valores
discretos. El tamaño del conjunto depende del número de bits
utilizados (Resolución del ADC):
8
Señal Digital
9
Convertidor analógico a digital
0000
0001
0001
0100
0111
1100
ADC 1101
1110
1111
1111
……
0011
0011
……
10
Convertidor digital a analógico
0000
0001
0001
0100
0111
1100
1101 DAC
1110
1111
1111
……
0011
0011
……
11
Conversión y recuperación de la
información
• El proceso de conversión y
recuperación de la información
requiere que:
▫ La resolución del ADC proporcione
el número de combinaciones
suficiente, de acuerdo con lo que se
va a representar.
▫ La frecuencia de muestreo debe ser
por lo menos el doble de la
frecuencia de la señal analógica.
12
DAC con base en una Red R – 2R
R R R
VREF I3 = I2 = I1 = I0 =
IREF=
VREF
2R 2R 2R 2R 2R
0 1 0 1 0 1 0 1
Vo
13
ADC de Aproximaciones
Sucesivas
Un modo de carrera libre se consigue cuando el FIN se conecta con el
INICIO.
14
ADCs en los AVRs
• El ATMega328 incluye un ADC de aproximaciones sucesivas de 10 bits,
el resultado de la conversión queda en dos registros I/O: ADCH y ADCL
(en Lenguaje C se puede usar ADCW).
• El ADC está conectado a un multiplexor analógico que permite
seleccionar 1 de 8 canales externos (ADCo, ADC1, ADC2, ….). Aunque el
ATMega328 con encapsulado PDIP sólo tiene 6 canales.
• Para alcanzar la resolución máxima, el ADC debe trabajar con una
frecuencia entre 50 y 200 kHz, la cual se genera con un pre-escalador
que tiene como base a la frecuencia del microcontrolador.
• La primera conversión requiere de 25 ciclos de reloj porque se inicializa
la circuitería analógica. Las conversiones sucesivas sólo utilizan 13
ciclos.
15
ADC en el ATMega328P
• La conversión inicia al ajustar al bit ADSC (Start Conversion), su
final se indica con la bandera ADIF (Interrupt Flag); la badera
puede sondearse o producir una interrupción, si se ajustó al bit ADIE
(Interrupt Enable). Todos estos bits están en el registro ADCSRA.
• Se puede configurar el modo de «Carrera libre» y que la conversión
sea disparada por otro recurso del microcontrolador.
16
Registros para el manejo del ADC
Registro ADMUX. Registro de selección del multiplexor del ADC
REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0
Bits 7 y 6 – REFS[1:0]: Reference Selection bits. Selección del voltaje
de referencia. El ADC puede convertir voltajes de 0 hasta VREF – 1 LSB.
REFS1 REFS0
REFS1 REFS0 Voltaje de referencia
0 0 Voltaje Externo en AREF
0 1 AVCC, con un Capacitor externo de
AVCC
AREF a tierra
1 0 Reservado
Ref. 1 1 Interno (1.1 V), con un Capacitor
Interna externo de AREF a tierra
(1.1 v)
AREF VREF
17
Bit 5 – ADLAR: ADC Left Adjust Result. Ajusta el resultado del ADC a la
izquierda (útil si sólo se empleará una resolución de 8 bits).
Si ADLAR = 0 : Si ADLAR = 1
D9 D8 ADCH D9 D8 D7 D6 D5 D4 D3 D2
D7 D6 D5 D4 D3 D2 D1 D0 ADCL D1 D0
Bits 3 al 0 – MUX[3:0]. Seleccionan el canal o entrada analógica.
SEL Mux [ 3 : 0 ] Entrada
0000 ADC0
GND 0001 ADC1
Voltaje .... ....
interno
ADC7 0110 ADC6
Entrada
ADC6 analógica 0111 ADC7
1000 Sensor de Temperatura
ADC1
.... Sin uso
ADC0
1110 Voltaje interno (1.1 V)
1111 0V
18
Conexión de AVcc
Normal Con inmunidad al ruido
19
Registro ADCSRA. Registro A de Control y Estado del ADC.
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
Bit 7 – ADEN: ADC Enable. Habilita el ADC para que pueda ser usado. Con
0 el ADC está apagado.
Bit 6 – ADSC: ADC Start Conversion. Marca el inicio de la conversión al
escribirle 1. Se limpia automáticamente por hardware. La primera conversión
requiere 25 ciclos de reloj, las siguientes 13.
Bit 5 – ADATE : ADC Auto Trigger Enable. Habilitan el modo de carrera
libre o un auto disparo del ADC, es decir, el ADC inica una conversión cuando
ha ocurrido un evento generado por otro recurso, el evento se configura con los
bits ADTS del registro ADCSRB.
Bit 4 – ADIF: ADC Interrupt Flag. Bandera que se pone en alto indicando
el fin de una conversión, puede generar una interrupción.
20
Bit 3 – ADIE: ADC Interrupt Enable. Habilita la interrupción por fin de
conversión analógica-digital.
Bits 2, 1 y 0 - ADPS[2-0]: ADC Prescaler Select Bits. El ADC requiere
de una señal de reloj entre 50 kHz y 200 kHz para obtener una máxima
resolución. Con estos bits se establece una proporción entre el reloj del sistema
y el reloj para el ADC:
ADPS [ 2 : 0 ] Factor de División
RE SE T
ADEN
PREESCALADOR 000 2
START
DE 7 BITS
CLK
001 2
010 4
PCK/128
PCK/16
PCK/32
PCK/64
PCK/2
PCK/4
PCK/8
011 8
100 16
ADPS[2:0] 101 32
110 64
CLK del ADC 111 128
21
Registro ADCSRB. Registro B de Control y Estado del ADC.
ACME ADTS2 ADTS1 ADTS0
Bits 7 al 3: No están relacionados con el ADC.
Bits 2, 1 y 0 – ADTS[2:0] ADC Auto Trigger Source. Definen el modo
de carrera libre o el evento que disparará el inicio de conversión:
ADTS [ 2 : 0 ] Fuente de disparo
000 Modo de Carrera Libre
001 Comparador Analógico
010 Interrupción Externa 0
011 Coincidencia por comparación, timer/counter 1 A
100 Sobreflujo del timer/counter 0
101 Coincidencia por comparación, timer/counter 1 B
110 Sobreflujo del timer/counter 1
111 Evento de Captura, timer/counter 1
22
Registro DIDR0. Registro 0 para
deshabilitar la entrada digital.
ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D
Bits 7 y 6: No están implementados.
Bits 5 al 0 – ADCxD. Deshabilitan la entrada digital. Las terminales
digitales incluyen un buffer de entrada, con un 1 en estos bits el buffer queda
inhabilitado y por lo tanto, una entrada digital siempre se leería con un 0.
Se sugiere escribir un 1 en los bits que correspondan con las entradas
analógicas a usar para reducir el consumo de potencia.
23
Sensor de temperatura
• El ATMega328 tiene un sensor interno referido a tierra, acoplado al
canal 8 del ACD.
• En los bits MUX3...0 (del registro ADCSCRA) debe escribirse
"1000" y seleccionar el voltaje interno de 1.1V como referencia.
• La sensibilidad es aproximadamente de 1 mV/°C y la aproximación
a la temperatura medida es de +/- 10°C.
• El voltaje medido tiene una relación lineal con la temperatura, en la
tabla se muestran valores típicos de la relación:
Temperatura /◦C - 45 ◦C + 25 ◦C + 85 ◦C
Voltaje / mV 242 mV 314 mV 380 mV
24
• Por los procesos de fabricación, la salida de voltaje para una misma
temperatura puede variar entre dispositivos.
• Una relación para compensar por software estas diferencias es:
T = { [(ADCH << 8) | ADCL] - TOS} / k
• k es un coeficiente constante y TOS es un offset que se calcula
durante el proceso de fabricación y su valor se almacena en la
EEPROM del dispositivo.
25
Pregunta….
• ¿Cuál es la frecuencia máxima de la señal de
entrada analógica?
▫ Suponiendo que el MCU opera a 1 MHz y el ADC
estará dedicado sólo a uno de los canales.
26
Ejercicios
1. Desarrolle un sistema con base en un ATMega328, que mantenga la
temperatura de una habitación en el rango entre 18 y 23 °C, aplicando la
siguiente idea: Si la temperatura es mayor a 23 °C, el sistema deberá
activar un ventilador, si es menor a 18 °C, el sistema activará un
calefactor. Para temperaturas entre 18 y 23 °C no se activará alguna carga.
27
2. Genere una señal PWM de 10 bits en modo no invertido, en donde el ciclo
de trabajo sea proporcional al voltaje obtenido de un potenciómetro
conectado al canal 0 del ADC, como se muestra en la figura.
+ 5V
100 K ADC0 OC1A
28
3. Realice un termómetro digital con un rango de 0 a 50 0 C, con salida
a un LCD y actualizándose cada medio segundo.
Haga uso de la biblioteca con las funciones básicas para el manejo
del LCD, disponibles en la página web del curso.
29
Problema para PUNTO EXTRA en el Parcial. Monitoree 4 señales analógicas y
muestre su valor en un LCD.
Utilicé sólo 8 bits del ADC (0 a 255) y actualice la pantalla sólo si ha ocurrido
un cambio en cualquiera de las entradas, sólo se escribirá el dato que cambió.
30
MICROCONTROLADORES
M. C. Felipe Santiago Espinosa
Mayo de 2019
31
Comparador analógico (AC)
El comparador analógico es un recurso que indica la relación existente entre
dos señales analógicas externas.
Útil para aplicaciones en donde no precisa conocer el valor digital de una
señal analógica, sino que es suficiente con determinar si es mayor o menor
que una referencia.
Se basa en un amplificador operacional en lazo abierto, el cual se va a saturar
cuando una entrada analógica (AIN0) sea mayor que otra (AIN1), poniendo
en alto al bit ACO (ACO, Analog Comparator Output).
Por medio de interruptores analógicos es posible remplazar la entrada AIN0
por una referencia interna cuyo valor típico es de 1.1 V.
La entrada AIN1 puede remplazarse por la salida del multiplexor del ADC,
con ello es posible comparar más de una señal analógica con la misma
referencia. Si el AC utiliza al MUX, el ADC debe estar inhabilitado.
32
Comparador analógico (AC)
Referencia VCC
interna
ACBG ACD
ACIE
+ IRQ de
AIN0 Selección de comparador
- Interrupción analógico
AIN1 ACI
ACIS1 ACIS0
ACIC
ACO
ACME Dispara captura
ADEN de entrada del
temporizador 1
Salida del
multiplexor
del ADC
33
Cuando el voltaje en la terminal AIN0 es más alto que el voltaje en AIN1, el
bit ACO se pone en alto. En otro caso, está en bajo.
La salida del comparador se puede vincular con el temporizador 1 para
generar un evento de captura de entrada.
Se puede configurar para generar una interrupción, contando con diferentes
alternativas seleccionables con ACIS1 y ACIS0.
ACIS1 ACIS0 Modo
0 0 Interrupción por conmutación
0 1 Reservado
1 0 Flanco de bajada en AC0
1 1 Flanco de subida en AC0
34
La entrada AIN0 se puede reemplazar por un valor constante (VBG). El bit
ACBG permite hacer esta selección.
Mínimo Típico Máximo
Referencia Interna (VBG) 1.0 1.1 1.2
La entrada AIN1 se puede reemplazar por una de las entradas para
conversión analógico-digital.
ADC0
ADC1
ADC
ADC7 Salida
del MUX
Para ello se requiere que:
• El ADC esté deshabilitado (ADEN = 0).
• El MUX se habilite para ser usado por el comparador (ACME = 1).
35
Registro ACSR. Registro Control y Estado del AC.
ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
Bit 7 – ACD: AC Disable. Deshabilita el AC para minimizar el consumo de
energía (con 0 el AC está activo). Si el AC está inactivo y se va a activar
nuevamente, se sugiere deshabilitar su interrupción porque podría generar un
evento.
Bit 6 – ACBG: AC Bandgap Select. Al ponerlo en alto, la entrada en la
terminal positiva proviene de un voltaje de referencia interno (VBG).
Bit 5 – ACO: AC Output. La salida del AC se sincroniza y se muestra en este
bit, la sincronización toma 1 ó 2 ciclos de reloj.
Bit 4 – ACI: AC Interrupt Flag. Bandera para generar interrupción. Su
activación está en función del resultado del comparador y de los bits ACIS1 y
ACIS0.
36
Bit 3 – ACIE: AC Interrupt Enable. Habilitador de interrupciones del
comparador analógico.
Bit 2 – ACIC: AC Input Capture Enable. Habilita la función de captura de
entrada del temporizador 1. La salida del comparador se conecta al hardware
de captura, utilizando sus recursos de selección de flanco y cancelación de
ruido. Para que el comparador dispare la interrupción por captura de entrada,
el bit TCIE del registro TIMSK debe estar en alto.
Bits 1 y 0 – ACIS[1:0]: AC Interrupt Mode Select. Seleccionan el modo
para la interrupción. Al modificar estos bits, se sugiere inhabilitar la
interrupción por que se podrían generar eventos no deseados.
ACIS1 ACIS0 Modo
0 0 Interrupción por conmutación
0 1 Reservado
1 0 Flanco de bajada en AC0
1 1 Flanco de subida en AC0
37
El bit ACME se encuentra en el Registro ADCSRB (Registro B de Control y
Estado del ADC).
ACME ADTS2 ADTS1 ADTS0
Bits ACME (AC Multiplexer Enable). Al ser puesto en alto, la entrada
negativa del comparador proviene de la salida del multiplexor del ADC.
El ADC debe estar inhabilitado y el canal de entrada analógica se selecciona
con los bis MUX[3:0] del registro ADMUX.
Si el ADC se habilita, aunque ACME tenga 1 la entrada será proporcionada en
la terminal AIN1.
38
Registro DIDR1. Registro 1 para
deshabilitar la entrada digital.
AIN1D AIN0D
Bits 7 al 2: No están implementados.
Bits 1 y 0 – AIN1D y AIN2D. Deshabilitan la entrada digital. Las terminales
digitales incluyen un buffer de entrada, con un 1 en estos bits el buffer queda
inhabilitado y por lo tanto, una entrada digital siempre se leería con un 0.
Se sugiere escribir un 1 en estos si se usa el comparador analógico para reducir
el consumo de potencia.
39
Ejercicios:
1. Realizar un sistema que encienda un ventilador cuando la temperatura esté
por encima de 20 ºC.
40
Ejercicios:
2. Diseñe el control de un móvil seguidor de línea, compuesto por 2 llantas
traseras manejadas por motores independientes y una llanta de libre
movimiento al frente. El móvil seguirá una línea blanca en una superficie
con fondo negro, utilizando el comparador analógico y 2 canales del ADC
de un ATMega328. Suponga que los sensores se han acondicionado de
manera que cuando se encuentran en una zona oscura presentan un voltaje
mayor a 2.5 V y en una zona clara su voltaje está por debajo de ese nivel.
Los sensores se ubicarán al frente del móvil, uno en cada extremo, dejando
la línea blanca al centro.
El estado de los sensores definirá el encendido de los motores. Si ambos
detectan una zona oscura, los 2 motores estarán encendidos (móvil en línea
recta). Cuando un sensor detecte una zona clara (debido a una curva), el
motor del mismo lado será apagado ocasionando un giro en el móvil. Se
esperaría que en ningún momento los 2 sensores detecten una zona clara,
sin embargo, si eso sucede, también se encenderán los 2 motores buscando
que el móvil abandone esta situación no esperada.
41
SENSOR
QRD1114
42
3. Respecto a la figura, las entradas Vin, Vref1 y Vref2 son señales analógicas y
siempre ocurre que Vref1 < Vref2. De acuerdo con los resultados que
proporcione el comparador analógico, utilizando el temporizador 1, genere
una señal PWM a una frecuencia aproximada de 100 Hz, con un ciclo de
trabajo de:
• 10 %: si Vin es menor a Vref1
• 50 %: si Vin está entre Vref1 y Vref2
• 90 %: si Vin es mayor a Vref2
43
4. Un fotoresistor iluminado con luz solar presenta una resistencia con un
valor de 300 Ω, sin iluminación la resistencia está por encima de 20 kΩ.
Desarrolle un circuito que encienda una lámpara si la resistencia en el
sensor es mayor a 15 k Ω y la apague cuando la resistencia esté por debajo
de 2 kΩ. Se introduce una curva de histéresis para evitar oscilaciones.
El fotoresistor debe acondicionarse para que entregue un voltaje
proporcional a la resistencia.
Nivel Resistencia
Oscuro 1 20000
Nivel 1 2 15000
Nivel 2 3 8000
Nivel 3 4 6000
Nivel 4 5 3000
Nivel 5 6 2000
Nivel 6 7 1500
Nivel 7 8 600
Nivel 8 9 450
Nivel 9 10 300