Ellentmondás az urban legend és az adatlap között! Nem fogjátok kitalálni mit mértem!

Ellentmondás van az Interneten fellelhető szájhagyomány és az Atmel (most már Microchip) által kiadott adatlap között! Megmértem, és nem fogjátok kitalálni mit találtam!

A clickbait cím után elárulom: az adatlapnak van igaza.

Elemről működő rendszerek esetén rendkívül fontos, hogy mennyit fogyaszt az MCU sleep módban. Szokásos megoldás, hogy az MCU az idő nagyrészében sleep módban van, és egy belső, vagy egy külső órára várakozik. Az idő leteltével felkel, elvégzi a feladatát, aztán újra megy aludni. Ezzel a megoldással akár egy 2032-es gombelemmel is évekig működő rendszert kaphatunk. Például percenként felkelünk, megmérjük a hőmérsékletet, elküldjük rádión a központba és alszunk tovább.

Az adatlapok és az Internetes szájhagyomány is foglalkoznak a kérdéssel, hogy mennyit fogyaszt az alvó MCU és hogy hogyan lehet ezt minimalizálni.

Adatlap: a pinek lebegését meg kell akadályozni, mert ha változik a logikai értékük, az aktiválja az input logikát, ami áramot fogyaszt. Ha nincs semmihez sem kötve a pin, akkor kapcsoljuk be a belső pullup ellenállást.

Fórumok: Ez az egyik ősforrás, amit mindenki hivatkozik: http://www.gammon.com.au/forum/?id=11497 (adatok innen: "Testing in SLEEP_MODE_PWR_DOWN:") A lebegő, vagy alacsonyra húzott pinek kevesebbet fogyasztanak, mint a magasra húzottak. Ráadásul a pullup resistor még többet fogyaszt! Nem is kicsi a különbség, még a watchdog timer fogyasztása mellett is lényeges a különbség.

Nem hagyott nyugodni az ellentmondás, ezért elővettem a műszereimet és mérni kezdtem. ATMega328p-t kezdtem mérni, mert ugyan nem ez lesz a tervezett áramkörben, de ennek több lába van, és nagyobb különbségek mérésére számítottam így. Labortáppal beállítottam 3.3V-os táplálást, és a multiméteremet sorba kötöttem a tápba, hogy megmérjem az áramot különböző elrendezésekben. Rövidre fogom, pedig a méréssorozat igencsak hosszadalmas volt, mert ha már összeraktam akkor a különböző órajelek fogyasztását, és a PRR regiszter hatását is kimértem.

Az áramkört breadboardon raktam össze (eszembe is jutottak buckó és zab (locsemege) kollegák bölcsességei, hogy eleve rosszul csinálom, mint később látni fogjuk igazuk lett). És sikerült reprodukálnom amit a linkelt fórum is írt: valóban többet fogyasztottak a belső felhúzóval magasra kényszerített pinek, mint a lebegők!

Miután végigcsináltam a méréseket bizisten szomorú voltam, hogy egyrészt az adatlap rosszul tudja, másrészt muszáj lesz az üres pinekre is ellenállást szerelnem :-(. De még meg akartam mérni, hogy ha külső felhúzót teszek-e, akkor is sokat fogyaszt-e? Mivel 1 lábat nem tudok mérni, csak az összeset együtt, ezért elkezdtem szisztematikusan minden lábra rátenni 1-1 felhúzót...

Így jutottam az AVCC lábhoz: analóg konverter tápja. erre meg mit dugjak? Ha más nem segít, nézzük meg az adatlapot! "It should be externally connected to V CC , even if the ADC is not used." OOOOPSIE, ez nem volt bedugva sehova. Dugjuk csak rá a tápot, mi történik?

Az AVCC lábat korrektül bekötve a fogyasztás harmadára esett vissza! Visszamentem a pullup-os mérésre, és láss csodát ott is ugyanarra az értékre visszaesett a fogyasztás! Tehát amennyiben az AVCC pin rendesen be van kötve, akkor nincs különbség a pullup és a többi mód fogyasztása között! (És zajos környezetben a lebegő pin fogyasztást okozhat az adatlapnak megfelelően.) Van egy olyan érzésem, hogy a linkelt fórumon ugyanezt a hibát követték el a mérésben.

Sajnos a multiméterem legkisebb mérhető lépcsője a 0.1uA, és az utolsó mérések már ezt a legkisebb értéket mutatták. Tehát egyelőre nem tudom pontosan összehasonlítani a pin módok fogyasztásait, de most már újra hiszek az adatlapnak. Az is biztos, hogy az egyéb fogyasztóknál a különbség mindenképpen sokkal kisebb mint az Internetes fórumok okossága által sugallt, számomra megfelelő lesz a pullup.

Ha lesz pontosabb műszerem, akkor talán újramérem még egyszer mert most már kiváncsi vagyok.

Hozzászólások

Amikor a uC fogyasztasa kisebb, mint az elem/akku onkisulese, szerintem mar felesleges tovabb kuzdeni.
Raadasul ilyen kis fogyasztasu esetben meg bejohetnek egyeb, nem vart hatasok:
https://wp.josh.com/2014/03/03/the-mystery-of-the-zombie-ram/

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Mi ebből a tanulság?
- Az adatlapnak mindig igaza van, kivétel amikor téved, vagy sajtóhibás, vagy a processzor hibás.
- Mielőtt bármit villanyra kötsz, háromszor olvasd el az adatlapot.
- Legelső a táplálás és a szűrés.

Egyébként ez a "felhúzó ellenállásosdi" az öreg szakemberek TTL beidegződése. Ott azért kellett felhúzni mindent, mert a bemenet és a kimeneti totem pole akkor fogyasztott kevesebbet. Az OC kimenetnél meg alul volt a tranzisztor és felfelé a fogyasztó. Az egyszerű kimeneteket meg csipesszel földelve is billenteni lehetett - néha a belső áramkört is.

A CMOS eszközöket szokni kell!
- A bemeneti ellenállás 3 részből tevődik össze:
-- A szigetelő: 10^12-10^13 Ohm
-- A szivárgási áram: 1uA..0,1nA
-- Bemeneti kapacitás: néhány pF..20nF (itt a diszkrét eszközökre is gondolok)
Ez ilyen extrém bemeneti adatokból rögtön következik néhány alapvető dolog:
- Akárhova húzod a bemenetet, ott csak a szivárgási áram fog folyni.
- A bemenet mögött is hasonló áramkörök vannak, ezért a stabil állapotban szintén nem akarnak fogyasztani.
- Ha szabadon hagyod a bemenetet, akkor a bemeneti kapacitást a szomszéd szobában elrepülő szúnyog is képes feltölteni. És akkor úgy is marad.
- Viszont, ha bármilyen kicsi zavarfeszültség van a környéken, akkor a bemenet - és ami mögötte van az is - billegni fog. Ekkor a billenés közben rövid időre áram fog folyni a tápból, illetve a bemeneti kapacitásokat is töltögetni kell oda-vissza. Ezért is adják meg az ilyen fogyasztást mW/MHz mértékegységgel.
- MOS bemeneteket igen gyakran "lehúzzák".

Itt véget is ért az elmélet. A gyakorlatban a csip kialakításakor a egy csomó parazita alkatrész is keletkezik: diódák, tirisztorok. Rossz irányú, vagy túl nagy feszültség hatására ezek nyitnak és jön a füst. Esetleg átüt a MOS szigetelő réteg - ez a kedvencem. Az áramkör működik tovább, aztán normál üzemi körülmények közöt el kezd "korhadni", és egyre hibásabban működik.
Az utóbbi minimalizálására a bemeneten és általában a kimeneten is ESD védő áramköröket alakítanak ki. A kimeneten két dióda, a bemeneten minimum egy dióda, de az esetek többségében 2-4 dióda és soros ellenállás is van. Ezeknek a sérülésmentes terhelését lehet elolvasni az első "Absolute Maximum Ratings" elektromos paraméter táblázatban.
És itt is a következő váratlan tulajdonság. Megfelelő körülmények között tápfesz nélkül is működik minden! Elegendő egy bemenetre - a határértéket meg nem haladó - áramot adni, mégpedig olyan feszültség mellett, amikor a szerkezet már működőképes. A felső ESD védődióda megnyit a tápfesz felé és az áramkör elindul.

Ha már szóba került a breadboard... :-)
Altalában a gyártótól fuggetlenül - ott ahol az előírt szűrést tárgyalják - oda is írják, hogy a Vdd lábtól legfeljebb 5-6mm távolságra lehet a szűrőkondenzátor. Ez kb. 5nH induktivitást jelent. Ezt breadboardon nem lehet megoldani. Ettől még működhet az alkatrész, csak...a gyártó odaírta, hogy szerinte milyen feltételek mellett garantálja a megbízható működést. Tehát meglepi esetén nem ők a hibásak. ;)

