Tartalomjegyzék:

Az ADC bevezetése az AVR mikrokontrollerben - kezdőknek: 14 lépés
Az ADC bevezetése az AVR mikrokontrollerben - kezdőknek: 14 lépés

Videó: Az ADC bevezetése az AVR mikrokontrollerben - kezdőknek: 14 lépés

Videó: Az ADC bevezetése az AVR mikrokontrollerben - kezdőknek: 14 lépés
Videó: Digitális rendszer alapok és beágyazott AVR C programozás 2024, November
Anonim
Az ADC bevezetése az AVR mikrokontrollerben | kezdőknek
Az ADC bevezetése az AVR mikrokontrollerben | kezdőknek

Ebben az oktatóanyagban mindent tudni fog az ADC -ről az avr mikrokontrollerben

1. lépés: Mi az ADC?

Az ADC vagy analóg -digitális átalakító lehetővé teszi az analóg feszültség átalakítását digitális értékre, amelyet a mikrokontroller használhat. Sok analóg jelforrás létezik, amelyeket érdemes mérni. Vannak analóg érzékelők, amelyek mérik a hőmérsékletet, a fényintenzitást, a távolságot, a pozíciót és az erőt, hogy csak néhányat említsünk.

2. lépés: Az ADC működése az AVR-mikrokontrollerben

Az AVR ADC lehetővé teszi az AVR mikrokontroller számára, hogy az analóg feszültségeket digitális értékekké alakítsa, kevés külső alkatrész nélkül. Az ATmega8 10 bites egymást követő közelítő ADC-t tartalmaz. Az ATmega8 7 csatornás ADC-vel rendelkezik a PortC-n. Az ADC külön analóg tápfeszültséggel rendelkezik, AVCC. Az AVCC nem térhet el ± 0,3 V -nál nagyobb mértékben a VCC -től. A feszültségreferencia kívülről leválasztható az AREF tüskénél. Az AVCC -t használják feszültség -referenciaként. Az ADC beállítható úgy is, hogy folyamatosan fusson (szabadon futó mód), vagy csak egy konverziót végezzen.

3. lépés: ADC konverziós képlet

ADC konverziós képlet
ADC konverziós képlet

Ahol Vin a kiválasztott bemeneti tüske feszültsége és Vref a kiválasztott feszültségreferencia

4. lépés: Hogyan konfigurálható az ADC az ATmega8 -ban?

Hogyan kell beállítani az ADC -t az ATmega8 -ban?
Hogyan kell beállítani az ADC -t az ATmega8 -ban?

A következő regisztereket használják az ADC megvalósításához az ATmega8 -ban

ADC multiplexer kiválasztása

5. lépés: ADLAR kiválasztás

ADLAR válogatás
ADLAR válogatás
ADLAR válogatás
ADLAR válogatás

ADC balra állítás eredménye Az ADLAR bit befolyásolja az ADC konverziós eredmény megjelenítését az ADC adatregiszterben. Írjon egyet az ADLAR balra az eredmény beállításához. Ellenkező esetben az eredmény helyesen van beállítva

Amikor az ADC konverzió befejeződött, az eredmény megtalálható az ADCH és az ADCL között. ADCL olvasásakor az ADC adatregiszter nem frissül, amíg az ADCH ki nem olvasásra kerül. Következésképpen, ha az eredményt módosítva hagyjuk, és legfeljebb 8 bites pontosságra van szükség, akkor elegendő az ADCH olvasása. Ellenkező esetben először az ADCL -t kell olvasni, majd az ADCH -t. Analóg csatorna kiválasztó bitek Ezeknek a biteknek az értéke határozza meg, hogy mely analóg bemenetek csatlakoznak az ADC -hez.

6. lépés: ADCSRA kiválasztása

ADCSRA kiválasztása
ADCSRA kiválasztása
ADCSRA kiválasztása
ADCSRA kiválasztása

• 7. bit - ADEN: ADC Engedélyezés Ennek a bitnek az egyikbe írása engedélyezi az ADC -t. Ha nullára írja, az ADC kikapcsol

• 6. bit - ADSC: ADC Konverzió indítása Egyszeri átváltás módban írja be ezt a bitet az egyikbe minden konverzió elindításához. Szabad futás módban írja be ezt a bitet az egyikbe az első konverzió elindításához.

• 5. bit - ADFR: ADC szabadonfutás kiválasztása Ha ez a bit van beállítva (egy), az ADC szabadonfutó üzemmódban működik. Ebben az üzemmódban az ADC folyamatosan mintát vesz és frissíti az adatregisztereket. Ennek a bitnek (nulla) törlése megszünteti az ingyenes futás módot.

• 4. bit - ADIF: ADC megszakítás jelző Ez a bit akkor állítható be, amikor az ADC konverzió befejeződik és az adatregiszterek frissülnek. Az ADC Conversion Complete Interrupt akkor kerül végrehajtásra, ha az ADIE bit és az I-bit az SREG-ben be van állítva. Az ADIF -et hardver törli a megfelelő megszakításkezelő vektor végrehajtásakor. Alternatív megoldásként az ADIF törlésre kerül, ha logikus logót ír a zászlóba.

• 3. bit-ADIE: ADC megszakítás engedélyezése Ha ezt a bitet az egyikbe írják, és az SREG I-bitje be van állítva, akkor az ADC konverzió teljes megszakítása aktiválódik.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Az adatlap szerint ezt az előskálát úgy kell beállítani, hogy az ADC bemeneti frekvenciája 50 KHz és 200 KHz között legyen. Az ADC órajel a rendszerórából származik az ADPS2: 0 segítségével. Ezek a bitek határozzák meg az osztási tényezőt az XTAL frekvencia és az ADC bemeneti óra között.

7. lépés: Ha ADC értéket szeretne felvenni, akkor az alább felsorolt munkákra van szüksége

  • Állítsa be az ADC értékét
  • A kimeneti LED -tű konfigurálása
  • Konfigurálja az ADC hardvert
  • Engedélyezze az ADC -t
  • Indítsa el az analóg -digitális konverziókat
  • ÖRÖKRE

HA ADC érték magasabb, mint beállított érték, kapcsolja be a LED -et ELSE Kapcsolja ki a LED -et

8. lépés: Állítsa be az ADC értéket

Kód: uint8_t ADCValue = 128;

9. lépés: A kimeneti LED tű konfigurálása

Kód: DDRB | = (1 << PB1);

10. lépés: Konfigurálja az ADC hardvert

Konfigurálja az ADC hardvert

Ez az ADC vezérlőregisztereiben lévő bitek beállításával történik. Először állítsuk be az előskálát az ADC számára. Az adatlap szerint ezt az előskálát úgy kell beállítani, hogy az ADC bemeneti frekvenciája 50 KHz és 200 KHz között legyen. Az ADC óra a rendszerórából származik. 1MHz -es rendszerfrekvenciával a 8 -as előskálázó 125 Khz ADC frekvenciát eredményez. Az előskálázást az ADPS bitek adják meg az ADCSRA regiszterben. Az adatlap szerint mind a három ADPS2: 0 bitet 011 -re kell állítani, hogy megkapja a 8 előskálázót.

Kód: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Ezután állítsuk be az ADC referenciafeszültséget. Ezt az ADMUX regiszter REFS bitjei vezérlik. Az alábbiakban az AVCC referenciafeszültséget állítjuk be.

Kód: ADMUX | = (1 << REFS0);

A multiplexeren átvitt csatorna ADC -hez történő beállításához az ADMUX regiszterben található MUX biteket ennek megfelelően kell beállítani. Mivel itt az ADC5 -öt használjuk

Kód: ADMUX & = 0xF0; ADMUX | = 5;

Annak érdekében, hogy az ADC szabadon futó üzemmódba kerüljön, állítsa be a megfelelő nevű ADFR bitet az ADCSRA regiszterben:

Kód: ADCSRA | = (1 << ADFR);

Még egy utolsó beállítási változtatás történik, hogy egyszerűbb legyen az ADC -érték leolvasása. Bár az ADC felbontása 10 bit, ennyi információra gyakran nincs szükség. Ez a 10 bites érték két 8 bites regiszterre, ADCH és ADCL van felosztva. Alapértelmezés szerint az ADCL legalacsonyabb 8 bitje található az ADCL -ben, a felső kettő pedig az ADCH legalacsonyabb két bitje. Az ADLAR bit beállításával az ADMUX regiszterben balra igazíthatjuk az ADC értéket. Ez a mérés legmagasabb 8 bitjét az ADCH regiszterbe helyezi, a többit az ADCL regiszterbe. Ha ezután elolvassuk az ADCH regisztert, akkor egy 8 bites értéket kapunk, amely 0 és 5 voltos mérésünket 0 és 255 közötti számként képviseli. Alapvetően a 10 bites ADC mérésünket 8 bitesre változtatjuk. Íme a kód az ADLAR bit beállításához:

Kód:

ADMUX | = (1 << ADLAR); Ezzel befejeződik az ADC hardver beállítása ebben a példában. Még két bitet be kell állítani, mielőtt az ADC megkezdi a mérést.

11. lépés: Engedélyezze az ADC -t

Az ADC engedélyezéséhez állítsa be az ADEN bitet az ADCSRA -ban:

Kód: ADCSRA | = (1 << ADEN);

12. lépés: Indítsa el az analóg -digitális konverziókat

Az ADC mérések elindításához be kell állítani az ADCSRA ADSC bitjét:

Kód: ADCSRA | = (1 << ADSC);

Ezen a ponton az ADC folyamatosan elkezdi mintavételezni az ADC5 -n feltüntetett feszültséget. A kód eddig így nézne ki:

13. lépés: ÖRÖKRE

Már csak az ADC érték tesztelése és a LED -ek magas / alacsony jelzésének beállítása. Mivel az ADCH -ban az ADC -érték maximális értéke 255, a th tesztértékét választottuk annak megállapítására, hogy a feszültség magas vagy alacsony. Egy egyszerű IF/ELSE utasítás a FOR ciklusokban lehetővé teszi a megfelelő LED bekapcsolását:

Kód

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Kapcsolja be a LED -et

}

más

{

PORTB & = ~ (1 << PB0); // Kapcsolja ki a LED -et

}

14. lépés: A végén a teljes kód

Kód:

#befoglalni

int main (void)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // A LED1 beállítása kimenetnek

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Állítsa az ADC előskálát 8 - 125KHz mintavételi frekvenciára 1 MHz -re

ADMUX | = (1 << REFS0); // Állítsa az ADC hivatkozást AVCC értékre

ADMUX | = (1 << ADLAR); // Az ADC bal oldali beállítása lehetővé teszi a könnyű 8 bites olvasást

ADMUX & = 0xF0;

ADMUX | = 5; // A MUX értékeket módosítani kellett az ADC0 használatához

ADCSRA | = (1 << ADFR); // Állítsa az ADC-t szabadon futó üzemmódba

ADCSRA | = (1 << ADEN); // ADC engedélyezése

ADCSRA | = (1 << ADSC); // Indítsa el az A2D konverziókat, miközben (1) // Loop Forever

{

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Kapcsolja be a LED1 -et

}

más

{

PORTE & = ~ (1 << PB1); // A LED1 kikapcsolása

}

}

visszatérés 0;

}

Először tegye közzé ezt az oktatóanyagot Kattintson ide

Ajánlott: