Reklama

ATtiny24 analogový komparátor – 1. Díl Teoretický popis

Úvod

Analogový komparátor je součástí všech Atmelů a může zastat slušnou práci. Zvu vás na prohlídku jeho možností. Vypořádáme se s problémy a v závěru nabídnu několik praktických příkladů.

Co v tomto článku naleznete? Popis co je analogový komparátor, co nám nabízí ATtiny24, jak se komparátor ovládá a také uvedu poznámku ke vstupnímu bufferu.

Co je analogový komparátor?

Co je a k čemu slouží komparátor, byste měli už vědět. Pokud nemáte ani představu, bylo by pro vás asi vhodnější četbu na chvíli přerušit a vydat se do vln internetu najít odpovědi. Hodně ve stručnosti můžeme říct, že je to součástka porovnávající dvě napětí na svých vstupech. Její výstup nabývá dvou logických hodnot, podle toho, které ze vstupních napětí je větší. Pokud už budete pátrat po informacích, věnujte alespoň okrajově trochu pozornosti vstupnímu offsetu a hysterezi komparátorů. Druhý pojem se v článku určitě objeví.
Předeslal bych, že komparátor se se svými možnostmi částečně překrývá s A/D převodníkem. Takže existuje široká paleta úloh, která jde řešit buď komparátorem, nebo A/D převodníkem. Předveďme si to na triviálním snímání intenzity okolního osvětlení. Podívejte se na schéma, viz Obr. 1. Spojíte-li do série rezistor (R1) a fotorezistor (PH1), získáte dělič napětí s proměnným dělícím poměrem. Napětí v uzlu mezi rezistory (tedy napětí na PA1) bude měnit svoji hodnotu v závislosti na okolním osvětlení. Jestliže chcete hlídat, zda osvětlení dosáhlo jisté úrovně, budete porovnávat napětí z děliče s nějakou jinou hodnotou. V našem případě bude ta hodnota nastavena trimrem R2 a přivedena na pin PA2. Poznamenejme, že slušné by bylo alespoň referenční hodnotu na PA2 filtrovat kondenzátorem (a PA1 by to také neuškodilo). V této situaci můžete zvolit dva přístupy. Buď nastavíte A/D převodník, budete střídavě měřit hodnotu napětí na PA2 (ADC2) a PA1 (ADC1) a pak je číselně porovnávat nebo využijete komparátor. Přístup s převodníkem je náročnější, ale flexibilnější. Můžete si do měření zabudovat libovolnou hysterezi. Jednoduše řečeno můžete naprogramovat, že noc nastává, když klesne intenzita osvětlení (PA1) pod dejme tomu 40 % hodnoty na PA2 a den když intenzita překročí 90 % hodnoty na PA2. Komparátor vám umožní pouze rozeznat, zda je intenzita větší či ne. Ale jeho použití je podstatně jednodušší jak použití převodníku. Tímto příkladem jsem chtěl pouze ilustrovat, kde se funkce obou periferií překrývají a kde je nutné předem zvážit, zda nám funkce komparátoru bude stačit. Podobně můžete hlídat i teplotu. Například termistorem, kde bude situace defacto stejná jako na schématu z Obr. 1, jen namísto fotorezistoru budete mít termistor. Případně můžete použít nějakého integrovaného obvodu (LM35 atp.). Existují ale i vtipnější aplikace. Můžete třeba před vypnutím ukládat uživatelské nastavení. Komparátorem detekujete pokles napájecího napětí, a jakmile k němu dojde, rychle uložíte do vnitřní EEPROM nebo nějaké vnější paměti data. Přirozeně to musíte udělat chytře a zajistit Atmelu dostatek času, aby to provedl. Může vám sloužit na diskretizaci analogového signálu (třeba až si budete měřit srdeční puls). Takto by se dalo pokračovat ještě dlouho. Aplikací je tedy nespočet.

Obr. 1: Detekce intenzity osvětlení

Obr. 1: Detekce intenzity osvětlení
Co nám ATtiny24 nabízí?

Výbava ATtiny24 v tomto směru není nijak závratná, například ve srovnání s ATtiny441, ale bude postačovat. Je v podstatě stejná jako na čipech řady ATmega. Na pinu PA1 je AIN0 – pozitivní vstup komparátoru a na pinu PA2 je AIN1 – negativní vstup komparátoru. Komparátor může jako pozitivní vstup používat buď pin PA1 (AIN0) nebo vnitřní referenci. Ta podle datasheetu nabývá hodnoty mezi 1 V a 1.2 V (typicky 1.1 V). Její provoz vás stojí typicky 15 uA a použít ji můžete typicky 40 us po startu. Na Figure 21-44. v datasheetu můžete vidět, jak její hodnoty závisí na napájecím napětí čipu. Na Figure 21-45. pak jak závisí na teplotě. Negativní vstup komparátoru může být buď PA2 (AIN1) nebo výstup vnitřního analogového multiplexeru. Jednoduše řečeno můžete si negativní vstup komparátoru spojit s libovolným vstupem ADC0ADC7 (PA0PA7). Podíváte-li se na Figure 21-50. v datasheetu uvidíte, že komparátor má jistý offset (napěťovou nesymetrii). Je celkem překvapivé, že při vstupním napětí pod cca 0,4 V je offset kladný (cca 2 mV), kdežto při vyšším napětí je záporný (cca 5 mV). Což vás většinou asi nebude zajímat, ale člověk nikdy neví, co vymyslíte ;). Výstup komparátoru je pouze interní, nemůžete ho tedy vyvést přímo ven z čipu (na rozdíl od ATtiny441). Má svoje přerušení a můžete si vybrat jednu ze tří událostí, kdy vás přeruší. Na sestupnou hranu, tedy když výstup komparátoru přechází z log. 1 do log. 0, na vzestupnou hranu nebo na jakoukoli změnu. Kromě toho může výstup z komparátoru spouštět A/D převod (pokud máte vhodně nastavený převodník) nebo provést “Input Capture” událost v čítači. Jinak řečeno zaznamenat okamžitě hodnotu čítače do ICR registru. Což jsou funkce, které oceníte obecně u analýzy signálů. Provoz analogového komparátoru vás bude stát typicky mezi 60-80 uA. Při nižším napětí ale může přesáhnout 140 uA. Viz Figure 21-17. v datasheetu. Zpoždění komparátoru by se mělo pohybovat mezi 75 – 750 ns podle provozního napětí a vstupního signálu plus čas potřebný na synchronizaci s hodinami čipu (1-2 takty). Více o tom v Table 20-10. v datasheetu. To je ve stručnosti všechno.

Jak se ovládá?

K ovládání samotného komparátoru slouží jeden registr. K ovládání analogového multiplexeru pak další dva. ACSR (“Analog Comparator Control and Status Register”) jak již název napovídá, nastavuje komparátor. Zapsáním log. 1 do bitu ACD můžete komparátor vypnout (když spoříte energii), bit ACBG slouží k přepnutí kladného vstupu komparátoru mezi AIN0 (log. 0) a vnitřní referencí (log. 1). Bit ACO je výstup komparátoru a slouží jen ke čtení. ACI je pak vlajka přerušení, indikuje vám tedy, zda došlo k události, kterou si vybíráte pomocí bitů ACIS0 a ACIS1. Zůstává v log. 1 do té doby, než ji zápisem log. 1 smažete nebo než program vstoupí do rutiny přerušení. Pokud přerušení nemáte povolené, pořád pro vás nese informaci o tom, že vybraná událost nastala. Události máte k dispozici tři. Změnu hodnoty výstupu komparátoru (vyberete natavením ACIS1=0 a ACIS0=0), sestupnou hranu na výstupu komparátoru (ACIS1=1, ACIS0=0) nebo vzestupnou hranu (ACIS1=1, ACIS0=1). Bit ACIE pak slouží k povolení (log. 1) nebo zakázání (log. 0) přerušení od komparátoru. Bitem ACIC povolujete, aby výstup komparátoru mohl sloužit k vyvolání “Input Capture” události v čítači 1.

Tab. 1: Popis registru ACSR – Analog Comparator Control and Status Register

Pozice bitu Označení
7 – (nejvyšší váha) ACD
6 ACBG
5 ACO
4 ACI
3 ACIE
2 ACIC
1 ACIS1
0 – (nejnižší váha) ACIS0

Pokud vám vstupy AIN0 a AIN1 nestačí, budete si muset nastavit multiplexer. U toho ale musíte mít vypnutý A/D převodník. Pokud máte A/D převodník zapnutý, patří multiplexer jemu. Multiplexer spustíte bitem ADCME (log. 1) v registru ADCSRB. Zapnutí / vypnutí A/D převodníku provádíte bitem ADEN v registru ADCSRA.

Tab. 2: Popis registru ADCSRB – ADC Control and Status Register B

Pozice bitu Označení
7 – (nejvyšší váha) BIN
6 ACME
5 -
4 ADLAR
3 -
2 ATDS2
1 ATDS1
0 – (nejnižší váha) ATDS0

Multiplexer řídíte registrem ADMUX pomocí bitů MUX0MUX5. Zbylé dva bity slouží k nastavení reference pro A/D převodník, což vás nemusí zajímat, protože ho určitě máte vypnutý ;) Vzhledem k tomu, že u A/D převodníku je i zesilovač (se zesílením 20x) je škoda, že není možné jeho výstup též připojit na komparátor. V Tab. 3. jsou kombinace bitů MUX0MUX5 pro výběr výstupu multiplexeru (ve vašem případě vstupu komparátoru).

Tab. 3: Popis registru ADMUX – ADC Multiplexer Selection Register

Pozice bitu Označení
7 – (nejvyšší váha) REFS1
6 REFS0
5 MUX5
4 MUX4
3 MUX3
2 MUX2
1 MUX1
0 – (nejnižší váha) MUX0

Tab. 4: Analogový multiplexer

Výstup z multiplexeru MUX[5..0]
ADC0 (PA0) 0b000000
ADC1 (PA1) 0b000001
ADC2 (PA2) 0b000010
ADC3 (PA3) 0b000011
ADC4 (PA4) 0b000100
ADC5 (PA5) 0b000101
ADC6 (PA6) 0b000110
ADC7 (PA7) 0b100000
0V (AGND) 0b000101
1.1V (Reference) 0b100001
ADC8 (interní teplota) 0b100010
rezervováno vše ostatní
Poznámka o vstupním bufferu

Vstupní buffer je obvod, který se stará o snímání logické hodnoty na vstupu. Datasheet v sekci 7.4.6 uvádí, že na všech analogových pinech byste měli vždy udržovat vstupní buffer vypnutý, protože při napětí okolo Vcc/2 by mohl do pinu téct nějaký proud. Což jednak může ovlivnit samotné měření, zvláště v případech kdy je výstupní impedance měřeného signálu vysoká (nelze ho zatěžovat). Kromě toho by vás takový proud mohl rozčilovat ještě v režimech spánku (kdy chcete odběr minimalizovat). Připadalo mi to zajímavé, tak jsem se pokusil proud změřit. Asi jsem měl smůlu, v celém rozsahu napětí mi do vstupu neteklo nic, co bych byl schopen na 200 uA rozsahu ampérmetru změřit. Datasheet také uvádí, že “LeakageCurrent” by měl typicky být pod 50 nA. Možná by nám to mohlo být ukradené, ale za ten jeden řádek kódu nic nedáme a budeme tedy na analogových pinech vypínat vstupní buffer. Na to máme u ATtiny24 registr DIDR0. Je přirozeně společný pro A/D převodník i pro komparátor, což jsou jediné dvě periferie, které pracují s analogovými hodnotami. Ovládání je prosté. Zápisem log. 1 do příslušného bitu vypnete vstupní buffer na příslušném pinu (ADC0ADC7).

Tab. 5: Popis registru DIDR0 – Digital Input DisableRegister

Pozice bitu Označení
7 – (nejvyšší váha) ADC7D
6 ADC6D
5 ADC5D
4 ADC4D
3 ADC3D
2 ADC2D
1 ADC1D
0 – (nejnižší váha) ADC0D

 
Autor: Michal Dudka
 

Následující a předchozí příspěvek v kategorii:

 
Následující: ATtiny24 analogový komparátor – 2. Díl Praktické ukázky I.
Předchozí: Externí přerušení nejen s Attiny24 – 3. Díl Praktické ukázky se souběhem přerušení INT0 a PCINT

 

[1] ATMEL. 8-bit Microcontroller with 2K/4K/8K Bytes In-System Programmable Flash ATtiny24A ATtiny44A ATtiny84A.[online] citováno 24. července 2016. Dostupné na www: http://www.atmel.com/images/doc8183.pdf

 
Tajned facebook
 

Za případné chyby v textu, ve zdrojovém kódě, nebo ve schématickém zapojení se omlouváme.
AUTOŘI NEBEROU ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ÚJMY NA ZDRAVÍ ČI MAJETKU.