- Mikä on ADC (analoginen digitaalimuunnos)
- ADC AVR-mikrokontrollerissa Atmega16
- Tarvittavat komponentit
- Piirikaavio
- ADC-valvontarekisterien määrittäminen Atmega16: een
- Atmega16: n ohjelmointi ADC: lle
Yksi yleinen piirre, jota käytetään melkein kaikissa sulautetuissa sovelluksissa, on ADC-moduuli (analoginen digitaalimuunnin). Nämä analogisesta digitaaliseen muuntimet voivat lukea jännitettä analogisista antureista, kuten lämpötila-anturista, kallistustunnistimesta, virta-anturista, Flex-anturista jne. Tässä opetusohjelmassa opitaan, mikä on ADC ja miten ADC: tä käytetään Atmega16: ssa. Tämä opas sisältää pienen potentiometrin liittämisen Atmega16: n ADC-nastaan ja 8 LEDiä käytetään osoittamaan ADC-lähtöarvon vaihteleva jännite suhteessa ADC-tuloarvon muutokseen.
Aikaisemmin selitimme ADC: tä muissa mikrokontrollereissa:
- Kuinka käyttää ADC: tä ARM7 LPC2148: ssa - Analogisen jännitteen mittaaminen
- Kuinka käyttää ADC: tä STM32F103C8: ssa - Analogisen jännitteen mittaaminen
- Kuinka käyttää ADC: tä MSP430G2: ssa - Analogisen jännitteen mittaaminen
- Kuinka käyttää ADC: tä Arduino Unossa?
- Käyttämällä PIC-mikrokontrollerin ADC-moduulia MPLAB: n ja XC8: n kanssa
Mikä on ADC (analoginen digitaalimuunnos)
ADC on lyhenne sanoista Analog to Digital Converter. Elektroniikassa ADC on laite, joka muuntaa analogisen signaalin, kuten virran ja jännitteen, digitaaliseksi koodiksi (binäärimuodossa). Todellisessa maailmassa suurin osa signaaleista on analogisia ja mikä tahansa mikrokontrolleri tai mikroprosessori ymmärtää binäärisen tai digitaalisen kielen (0 tai 1). Joten, jotta mikro-ohjaimet ymmärtäisivät analogiset signaalit, meidän on muunnettava nämä analogiset signaalit digitaaliseen muotoon. ADC tekee tämän tarkalleen meille. Eri sovelluksiin on saatavana useita ADC-tyyppejä. Harvat suosittuja ADC: itä ovat flash, peräkkäinen likiarvo ja sigma-delta.
Halvin ADC - tyyppi on peräkkäinen approksimaatio ja tässä opetusohjelmassa käytetään peräkkäistä approksimaatiota ADC: tä. ADC: n peräkkäisen lähentämisen tyypissä generoidaan peräkkäin sarja digitaalisia koodeja, joista kukin vastaa kiinteää analogista tasoa. Sisäistä laskuria käytetään verrata muunnettavaan analogiseen signaaliin. Sukupolvi lopetetaan, kun analoginen taso muuttuu vain suuremmaksi kuin analoginen signaali. Digitaalikoodi, joka vastaa analogista tasoa, on haluttu analogisen signaalin digitaalinen esitys. Tämä viimeistelee pienen selityksemme peräkkäisestä lähentämisestä.
Jos haluat tutustua ADC: hen syvällisesti, voit viitata edelliseen ADC: n opetusohjelmaamme. ADC: itä on saatavana IC: n muodossa, ja myös mikro-ohjaimissa on nykyään sisäänrakennettu ADC. Tässä opetusohjelmassa käytämme Atmega16: n sisäänrakennettua ADC: tä. Keskustellaan Atmega16: n sisäänrakennetusta ADC: stä.
ADC AVR-mikrokontrollerissa Atmega16
Atmega16: lla on sisäänrakennettu 10-bittinen ja 8-kanavainen ADC. 10 bittiä vastaa sitä, että jos tulojännite on 0-5V, se jaetaan 10 bitin arvoon, ts. 1024 diskreettien analogiarvojen tasoon (2 10 = 1024). Nyt 8-kanavainen vastaa Atmega16: n 8 erillistä ADC-nastaa, joissa kukin nasta voi lukea analogisen jännitteen. Täydellinen PortA (GPIO33-GPIO40) on omistettu ADC-toimintaan. Oletuksena PORTA-nastat ovat yleisiä IO-nastoja, se tarkoittaa, että portin nastat ovat multipleksoituja. Voidaksemme käyttää näitä nastoja ADC-nastoina meidän on määritettävä tietyt rekisterit, jotka on omistettu ADC-ohjaukselle. Siksi rekistereitä kutsutaan ADC-ohjausrekistereiksi. Keskustelkaamme näiden rekisterien määrittämisestä sisäänrakennetun ADC: n toiminnan aloittamiseksi.
ADC-nastat Atmega16: ssa
Tarvittavat komponentit
- Atmega16-mikrokontrolleri-IC
- 16MHz kristalloskillaattori
- Kaksi 100nF-kondensaattoria
- Kaksi 22pF-kondensaattoria
- Paina nappia
- Neulalangat
- Leipälauta
- USBASP v2.0
- Led (kaikki värit)
Piirikaavio
ADC-valvontarekisterien määrittäminen Atmega16: een
1. ADMUX-rekisteri (ADC Multiplexer Selection Register) :
ADMUX-rekisteri on tarkoitettu ADC-kanavan valintaan ja vertailujännitteen valitsemiseen. Alla olevassa kuvassa on yleiskatsaus ADMUX-rekisteristä. Kuvaus selitetään alla.
- Bitti 0-4: kanavanvalintabitit.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
ADC-kanava valittu |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bitti 5: Sitä käytetään tuloksen säätämiseen oikealle tai vasemmalle.
ADLAR |
Kuvaus |
0 |
Säädä tulosta oikealla |
1 |
Säädä tulosta vasemmalle |
- Bitti 6-7: Niitä käytetään vertailujännitteen valitsemiseen ADC: lle.
VIITTEET1 |
VIITTEET0 |
Jännitteen vertailun valinta |
0 |
0 |
AREF, sisäinen Vref pois päältä |
0 |
1 |
AVcc ulkoisella kondensaattorilla AREF-nastassa |
1 |
0 |
Varattu |
1 |
1 |
Sisäinen 2,56 jännitteen vertailu ulkoisella kondensaattorilla AREF-nastassa |
Aloita nyt näiden rekisteribittien määritys ohjelmassa siten, että saamme sisäisen ADC: n lukeman ja tulostettavan PORTC: n kaikille nastoille.
Atmega16: n ohjelmointi ADC: lle
Täydellinen ohjelma on annettu alla. Polta ohjelma Atmega16: ssa JTAG- ja Atmel-studiolla ja vaihda ADC-arvoa kiertämällä potentiometriä. Tässä koodi selitetään rivi riviltä.
Aloita tekemällä yksi toiminto ADC-muunnetun arvon lukemiseksi. Sitten siirtää kanavan arvo kuin 'chnl' in ADC_read toiminto.
unsigned int ADC_read (unsigned char chnl)
Kanavan arvojen on oltava välillä 0–7, koska meillä on vain 8 ADC-kanavaa.
chnl = chnl & 0b00000111;
Kirjoittamalla '40' eli '01000000' ADMUX-rekisteriin valitsimme PORTA0: n ADC0: ksi, johon analogiatulo kytketään digitaalista muunnosta varten.
ADMUX = 0x40;
Nyt tämä vaihe käsittää ADC-muunnosprosessin, jossa kirjoittamalla ONE ADSC-bitille ADCSRA-rekisteriin aloitamme muunnoksen. Odota sen jälkeen, että ADIF-bitti palauttaa arvon, kun muunnos on valmis. Lopetamme muuntamisen kirjoittamalla '1' ADIF-bitille ADCSRA-rekisteriin. Kun muunnos on valmis, palauta ADC-arvo.
ADCSRA - = (1 <
Tässä valitaan sisäinen ADC-referenssijännite asettamalla REFS0-bitti. Tämän jälkeen ota ADC käyttöön ja valitse esisuodatin 128: ksi.
ADMUX = (1 <
Tallenna ADC-arvo ja lähetä se PORTC: lle. PORTC: ssa on kytketty 8 LEDiä, jotka näyttävät digitaalilähdön 8-bittisessä muodossa. Esittelemämme esimerkki muuttaa jännitettä 0 V - 5 V yhdellä 1 K potilla.
i = ADC_luku (0); PORTC = i;
Digitaalista yleismittaria käytetään näyttämään analoginen tulojännite ADC-nastassa ja 8 LEDiä käytetään vastaavan 8-bittisen ADC-lähdön näyttämiseen. Kierrä vain potentiometriä ja katso vastaava tulos sekä yleismittarista että hehkuvista LEDeistä.
Täydellinen koodi ja toimiva video on annettu alla.