Vyber tlmivky 10uH pre odrusenie AD prevodnika

Zapojení AREF - Pokud chceš měřit napětí s referencí na VCC (AVCC), tak na AREF těch +5V NIKDY nepřipojuj. Koukni se do datasheetu. Na AREF patří referenční napětí POUZE v případě, že používáš externí zdroj referenčního napětí. Ve všech ostatních případech na AREF připojuješ jenom kondenzátor 100n.

Použití VCC jako referenčního napětí není vhodné pro nějaké přesné měření AD převodníkem, pokud nemá stabilitu a přesnost regulérního referenčního zdroje - a to pulzní měnič už z principu mít nemůže. Obecně jakýkoliv zdroj (i lineární), pokud má proměnnou zátěž (ve Tvém případě rozsvícené/zhasnuté LED, relátko) není vhodný jako zdroj referenčního napětí. Na přesné měření použij buď externí zdroj referenčního napětí (například MCP1541 = 4,096V s přesností 1%) nebo použij interní referenci procesoru - v tomhle případě 1,1V. Pokud použiješ pulzní stabilizátor k napájení, musíš mít napětí velmi dobře vyhlazené, stabilizované a především odrušené, abys dostal z AD převodníku použitelné výsledky. Možná by pomohlo, kdybys měl napájení řešené tak, že na výstupu měniče budeš mít nastavených třeba 6V a za tím budeš mít pro mcu 7805-ku.

Výhody/nevýhody jednotlivých referencí :

  1. Externí reference :
  • plus baterky připojíš přímo na pin AD převodníku, nepotřebuješ odporový dělič
  • jednodušší přepočet - hodnota 1000 z AD převodníku = 4,000V
  • malinko dražší řešení (17 Kč referenční zdroj)
  • napájecí napětí nesmí poklesnout pod 4,3V
  1. Interní reference 1,1V :
  • je již v cené procesoru
  • napájecí napětí může klesnout až k úrovni, kdy přestává pracovat procesor
  • o něco levnější řešení (2 odpory stojí méně, než 1 reference)
  • plus baterky musíš připojit přes odporový dělič
  • konstantu pro přepočet si musíš nejdřív zjistit

Co se SLEEP_MODE_ADC týká, tak ten jsem ještě nikdy nepoužil. Používám prakticky jen IDLE. Je to z toho důvodu, že pomocí přerušení generuju refreshe displejů, jas LED displejů, snímám okolní osvětlení (kvůli řízení jasu) - zkrátka procesor nespí dlouhodobě, ale vlastně jenom mezi jednotlivými cykly programu. Jen u elektronické kostky jsem použit i POWER_DOWN, ale to bylo opravdu jenom na vypnutí a čekání na zapnutí tlačítkem.

Buzení procesoru pomocí IN0 a IN1 (předpokládám, že máš na mysli INT0 a INT1) - pokud potřebuješ víc externích “budíků”, tak máš ve všech sleep modech k dispozici i Pin Change interrupt = 23 možností externího přerušení/probuzení procesoru.

Buzení pomocí timerů - pokud jsem správně pochopil datasheet, tak v POWER_SAVE modu jsou aktivní všechny timery. Pokud bys tedy použil 16-btový Timer1, tak máš k dispozici periodu až 67,1 sekundy při 1 MHz (8,38 sek. při 8 MHz). V případě, že bys tedy použit Timer1 místo Timer2, máš interní buzení vyřešené.

Ještě jedna poznánka k tomuto :

Pokud potřebuješ nějaké přesné časování (třeba přesně 1 vteřinu), pak je mnohem výhodnější nastavit timer do režimu CTC. Nemusíš za běhu nic přenastavovat. Timer pak počítá do OCRx a znova od nuly. Jen přerušení v tomhle případě musíš používat TIMERx_COMPy a ne TIMERx_OVF.

Ještě se zaměřím na celkové řešení napájení :

Připadá mi, že to řešíš zbytečně komplikovaně a draze.

  1. Zjistil bych si, jaká je vlastní spotřeba toho napaječe bez odběru. Pulzní zdroje na tom bývají dost dobře a pokud by byl odběr do 0,5W, asi bych vůbec neřešil vypínání zdroje ze zásuvky a nechal bych to připojené do sítě stále. TV taky nevypínáš nebo nevytahuješ ze zásuvky, ale jenom jí vypneš pomocí DO. PC taky jenom vypneš a nevytahuješ ho ze zásuvky. PIR čidla světel atd.

  2. Pokud by byl odběr vyšší, pak bych zachoval zapínání pomocí relátka (nebo optotriak, případně optotriak+triak) v případě potřeby rozsvítit LEDky, ale MCU bych připojil pomocí kondenzátorového zdroje k síti. Ani v tomhle případě bych asi baterku vůbec neřešil.