Nadproud na vstupu Atmega8A-PU: připojený pin zvýší odběr

Dobrý den,
všiml jsem si, že při připojení napětí na pin čipu stoupne proud v obvodu o cca 80mA. Jedná se však jen o demonstrační zapojení s se dvěmi LED.
Když je napětí na více pinech, nadproud se násobí počtem pinů.
Přišel jsem na to, když jsem testoval assembler příkaz IN. Zkusil jsem, jestli se stejný problém objeví i s jednoduchým SBIS a ano, objeví.
Jako první mě napadlo, že bych nejspíš měl dát před pin nějaký rezistor.
Čip ale nereaguje ani na připojení napětí přes rezistor 100R.

Zapojení vlastně ani není. Čip je zapojen jen ke zdroji napětí, programátoru (Presto s vyžadovanými rezistory) a dvěmi led s odporem 270R.
Vcc externě spojeno s Avcc, zapojeny obě země. zkoušel jsem i vynechat jednu zem a Avcc, beze změny.
Nevíte někdo, co by to mohlo být?

díky

:arrow_right: administrator: přejmenováno z "Nadproud na vstupu Atmega8A-PU"

a proč připojuješ pin na napětí? rozdíl je připojit a nebo jenom otestovat

Připojuji jenom na chvíli=stisk tlačítka. Připojit na trvalo je samozřejmě nesmysl… to bych to moh napsat do kódu.

Dej sem ten program, ale odhadl bych, že máš nevhodně nastaven port.
Zkontroluj si registr DDRx (x - písmeno portu který používáš), jak je nastaven.

.NOLIST
.INCLUDE “m8def.inc”
.LIST

.ORG 0
RJMP Start

Start:

.DEF tmp = r16

;******************
LDI tmp,LOW(RAMEND)
OUT SPL,tmp
LDI tmp,HIGH(RAMEND)
OUT SPH,tmp
;******************

LDI tmp,255
OUT DDRB,tmp
OUT DDRD,tmp

loop:
sbis pind,1
rjmp loop
out portb,tmp
rjmp loop

ret

Používám jen porty D a B

LDI tmp,255
OUT DDRB,tmp
OUT DDRD,tmp

Tohle nastaví portB i portD na režim výstup, takže tlačítkem na pinu portuD provedeš zkrat. Pro čtení na portuD to musíš upravit takto:

LDI tmp,255
OUT DDRB,tmp

LDI tmp,0
OUT DDRD,tmp

Měl jsem pocit, že to s nulou nefunguje, ale patrně byl bug někde jinde. Zkusil jsem to znovu a bez problému.
Děkuji Ti mnohokráte. Problém odstraněn

A kde mas kondenzator na napajani? Ha? :slight_smile:
Mas osetrene vsetky vstupne piny na definovanu uroven, alebo sa ti na ostatnych vstupoch vsetko plance podla toho co ide okolo a tym si bezpecne zvysujes odber?
Ake odpory mas v serii s tymi LED?

Jak jsem psal odpor je 270R.
O kondenzátoru na napájení jsem nikdy neslyšel, jestli je tam kvůli vyhlazení, tak necítím žádnou potřebu přidávat k těm, co jsou ve zdroji.
Nastavení úrovní nějak nerozumím. Jediné co se vstupy dělám je, že když je v DDR o tak je zemním přes 100K. Když by tam byla 1 tak by to nejspíš nebylo příliš moudré.

To som prehliadol.

To je predsa alfa a omega napajania vsetkych digitalnych obvodov. Staci mat trochu dlhsie kabliky od zdroja a nestastnie je na svete.

ATMEL o tom pise v aplikacnej poznamke AVR042, ktoru najdes napriklad tu:

atmel.com/dyn/resources/prod … oc2521.pdf

To si bud isty, ze to mudre je. Na definovanie stavu na vstupe napriklad pocas resetu je vhodny odpor 10-220k bud o GND alebo o Ucc to je jedno a zavisi to hlavne od navrhu hw. Napriklad piny pripojene s pamatou SPI alebo I2C su spojene cez odpor 2k2-10k k Ucc. AD vstupy si treba prizemnit napriklad cez 47k-220k o zem.

V prvom rade odpoj LED, a zmeraj spotrebu len samotneho mcu pri dodrzani vyssie uvedenych podmienok. napriklad do napajania vloz 1R odpor a prud meraj ako ubytok na tomto odpore. Ak mas A-meter na prilis nizkom rozsahu, vysoky snimaci odpor v “nejakom” ampermetri uz moze vyrazne ovplyvnit Ucc na procesore.
GND na mcu maj spojene a to sa tyka aj vsetkych Ucc (ak je viac Ucc a GND) a AUcc.

Takhle jsem nad tím neuvažoval. Další kondik má něco do sebe.
Ale co se zvýšení proudu týče, nejednalo se o puls ale o stálý odběr (zkrat, jak píše Standa33).
Zajímalo by mě ale proč na pokrytí odběrových špiček používat keramiku nebo tantal. Na odrušení u analogů určitě… ale tady??

Co já vím obecně všechny vstupy je dobré přizemnit… atmely jsou citlicé potvory reagující úplně na všechno, ale proč přizemňovat výstupy? Nemáš nějaký další manuál?

Pocas resetu nie je vystupom NIC. Pocas tohto stavu treba na pinoch definovat uroven.

Piny netreba prizemnovat, ale dat im definovanu uroven v katalogovom rozsahu. Preto som pisal, ze napr.SPI a I2C davas na definovanu uroven Ucc. Nemusi to byt nevyhnutne zem. Cisto digitalny IO vsak nemoze mat na vstupe definovanu uroven s hodnotou 1/2Ucc. To je myslim jasne. Takze bud GND alebo Ucc. Samozrejme je definovana uroven makka, cez dostatocne vysoky odpor aby ho pin nastaveny ako vystupny vedel lahko pretlacit.

ATmegy inak vydrzia celkom dost. :slight_smile:

Ak mas trvalo vysoky odber, tak sprav nasledovne:

  1. vytiahni mcu, diody a aj programator z patice a zmeraj odber a Ucc. Ucc musi byt v tolerancii. Odber meraj ako ubytok na 1R odpore zapojenom do serie s napajanim.

  2. zasun mcu zmeraj odber

  3. zasun programator zmeraj odber

  4. naprogramuj mcu tak, aby vsetky piny boli vstupne s pripojenym internym odporom a zmeraj odber.

  5. pripoj LED a zmeraj odber.

k tym C. Prave na digitale su C daleko dolezitejsie ako na tych analogov. Na analogoch riesia prienik rusenia cez napajanie a vykryvania odberovych spiciek pri rychlom zmene stavu.

Na digitaloch riesia generovanie rusenia do napajania a vykryvania odberovych spiciek pri rychlych zmenach stavu.

Kontrolna otazka: Kde bude viac rychlych a prudsich zmien stavu? V 8MHz MCU, alebo na nf OZ? :slight_smile:

Uz len striedavo nabijat a vybijat parazitne kapacity na layoute. To su prudy. :wink:

problém s proudem už nemám, bylo to opravdu špatné nastavení portů.

Nicméně k těm C… právě proto, že ten čip vytváří odběrové špičky nechápu použití keramického C. Z mého pohledu by bylo praktičtější efektivnější a ekonomičtější na pokrytí špiček použít elektrolyt.

A co se týče interních rezistorů, tak ty se mi nikdy nepodařilo donutit fungovat podle mých představ. (tak aby yly vstupy spolehlivě flegmatizované vůči okolí)

Preco elyt?

Sice vie nahromadit viac energie, ale vzhladom na svoje fyzikalne vlastnosti elytu je tato energia omhono “lenivejsia” pre potreby rychlych zmien kvoli vyssiemu seriovemu odporu.
Preto ma spravne poriesenie napajanie obsahovat viac paralelne pripojenych C. Samozrejme, cim nizsia hodnota, tym blizsie k napajacim pinom. Cim mensia kapacita, tym nizsie parazitne javy braniace poskytnutiu energie procesoru

samotny Atmel o tom pise napriklad tu:

atmel.com/dyn/resources/prod … oc4279.pdf

To, ze je to pre Atmelacka 8051 je principialne uplne jedno.
na strane 13 je priebeh pre rozne zapojenie paralelnych C. Dufam, ze Ti to prinesie trochu svetla do navrharskeho zivota.
A o vlastnostiach indukcnosti spojov a vzajomnych kapacit vrstiev ani nehovorim. To mozes pre zaciatok hned preskocit, len kukni obrazky a vzorce aby si pochopil, na co vsetko sa pri navrhu ma dbat a nema sa podcenovat a ze tato problematika je dnes celkom premakana. A nejedna sa o ziadne reklamne bu-bu-bu, ze “ak nekupite nieco od nas, nebude vam to fungovat”. To sa jedna iba cisto o konstrukterske odporucania, ako treba veci navrhovat aby cas od casu “neblbli”.

Toto vsetko uvadzam, aby Ti bolo jasne, aka vazna tato tema je a dufam, ze na zaklade tychto informacii das co najblizsie k nozickam 100n paralelne k 10uF. To bude na zaciatok (aj aj na nablizsiu dlhu dobu) uplne stacit.

Ver mi, vyhnes sa mnohym prapodivno uchvatnym spravaniam sa zariadenia, ktore chvilu trvat budu a potom sa zase stratia a Ty ich budes pripisovat softweru.

Dodrzovat napajacie pravidla odporuca 999 z 1000 programatorov jednocipakovych systemov. :slight_smile:

No a zamozrejme transil 5V8 priamo na napajacie nozicky. Doveruj mi, dbat na bezpecnost a ochranu sa oplati, aj ked nevyrabas zariadenia pre letecky priemysel. Iba si v buducnosti usetris mno a mnoho hodin hladania chyby tam kde nebude. Tieto hw zalezitosti su najzakernejsie a pritom sa im da lahko a lacno predist.

Inak Ako si zlym nastavenim pinov dosiahol mat vysoky odber? Ja osobne taku kombinaciu nepoznam. Prezrad :slight_smile:

Takhle… Standovi ještě jednou díky. Mě osobně to přijde jako chyba za kterou si programátor zaslouží ránu pánví po hlavě…

pozeram ze najlepsie celu radu kondikov tam treba :smiley: dik za dokumennt