Taula de continguts:
- Pas 1: què és un ADC?
- Pas 2: Com funciona l'ADC al microcontrolador AVR
- Pas 3: fórmula de conversió ADC
- Pas 4: Com configurar ADC a ATmega8?
- Pas 5: Selecció ADLAR
- Pas 6: Selecció ADCSRA
- Pas 7: si voleu obtenir el valor ADC, heu de fer una mica de feina que es mostra a continuació
- Pas 8: definiu el valor ADC
- Pas 9: configureu el pin del LED de sortida
- Pas 10: configureu el maquinari ADC
- Pas 11: activeu ADC
- Pas 12: inicieu conversions analògiques a digitals
- Pas 13: MENTRE PER SEMPRE
- Pas 14: al final, el codi és complet
Vídeo: Introducció a ADC al microcontrolador AVR - per a principiants: 14 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
En aquest tutorial sabreu tot el ADC del microcontrolador avr
Pas 1: què és un ADC?
Un ADC, o convertidor analògic a digital, permet convertir un voltatge analògic a un valor digital que pot utilitzar un microcontrolador. Hi ha moltes fonts de senyals analògics que es pot mesurar. Hi ha sensors analògics disponibles que mesuren la temperatura, la intensitat de la llum, la distància, la posició i la força, només per citar alguns.
Pas 2: Com funciona l'ADC al microcontrolador AVR
L'AVR ADC permet al microcontrolador AVR convertir voltatges analògics a valors digitals amb poques o cap part externa. L'ATmega8 presenta una aproximació successiva de 10 bits ADC. ATmega8 té ADC de 7 canals a PortC. L’ADC té un pin de tensió d’alimentació analògic independent, AVCC. AVCC no ha de diferir més de ± 0,3 V de VCC.. La referència de tensió es pot desconnectar externament al pin AREF. L’AVCC s’utilitza com a referència de tensió. L'ADC també es pot configurar perquè s'executi contínuament (el mode d'execució lliure) o només per fer una conversió.
Pas 3: fórmula de conversió ADC
On Vin és la tensió del pin d'entrada seleccionat i Vref la referència de tensió seleccionada
Pas 4: Com configurar ADC a ATmega8?
Els registres següents s’utilitzen per a la implementació d’ADC a ATmega8
Selecció del multiplexor ADC
Pas 5: Selecció ADLAR
ADC Left Adjust Result El bit ADLAR afecta la presentació del resultat de la conversió ADC al registre de dades ADC. Escriviu-ne un a ADLAR per ajustar el resultat a l'esquerra. En cas contrari, el resultat s’ajusta correctament
Quan es completa una conversió ADC, el resultat es troba a ADCH i ADCL Quan es llegeix ADCL, el registre de dades ADC no s'actualitza fins que no es llegeix ADCH. En conseqüència, si el resultat es deixa ajustat i no es requereix una precisió superior a 8 bits, n’hi ha prou amb llegir ADCH. En cas contrari, primer s’ha de llegir ADCL i després ADCH. Bits de selecció de canals analògics El valor d’aquests bits selecciona quines entrades analògiques estan connectades a l’ADC.
Pas 6: Selecció ADCSRA
• Bit 7 - ADEN: habilitació ADC Escriure aquest bit en un habilita l'ADC. Si l’escriviu a zero, l’ADC es desactivarà
• Bit 6: ADSC: ADC Inicia la conversió En mode de conversió única, escriviu aquest bit en un per iniciar cada conversió. En mode Free Running, escriviu aquest bit a un per iniciar la primera conversió.
• Bit 5 - ADFR: ADC Free Running Select Quan aquest bit està definit (un), l'ADC funciona en mode Free Running. En aquest mode, l'ADC mostra i actualitza els registres de dades contínuament. Si esborreu aquest bit (zero), es finalitzarà el mode d'execució lliure.
• Bit 4 - ADIF: senyal d'interrupció ADC Aquest bit s'estableix quan es completa una conversió ADC i s'actualitzen els registres de dades. La interrupció completa de conversió ADC s'executa si s'estableixen el bit ADIE i el bit I a SREG. ADIF és esborrat pel maquinari quan s’executa el vector de manipulació d’interrupcions corresponent. Alternativament, ADIF s’esborra escrivint-ne un de lògic a la bandera.
• Bit 3 - ADIE: habilitació de la interrupció ADC Quan aquest bit s’escriu en un i s’estableix el bit I en SREG, s’activa la interrupció completa de la conversió ADC.
• Bits 2: 0 - ADPS2: 0: Bits de selecció de precalificadors ADC Segons el full de dades, cal establir aquest precalar perquè la freqüència d'entrada ADC estigui entre 50 KHz i 200 KHz. El rellotge ADC es deriva del rellotge del sistema amb l'ajut d'ADPS2: 0 Aquests bits determinen el factor de divisió entre la freqüència XTAL i el rellotge d'entrada a l'ADC.
Pas 7: si voleu obtenir el valor ADC, heu de fer una mica de feina que es mostra a continuació
- Estableix el valor ADC
- Configureu el pin LED de sortida
- Configureu el maquinari ADC
- Activa ADC
- Inicieu conversions analògiques a digitals
- MENTRE PER SEMPRE
Si el valor ADC és superior al valor definit, activeu el LED ELSE Apagueu el LED
Pas 8: definiu el valor ADC
Codi: uint8_t Valor ADC = 128;
Pas 9: configureu el pin del LED de sortida
Codi: DDRB | = (1 << PB1);
Pas 10: configureu el maquinari ADC
Configureu el maquinari ADC
Això es fa mitjançant la configuració de bits als registres de control de l'ADC. En primer lloc, establim el prescalar per a l’ADC. Segons el full de dades, aquest prescalar s’ha d’establir de manera que la freqüència d’entrada ADC estigui entre 50 KHz i 200 KHz. El rellotge ADC es deriva del rellotge del sistema. Amb una freqüència del sistema d'1 MHz, un prescaler de 8 donarà lloc a una freqüència ADC de 125 kHz. La prescalació la defineixen els bits ADPS del registre ADCSRA. Segons el full de dades, els tres bits ADPS2: 0 s'han d'establir a 011 per obtenir el preescalador de 8.
Codi: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
A continuació, definim el voltatge de referència ADC. Això està controlat pels bits REFS del registre ADMUX. A continuació es defineix el voltatge de referència a AVCC.
Codi: ADMUX | = (1 << REFS0);
Per configurar el canal que passa pel multiplexor a l’ADC, cal configurar els bits MUX del registre ADMUX en conseqüència. Ja que estem fent servir ADC5 aquí
Codi: ADMUX & = 0xF0; ADMUX | = 5;
Per posar l'ADC en mode d'execució lliure, configureu el bit ADFR amb el nom adequat al registre ADCSRA:
Codi: ADCSRA | = (1 << ADFR);
Es farà un darrer canvi de configuració per facilitar la lectura del valor ADC. Tot i que l'ADC té una resolució de 10 bits, aquesta informació sovint no és necessària. Aquest valor de 10 bits es divideix en dos registres de 8 bits, ADCH i ADCL. Per defecte, els 8 bits més baixos del valor ADC es troben a ADCL, sent els dos superiors els dos bits més baixos d’ADCH. En establir el bit ADLAR al registre ADMUX, podem alinear a l'esquerra el valor ADC. Això posa els 8 bits més alts de la mesura al registre ADCH, amb la resta al registre ADCL. Si llegim el registre ADCH, obtindrem un valor de 8 bits que representa la nostra mesura de 0 a 5 volts com un número de 0 a 255. Bàsicament estem convertint la nostra mesura ADC de 10 bits en una de 8 bits. Aquí teniu el codi per configurar el bit ADLAR:
Codi:
ADMUX | = (1 << ADLAR); Això completa la configuració del maquinari ADC per a aquest exemple. Cal definir dos bits més abans que l’ADC comenci a prendre mesures.
Pas 11: activeu ADC
Per habilitar l'ADC, configureu el bit ADEN a ADCSRA:
Codi: ADCSRA | = (1 << ADEN);
Pas 12: inicieu conversions analògiques a digitals
Per iniciar les mesures ADC, cal configurar el bit ADSC a ADCSRA:
Codi: ADCSRA | = (1 << ADSC);
En aquest punt, l'ADC començaria a prendre mostres contínuament de la tensió presentada a l'ADC5. El codi fins a aquest punt seria així:
Pas 13: MENTRE PER SEMPRE
L'únic que queda per fer és provar el valor ADC i configurar els LED per mostrar una indicació alta / baixa. Com que la lectura ADC a ADCH té un valor màxim de 255, es va escollir un valor de prova per determinar si el voltatge era alt o baix. Una senzilla declaració IF / ELSE als bucles FOR ens permetrà encendre el LED correcte:
Codi
if (ADCH> ADCValue)
{
PORTB | = (1 << PB0); // Enceneu el LED
}
en cas contrari
{
PORTB & = ~ (1 << PB0); // Apagueu el LED
}
Pas 14: al final, el codi és complet
Codi:
#incloure
int main (buit)
{
uint8_t ADCValue = 128;
DDRB | = (1 << PB0); // Estableix el LED1 com a sortida
ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Estableix ADC prescalar a 8 - // 125 KHz freqüència de mostra 1 MHz
ADMUX | = (1 << REFS0); // Estableix la referència ADC a AVCC
ADMUX | = (1 << ADLAR); // A l'esquerra, ajusteu el resultat ADC per permetre una lectura fàcil de 8 bits
ADMUX & = 0xF0;
ADMUX | = 5; // Cal canviar els valors MUX per utilitzar ADC0
ADCSRA | = (1 << ADFR); // Estableix ADC en mode de funcionament lliure
ADCSRA | = (1 << ADEN); // Activa ADC
ADCSRA | = (1 << ADSC); // Inicieu conversions A2D mentre (1) // Bucle per sempre
{
if (ADCH> ADCValue)
{
PORTB | = (1 << PB0); // Enceneu el LED1
}
en cas contrari
{
PORTE & = ~ (1 << PB1); // Apagueu el LED1
}
}
retorn 0;
}
Publicar primer aquest tutorial Feu clic aquí
Recomanat:
Introducció a Bascom AVR: 5 passos
Introducció a Bascom AVR: aquest és el començament d’una sèrie per ensenyar-vos a programar el vostre microcontrolador AVR amb Bascom AVR. Per què ho faig. La majoria de les mostres de programes d’aquesta sèrie es poden fer amb Arduino. Alguns més fàcils i d'altres més difícils, però al final tots dos ho faran
Introducció al microcontrolador CloudX: 3 passos
Introducció al microcontrolador CloudX: el microcontrolador CloudX és un maquinari de codi obert i un software informàtic que us permet crear els vostres propis projectes interactius. CloudX és una petita placa de xips que permet als usuaris dir-li què han de fer abans de realitzar qualsevol acció, acceptant diferents k
Microcontrolador AVR. Sensor de distància ultrasònic. HC-SR04 a la pantalla LCD NOKIA 5110: 4 passos
Microcontrolador AVR. Sensor de distància per ultrasons. HC-SR04 a la pantalla LCD NOKIA 5110: Hola a tots! En aquesta secció faig un dispositiu electrònic senzill per detectar la distància i aquests paràmetres es mostren a la pantalla LCD NOKIA 5110. Els paràmetres es mostren com a diagrama i números. El dispositiu es basa en el microcontrolador AVR ATMEG
Microcontrolador AVR. Commuta els LED mitjançant un interruptor de botó. Comprovació de botons: 4 passos
Microcontrolador AVR. Commuta els LED mitjançant un interruptor de botó. Push Button Debouncing: En aquesta secció, aprendrem a fer el codi C del programa per a ATMega328PU per canviar l’estat dels tres LED segons l’entrada d’un interruptor de botó. A més, hem explorat una solució al problema de "Switch Bounce". Com de costum, estarem sense
Configuració de bits de fusibles del microcontrolador AVR. Creació i càrrega a la memòria flash del microcontrolador del programa LED intermitent: 5 passos
Configuració de bits de fusibles del microcontrolador AVR. Creació i càrrega a la memòria flash del microcontrolador del programa LED intermitent: en aquest cas, crearem un programa senzill en codi C i el gravarem a la memòria del microcontrolador. Escriurem el nostre propi programa i compilarem el fitxer hexadecimal, utilitzant Atmel Studio com a plataforma de desenvolupament integrada. Configurarem fusible bi