Ha összeadod a két kilógó láb hosszát, plusz a két csatlakozó távolságát, akkor az összeg felette van. A lábnak meg nagyobb az induktivitása, mint a fóliának.
A pontos leírás úgy szól, hogy egyik csatlakozó <=6mm, a másik meg ground plane-re (teli földfólia) csatlakozik, ami ~0 induktivitást jelent.
A breadboard a 70-es vagy 80-as évek technológiája. Tudtad?
Ráadásul egy csomó alkatrész csak SMD kivitelben létezik és nincs alternatívája. Sem az összekötést, sem a hűtőfelületet nem tudod tesztelni.

És ha a kapacitást betolom ugyanabba a socketbe, amiben a processzorlábak vannak? Azért a DIP tokban még működőképes a csip, különben nem gyártanák.

A nyolclábú DIP tokos ATTiny-knek egyébként pont átellenes sarkában van a VCC és a GND. Ezekre akkor eleve nem lehet a 6mm-et biztosítani.

Tok ala behuzott es beultetett smd kapacitas sorral, belso nagyfeluletu fold es tap plane-el, kozositett soros kacitassal, vagy copper pour gnd-vel megoldhato a labak es a zavarszures kerdese.
De tipikusan nem egy Attiny aminel szuresi proemat jelentene a kondi tavolsaga.
Bonusz kor, ha mar jatszol nezd meg mit csináljak egy 10uF-os kondival es egy 30 meteres antenna soros diodaval es egy jo rf folddel.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Úgy látom érted. :)
Az Attiny esetében sem a kiszivárgó gigahercek miatt kell a szűrés. ;)
Képzeld el, ha a bemenetre érkezik egy nagymeredekségű, túlfeszültséget jelentő zavarimpulzus! Ekkor nyílik a felső védődióda, majd a szűrőkondenzátor könnyedén elnyeli az áramot - miután az áram kialakult az induktivitáson. Addig meg csak emelkedik a bemenet feszültsége. Az ilyen jelenségek egy megtervezetlen, breadboardon összegányolt áramkörnél sokkal valószínűbbek. Sok esetben inkább csak annak köszönhető az áramkörök megmenekülése, hogy lényegesen többet bírnak a megadottnál.

Az antennas dolog onnan jott, hogy egy riasztoban a kontroller tapfeszultseget egy kulon mosfet kapcsolgatta. A kontroller bemenetei direktbe ki voltak kabelezve a kapcsolokra amik nyitasnal foldre huztak a bemeneteket, amik a belso pull-up-okkal voltak fehuzva. A jelenseg az volt, hogy a kontroller rendszeresen felebredt magatol, korulnezett, es mivel nem latott tobb komponenst bebillentette a szabotazs bitet.
A moka az volt, hogy a kapcsolo vezetekei kozul volt ami megkozelitette az 50 metert es mindenfele armyekolas nelkul ment 240V es mas drotok mellet. Az igy keletkezett zajt szepen megiranyitotta a bemeneti vedodioda, es csorgott befele a kontroller kondenzatoraba. 2-3 ora alatt a kondi feltoltldott annyira, hogy beinduljon a kontroller annyi idore, hogy kialljon hibaba.
Eleg sok ido volt, mig a cegvezeto fiacskajanak el lett magyarazva, hogy igy nem tervezunk riasztot.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Egy mcu bemenetre érkező impulzusokat számoltunk. És egyszer csak napról-napra szaporodni kezdtek az olyan impuzusok, amelyek ott se voltak. ;) Az áramkört hiába mérted, minden tökéletesnek tűnt.
Ennél sokkal kedvezőbb, ha azonnal eldurran, mert akkor egyértelmű a hiba.

Ugyanez előfordul bipoláris OC kimenettel. A kimenő tranzisztor megfutott, de nem ment tönkre. A továbbiakban hibátlanul működött egy bizonyos terhelésig. Ha azt elérte, akkor látszólag bekapcsolva maradt. (7406)

Gate mehajto alul volt meretezve, 4-5 ora mukodes utan a meghajto felso fetje bebarnult. Innen kezdve a drive aramfelvetele elmaszott 1-2 A-el. Aztan 2-3 het utan egyik pillanatrol a masikra ropira egtek a fetek osszenyitas miatt a power modulban.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "