Jak správně uspat PIC16F627A

Vždycky se snažím poradit nebo bejt užitečnej, když vím nebo můžu, dneska jsem ale tak nějak v koncích, tak snad mě v tom nenecháte…

Mám takový blikátko s PIC16F627A a dvěma modrýma LED (synovi majáček do sanitky), má to fungovat tak, že po zapnutí začnou zhruba na 30 vteřin LED na portu B blikat. Když odpočítám čas, MCU má usnout, po stisku tlačítka na RB0/INT se má MCU vzbudit přerušením a zase 30s blikat… a tak furt dokola. Funguje to bez problému, problém ale je, že když je stav SLEEP, je příliš vysoká spotřeba (typicky se zastavuje na 0,35 až 0,6 mA, ale občas i výš - popíšu dále). Teď ale to “nejlepší”, co mi hlava nebere - když na MCU fouknu (nebo dýchnu - větší blízkost), spotřeba vyleze až k 3 mA, a postupně klesá (v řádu minut) až na původní hodnotu. A navíc - když dám druhý MCU, ten se zas chová opačně - když na něj funím, spotřeba klesne až na 35uA (to by byl ideál, kdyby…), když ho nechám, spotřeba vzroste… tak nevím, nechápu. Pull-upy ON, INTOSC RC 4MHz (zkoušel jsem i 37kHz, na spotřebu to nemá vliv, zkoušel jsem externí pull-up 100k, ale spotřeba byla vyšší než s interním), Má to bejt napájený přes obyč. diodu ze dvou CR2450, tak bych rád docílil stavu “aby to spalo levně”… Co mi poradíte?

Edit: ještě bych dodal, že jsem hledal na fóru i jinde, ale nic použitelnýho nenašel… (to já jen pro pořádek)

Co takhle to napájet jen jednou baterečkou a potřebné napětí pro led doťukávat nábojovou pumpou? Při 3V by to mělo mít snad rozumný odběr při spánku. Nemám s tím zkušenost, v datasheetu to uvádí.

Já používám tuhle nábojovou pumpu pro symetrické napájení OZ, nicméně pro LED je taky vhodná: hw.cz/teorie-praxe/navrhy-vyvoja … roudy.html

Stačí ti připojit k nožce 2 diody a dva kondy, zbytek máš v MCU :smiley:

Pokud máš jeden PIN volný (což dle tvého popisu bys měl mít), tak máš lepší si přímo odpojit napájení - spotřeba je pak nulová, použil jsem to u své digitální minutky.
Inspiroval jsem se zde: pandatron.cz/?148&luxusni_hraci_kostka

Oba to jsou moc pěkné nápady a příště je určitě (nejen já) využiju. Problém tohoto blikátka byl ten, že jsem používal už hotovou destičku (recykloval jsem jeden výrobek, který původně dělal něco úplně jiného, prve jsem to zapomněl napsat) osazenou SMD součástkami a PICem v pouzdru SSOP, takže jakékoliv úpravy zapojení jsou poměrně problematické.

Nicméně jsem problém se spotřebou ve spánku již vyřešil, stačilo připojit pin RA4/T0CKI přes odpor 2k2 na zem (ten odpor tam už byl, tak jsem ho tam nechal, asi by to šlo i bez něj), spotřeba se po doblikání okamžitě ustálí na 34 uA (to mi stačí) a žádné další psí kusy už nedělá, je stabilní. Malej už má blikátko zabudovaný a moc se mu líbí :slight_smile: Za rady moc děkuji, jistě se hodí nejen mě, za ochotu pomoci taktéž…

ono ten pin RA4/T0CKI stačilo nastavit jako výstupní…
…na vstupním pinu musí být vždy definováná úroveň, nejlépe Uss nebo Udd, pokud není na vstupní pin přivedena žádná úroveň, ze vzuduchu se může indukovat cokoliv, v nejhorším případě napětí (Udd+Uss/2), pak ti procesor citelně zatíží napájecí zdroj (odporem dvou sériově zapojených částečně sepnutých MOS tranzistorů, což mohou být řádově jednotky kiloohmů) a na jakýkoliv úsporný režim tak můžeš zapomenout.

Když jsem si hrál s režimem sleep tak jsem nikdy nedosáhl hodnoty odbíraného proudu, která je psaná v konkrétním datasheetu jak u řady PIC12 tak PIC16.Vždy jsem se k hodnotě pouze přiblížil.Jestli to bylo měřákem nevim.Pak jsem zkusil vypnout Brown-out Reset a ejhle spotřeba se zmenšila 10x v režimu sleep.