Examen Encastats
Examen Encastats
com
Elresoluciónes el cambio más pequeño en la señal analógica que resultará en un cambio en la salida
digital: ΔV = Vref /2norte(Vref = Rango de tensión de referencia, n = Número de bits en la salida digital)
Representa el error de cuantificación inherente a la conversión de la señal a forma digital.
SOC
Proceso:
1. MSB inicializado como 1
2. Convierta el valor digital a analógico usando DAC
3. Compara la suposición con la entrada analógica
Wikipedia
1
Características del subsistema ADC ATmega328P
2
ADLAR:
Resultado del ajuste izquierdo del ADC
Una conversión normal requiere 13 ciclos de reloj ADC. La primera conversión después de
encender el ADC (ADEN en ADCSRA está configurado) requiere 25 ciclos de reloj del ADC
para inicializar el circuito analógico.
3
ADCL y ADCH: el registro de datos ADC
4
Conexiones de alimentación del ADC
El ADC tiene un pin de voltaje de suministro analógico separado, AVCC. AVCC no debe diferir más de ±0,3 V de VCC. En el chip se
proporcionan voltajes de referencia internos de nominal 1,1 V o AVCC. La referencia de voltaje puede desacoplarse externamente
en el pin AREF mediante un capacitor para mejorar el rendimiento del ruido.
Opcionalmente, se puede conectar AVCC o un voltaje de referencia interno de 1,1 V al pin AREF escribiendo en los bits REFSn en
el registro ADMUX. Por tanto, la referencia de tensión interna puede desacoplarse mediante un condensador externo en el pin
AREF para mejorar la inmunidad al ruido.
El bit ADC de reducción de energía (PRADC) en el Registro de reducción de energía (PRR) debe deshabilitarse escribiendo un
cero lógico para habilitar el ADC.
5
* I/O REGISTER DEFINITIONS *
LDS / STS IN /OUT
UDR0 0xc6 SREG 0x3f
UBRR0L 0xc4 SPL 0x3d
UBRR0H 0xc5 SPH 0x3e
UCSR0C 0xc2 SPMCSR 0x37
UCSR0B 0xc1 MCUCR 0x35
UCSR0A 0xc0 MCUSR 0x34
TWAMR 0xbd SMCR 0x33
TWCR 0xbc ACSR 0x30
TWDR 0xbb SPDR 0x2e
TWAR 0xba SPSR 0x2d
TWSR 0xb9 SPCR 0x2c
TWBR 0xb8 GPIOR2 0x2b
ASSR 0xb6 GPIOR1 0x2a
OCR2B 0xb4 OCR0B 0x28
OCR2A 0xb3 OCR0A 0x27
TCNT2 0xb2 TCNT0 0x26
TCCR2B 0xb1 TCCR0B 0x25
TCCR2A 0xb0 TCCR0A 0x24
OCR1BL 0x8a GTCCR 0x23
OCR1BH 0x8b EEARH 0x22
OCR1AL 0x88 EEARL 0x21
OCR1AH 0x89 EEDR 0x20
ICR1L 0x86 EECR 0x1f
ICR1H 0x87 GPIOR0 0x1e
TCNT1L 0x84 EIMSK 0x1d
TCNT1H 0x85 EIFR 0x1c
TCCR1C 0x82 PCIFR 0x1b
TCCR1B 0x81 TIFR2 0x17
TCCR1A 0x80 TIFR1 0x16
DIDR1 0x7f TIFR0 0x15
DIDR0 0x7e PORTD 0x0b
ADMUX 0x7c DDRD 0x0a
ADCSRB 0x7b PIND 0x09
ADCSRA 0x7a PORTC 0x08
ADCH 0x79 DDRC 0x07
ADCL 0x78 PINC 0x06
TIMSK2 0x70 PORTB 0x05
TIMSK1 0x6f DDRB 0x04
TIMSK0 0x6e PINB 0x03
PCMSK1 0x6c
PCMSK2 0x6d
PCMSK0 0x6b
EICRA 0x69
PCICR 0x68
OSCCAL 0x66
PRR 0x64
CLKPR 0x61
WDTCSR 0x60
PORTS D’ENTRADA I SORTIDA DEL MICROCONTROLADOR AVR ATmega328P
Aquest uC té 3 ports d’entrada i sortida: PORTB, PORTC i PORTD. Els ports PORTB i PORTD son de 8 bits i el
PORTC és de7 bits. Cadascun dels ports té 3 registres associats:
NOM Descripció Funció
PORTx Port Escriptura en el port
DDRx Data Direction Register Defineix els pins com a entrada o sortida
PINx Input Pins Lectura del port
El bits dels registres configuren els pins de cada port. La següent taula indica els valors binaris i la funció
resultant de cada pin. (xn significa pin n del port x)
register bits →
DDRxn PORTxn PINxn
pin function↓
El registres situats en el rang d’adreces de E/S de 0x00 a 0x1F permeten treballar directament amb els seus
bits utilitzant les instruccions SBI i CBI. També es pot comprovar el valor individual dels bits amb les
instruccions SBIC i SBIS.
Instruction Description Operation Flags #Clocks
SBI P,b Set Bit in I/O Register P(b) ← 1 None 2
CBI P,b Clear Bit in I/O Register P(b) ← 0 None 2
SBIC P, b Skip if Bit in I/O Register P Cleared if (P(b)=0) PC ← PC + 2 or 3 None 1/2/3
SBIS P, b Skip if Bit in I/O Register P is Set if (P(b)=1) PC ← PC + 2 or 3 None 1/2/3
DDRx register
DDRx (Data Direction Register) configura la direcció de les dades en els pins dels ports. Quan escrivim un 0
en la posició n del registre DDRx el pin n actua com a entrada, mentre que si escrivim un 1 el pin corresponent
actua com a sortida.
Exemples :
- Fer que tots els pins del port B siguin entrades (DDRB 0b00000000):
LDI R20, 0b00000000
OUT DDRB,R20
- Fer que tots els pins del port B siguin sortides (DDRD 0b11111111)
LDI R20, 0b11111111
OUT DDRD,R20
- Fer els 4 LSB del port B sortides y els 4 MSB entrades (DDRB 0b00001111)
LDI R20, 0b00001111
OUT DDRB,R20
PINx register
PINx (Port IN) es fa servir per llegir les dades dels pins del port definits prèviament com a entrades. La lectura
dels pins definits com a sortides proporciona el valor escrit prèviament al port.
D’altra banda, quan s’escriu un 1 en una posició de bit del registre PINx definida com a sortida aquesta canvia
d’estat.
Tenim dos modes de entrada. Per una banda podem utilitzar els pins de entrada com a entrada tri-state (alta
impedancia) I per l'altra podem activar els resistors de pull up interns. Aquests modes es trien escrivint en
les posicions de bit corresponents a entrades en el registre PORTx.
Exemple:
- Llegir les dades del port B dins del registre 16.
LDI R20, 0X00 ; Set port B as input
OUT DDRB,R20 ;
IN R16,PINB ; Read contents of port B
PORTx register
El PORTx es fa servir amb dos propòsits.
1) Per a la sortida de dades, quan el port es configura com a sortida
En aquest cas s’han de posar a 1 els bits corresponents als pins de sortida en el registre DDRx. Ara es
poden escriure les dades de sortida en els pins respectius del PORTx.
Exemples:
1) Escriure el valor 0xFF al port B
//set all pins of port B as outputs Assembler:
DDRB = 0b11111111; LDI R20, 0b11111111 ; set all pins of port b as outputs
//write data on port B OUT DDRB,R20
PORTB = 0xFF; LDI R16, 0XFF ; write data on port
OUT PORTB,R1
Exemples :
• Definir el port B com a entrada amb els pull-ups habilitats i llegir les dades del port B
DDRB = 0x00; //make port B as input
PORTB = 0xFF; //enable all pull-ups
y = PINB; //read data from port B pins
• Definir els 4 LSB del port C com a sortida, i els 4 MSB com a entrades amb els pull-ups habilitats
DDRC = 0x0F; //lower nibble> output, higher nibble> input
PORTC = 0xF0; //lower nibble> set output pins to 0, //higher nibble> enable pull-ups
Traducido del inglés al español - www.onlinedoctranslator.com
El temporizador/contador 0 (TC0) es un módulo de temporizador/contador de 8 bits de uso general, con dos unidades de comparación de salida independientes y
compatibilidad con PWM. Permite una sincronización precisa de la ejecución del programa (gestión de eventos) y la generación de ondas.
clcT0
T0
0x00 (Puerto_D.4)
TCNT0
OC0A
Poco 7 6 5 4 3 2 1 0
2
Vectores de interrupción en ATmega328/P
Vector Programa
Fuente Definición de interrupciones
No DIRECCIÓN
1 0x0000 REINICIAR Pin externo, reinicio de encendido, reinicio de caída y reinicio del sistema de vigilancia
2 0x0002 INT0 Solicitud de interrupción externa 0
3 0x0004 INT1 Solicitud de interrupción externa 1
4 0x0006 PCINT0 Solicitud de interrupción de cambio de pin 0
7 6 5 4 3 2 1 0
FOC0A FOC0B ---- ---- WGM02 CS02 CS01 CS0
ClaroOC0A encendido ClaroOC0A en Comparar coincidencia. ClaroOC0A en Comparar coincidencia al realizar el conteo. Colocar
1 0
Comparar partido. ColocarOC0A en la parte inferior.Modo no inversor. OC0A en Comparar coincidencia cuando se realiza el conteo regresivo.
ColocarOC0A encendido ColocarOC0A en Comparar coincidencia. Claro ColocarOC0A en Comparar coincidencia al realizar el conteo. ClaroOC0A
1 1
Comparar partido. OC0A en la parte inferior.Modo inversor. en Comparar coincidencia cuando se realiza el conteo regresivo.
PalancaOC0B encendido
0 1 RESERVADO
Comparar partido.
ClaroOC0B encendido ClaroOC0B en Comparar coincidencia. ClaroOC0B en Comparar coincidencia al realizar el conteo. Colocar
1 0
Comparar partido. ColocarOC0B en la parte inferior.Modo no inversor. OC0B en Comparar coincidencia cuando se realiza el conteo regresivo.
ColocarOC0B encendido ColocarOC0B en Comparar coincidencia. Claro ColocarOC0B en Comparar coincidencia al realizar el conteo. ClaroOC0B
1 1
Comparar partido. OC0B en la parte inferior.Modo inversor. en Comparar coincidencia cuando se realiza el conteo regresivo. 5
TCCR0A Dirección de E/S: 0X24 (0X44)
Registros de control TC0:
Restablecer: 0x00
TCCR0A 7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
Modo WGM02 WGM01 WGM00 MODO TEMPORIZADOR ARRIBA Actualización de OCR0x en Bandera TOV activada
Es el modo de operación más simple: la dirección de conteo siempre es hacia arriba (incrementando) y no se realiza ningún borrado del contador.
El contador simplemente se sobrepasa cuando pasa su valor máximo de 8 bits (MAX=0xFF) y luego se reinicia desde abajo (0x00), el indicador de desbordamiento del temporizador/contador (TOV0) se
configurará en el mismo ciclo de reloj en el que se convierte el TCNT0. cero.
El indicador TOV0 se borra cuando se toma la interrupción de desbordamiento del temporizador. La resolución del temporizador se puede aumentar mediante software y se puede escribir un nuevo valor del contador en cualquier momento.
La unidad de comparación de salida se puede utilizar para generar interrupciones en un momento dado. No se recomienda utilizar Output Compare para generar formas de onda en
modo Normal, ya que esto ocupará demasiado tiempo de CPU.
6
Borrar temporizador en modo Comparar coincidencia (CTC), WGM0[2:0]=0x2
En Borrar temporizador en comparación, el registro OCR0A se utiliza para manipular la resolución del contador: el valor del contador (TCNT0) aumenta hasta que se produce una
comparación entre TCNT0 y OCR0A, y luego el contador (TCNT0) se borra a cero.
El OCR0A define el valor SUPERIOR del contador y, por tanto, también su resolución. Este modo permite un mayor control de la frecuencia de salida de comparación. También simplifica
el recuento de eventos externos.
OCR0A4
OCR0A1
OCR0A2
OCR0A3
TCNT0
COM0A[1:0]=1
OC0A (Palanca)
Se puede generar una interrupción cada vez que el valor del contador alcanza el valor SUPERIOR utilizando el indicador OCF0A. Si la interrupción está habilitada, la rutina del controlador
de interrupciones se puede usar para actualizar el valor SUPERIOR en OCR0A. Sin embargo, cambiar TOP a un valor cercano a BOTTOM cuando el contador se está ejecutando sin ningún
valor de preescalador o con un valor bajo se debe hacer con cuidado ya que el modo CTC no tiene la función de doble almacenamiento en búfer. Si el nuevo valor escrito en OCR0A es
menor que el valor actual de TCNT0, el contador perderá la comparación. Luego, el contador tendrá que contar hasta su valor máximo (0xFF) y comenzar en 0x00 antes de que pueda
ocurrir la comparación. En cuanto al modo de operación Normal, el indicador TOV0 se configura en el mismo ciclo del temporizador en el que el contador cuenta desde MAX hasta 0x00.
Para generar una salida de forma de onda en modo CTC, la salida OC0A se puede configurar para alternar su nivel lógico en cada comparación configurando los bits del modo de salida
de comparación en modo de alternancia (COM0A1:0 = 1). El valor OC0A no será visible en el pin del puerto a menos que la dirección de datos del pin esté configurada en salida. La forma
de onda generada tendrá una frecuencia máxima de fOC0=fclk_E/S/2 cuando OCR0A se establece en cero (0x00). La frecuencia de la forma de onda está definida por la siguiente ecuación:
7
Modo PWM rápido (WGM02:0 = 3 o 7)
El modo rápido de modulación de ancho de pulso o PWM rápido proporciona una opción de generación de formas de onda PWM de alta frecuencia. El rápido PWM tiene unoperación de
pendiente única. El contador cuenta desde ABAJO hasta ARRIBA y luego se reinicia desde ABAJO. (TOP = 0xFF cuando WGM2:0 = 3, y TOP = OCR0A cuando WGM2:0 = 7).
En el modo de comparación de salida no inversora, la comparación de salida (OC0A) se borra en la comparación entre TCNT0 y OCR0A, y se establece en ABAJO. En el modo de inversión de salida de
comparación, la salida se configura en comparación y se borra en la PARTE INFERIOR.
Debido a la operación de pendiente única, la frecuencia de operación del modo PWM rápido puede ser dos veces mayor que la del modo PWM de fase correcta que utiliza operación de pendiente doble. Esta
alta frecuencia hace que el modo rápido PWM sea muy adecuado para aplicaciones de regulación de potencia, rectificación y DAC. La alta frecuencia permite componentes externos de tamaño físicamente
pequeño (bobinas, condensadores) y, por lo tanto, reduce el costo total del sistema.
En el modo PWM rápido, el contador aumenta hasta que el valor del contador coincide con el valor SUPERIOR. Luego, el contador se borra en el siguiente ciclo del reloj del temporizador. El diagrama de tiempos
para el modo PWM rápido se muestra en la figura. El valor TCNT0 se encuentra en el diagrama de tiempos que se muestra como un histograma para ilustrar la operación de pendiente única. El diagrama incluye
salidas PWM invertidas y no invertidas. Las pequeñas marcas de líneas horizontales en las pendientes de TCNT0 representan coincidencias de comparación entre OCR0x y TCNT0.
ARRIBA
_/
=
ABAJO
× 256
norte= {1, 8, 64, 256 o 1024}
8
Modo PWM de fase correcta
El modo PWM de fase correcta (WGM02:0 = 1 o 5) proporciona una opción de generación de forma de onda PWM de fase correcta de alta resolución.
El modo PWM de fase correcta se basa en una operación de doble pendiente. El contador cuenta repetidamente de ABAJO a ARRIBA y luego de ARRIBA a ABAJO. TOP se define como 0xFF cuando WGM2:0 = 1 y
OCR0A cuando WGM2:0 = 5. En el modo de comparación de salida sin inversión, la comparación de salida (OC0x) se borra en la coincidencia de comparación entre TCNT0 y OCR0x durante el conteo ascendente
y se configura. en la comparación mientras se realiza el recuento regresivo. En el modo de inversión de comparación de salida, la operación se invierte.
La operación de doble pendiente tiene una frecuencia de operación máxima más baja que la operación de pendiente única. Sin embargo, debido a la característica simétrica de los modos PWM de doble
pendiente, estos modos se prefieren para aplicaciones de control de motores. En el modo PWM de fase correcta, el contador aumenta hasta que el valor del contador coincide con TOP. Cuando el contador llega
a TOP, cambia la dirección de conteo. El valor TCNT0 será igual a TOP durante un ciclo de reloj del temporizador. En la figura se muestra el diagrama de temporización para el modo PWM de fase correcta. El
valor TCNT0 se encuentra en el diagrama de tiempos que se muestra como un histograma para ilustrar la operación de doble pendiente. El diagrama incluye salidas PWM invertidas y no invertidas. Las pequeñas
marcas de líneas horizontales en las pendientes de TCNT0 representan coincidencias de comparación entre OCR0x y TCNT0.
ARRIBA
ABAJO
ARRIBA
_/
ABAJO =
× 512
norte= {1, 8, 64, 256 o 1024}