Taula de continguts:

Introducció a ADC al microcontrolador AVR - per a principiants: 14 passos
Introducció a ADC al microcontrolador AVR - per a principiants: 14 passos

Vídeo: Introducció a ADC al microcontrolador AVR - per a principiants: 14 passos

Vídeo: Introducció a ADC al microcontrolador AVR - per a principiants: 14 passos
Vídeo: 8. Arduino для производства! Руководство для начинающих — Среда программирования AVR (WinAVR) Установка WinAVR 2024, De novembre
Anonim
Introducció a ADC al microcontrolador AVR | per a principiants
Introducció a ADC al microcontrolador AVR | per a principiants

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

Fórmula de conversió ADC
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?

Com configurar ADC a ATmega8?
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

Selecció ADLAR
Selecció ADLAR
Selecció ADLAR
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

Selecció ADCSRA
Selecció ADCSRA
Selecció ADCSRA
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: