Fórum témák
» Több friss téma |
Cikkek » WILL-I V2.0 (Robotika és AVR kezdőknek) WILL-I V2.0 (Robotika és AVR kezdőknek)
Szerző: Fizikus, idő: Feb 5, 2010, Olvasva: 39972, Oldal olvasási idő: kb. 3 perc
Analóg és digitális jelekA mindennapi életben a minket körülvevő fizikai mennyiségek folytonosak. Ez alatt azt kell érteni, hogy általában két szélső érték között végtelen sok értéket vehetnek fel, és időben változhatnak is. Ahhoz hogy egy mennyiséget a mikrokontrollerrel mérni tudjunk, kell egy érzékelő, mely a mérendő jellel (jelen esetben a fényerősséggel vagy az érzékelt tárgyak távolságával) arányos elektromos jelet állít elő, amit már kezelni tud a mikrokontroller. Az ADC két referencia feszültségszint közötti feszültségtartományban mér. Az alsó a föld (GND) a felső peidg ARef, melynek maximális értéke 5V (AVcc) lehet. Tehát az ADC a 0 – ARef feszültségtartományba eső analóg bemeneti jelet alakítja át egy 0 – 1023 közötti digitális jellé (bináris számmá). Ha a bemenő feszültség 0V (GND), akkor a kimenet 0, ha a bemenő feszültség ARef-el egyezik meg, akkor a kimenet értéke 1023, ha pedig a bemenő feszültség pl. a referenciafeszültség fele, akkor a kimenet értéke ezzel arányosan 512 lesz. Az alábbi ábra ezt szemlélteti ahol ARef= 5V. Az AVR egy kifinomult elektronikus eszköz, amely csak bizonyos határértékek közé eső feszültséget tud mérni. A határértéken kívül eső feszültségek károsíthatják a mikrokontrollert. Az AVR adatlapján az szerepel, hogy az ADC lábon a mérendő bemeneti jelnek AGND (0V) és Vcc (5V) között kell lenni. Ha a referencia feszültségnél (a belső 2,56 vagy a külső max. 5V) nagyobb feszültséget akarunk mérni, akkor egy feszültségosztó kapcsoláson keresztül kell a bemeneti jelet a mikrovezérlőre kötni. Az ADC egy 10 bites számot eredményez (legyen mondjuk ez a szám pl. 693), amit nem lehet egyetlen bájtban tárolni ( egy bájt 8 bitből áll, ami 256 db értéket vehet fel (0-255-ig)), ezért minden ADC konverzió erédménye két bájtban (esetünkben az ADCH és ADCL adatregiszterekben) tárolódik el. Vegyük észre, hogy az egyik bájt két bitjét használjuk csak, a maradék 6 bitet nem. Az eredmény alapértelmezettként jobbra rendezett, de az ADMUX regiszter ADLAR bitjének megváltoztatásával balra rendezettre is átállítható (nemsokára meglátjuk hogy ez miért is lesz jó nekünk). Megpróbálom egy kicsit érthetőbben szemléltetni az alábbi ábrán is: Mivel az AVR-t magasszintű programozási nyelven (C) programozzuk, elég könnyű megfeledkezni arról, hogy egyes regiszterek mint pl az ADCH és ADCL ténylegesen hardverhez kapcsolódó regiszterek. Amikor az ADC-t használjuk, akkor a konverzió bármikor kész lehet (mint ahogy pl. egy megszakítás (interrupt) is bármikor bekövetkezhet), ezért ezeknek a hardverhez kötödő bájtoknak a használata némi körültekintést igényel, mert például ha a programunk éppen ADCH értékét olvassa ki, ADCL értékét pedig éppen ezzel egy időben frissíti az ADC, akkor könnyen előfordulhat hogy a kiolvasott ADCH-ADCL értékek nem ugyanahhoz, hanem két különböző méréshez tartoznak (ADCH az egyik mérésből származik, ADCL pedig már egy másik mérésből), ezáltal rossz mérési eredményt adva. Ha hamis értékekkel dolgozunk az zavart okozhat robotunk vezérlésében. Az AVR tervezése során hardveresen szüntették meg ezt a problémát. Mindig ADCL-t kell először kiolvasni, utána ADCH-t, hogy biztosítsuk hogy az ADC adatregisztereiben tárolt értékek mindíg ugyanahhoz a méréshez tartozzanak. Amikor ADCL értékét kiolvassuk, akkor az ADC adatregiszterekhez való hozzáférése blokkolva lesz (le lesz tiltva), és az ADC adatregiszterek addig nem frissítődnek újra amíg ADCH értékét is ki nem olvassuk. Ez azt jelenti, ha ADCL-értékét kiolvassuk és egy ADC konverzió elkészülne még mielőtt ADCH értékét is kiolvasnánk, akkor egyik regiszter értéke sem frissül, az ADC konverzió eredménye elvész. Példaul az alábbi utasítással az ADC konverzió eredményét kiolvassuk és a ADCmeres nevű változóba írjuk: Most térjünk arra vissza, hogy néhány esetben miért is lesz jó nekünk, ha balra rendezett az ADC mérés eredménye. Az előző ábrát megnézve látható, hogy ha az eredmény balra rendezett, és nekünk a 8 bites felbontás is megfelelő (0 – 255 közötti érték), akkor elegendő csak az ADCH regiszter értékét kiolvasni. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |