Správné spínání zemí nebo napětím?

Ahoj, co je správnější:

nastavit na PIN mcu (např. ATM8) pull up a ovládat stav 1/0 připojením pinu na GND a nebo naopak - nenastavit pull up, dát na pin pull down vůči zemi s spínat napětím? A nebo je to jedno? Díky.

Vycházej z toho, co je na pinech mcu během resetu. Piny jsou ve vstupním módu bez pull up. O ten se musíš postarat odporem, pokud nechceš, aby během resetu nebo programování přes ISP nebyly okolní obvody v nekontrolovatelném stavu. Jinak je to jedno. Akorát si musíš dát pozor, abys nepřekročil proud přes Vcc nebo GND.

Asi ti jde o připojení tlačítka ke vstupnímu pinu.
Je to jedno, ale častěji se používá zapojení proti zemi, protože se tak ušetří jeden odpor.

nemusí jít jen o tlačítko (magnetická čidla, pir čidla přes např. optočlen apod.). ještě poprosím o jednu začátečnickou radu - dejme tomu, že mám zapojení tak, že ovládám pin drátem, o kterém vím, že má celkový odpor 5 Ohm (drát je příklad na otestování). Používám interní pull up a propojuji se zemí, napájení MCU je 5V. Jak zjistím produ, který mi při propojení pinem poteče? Díky.

Interní pullup má velikost 20k-50k. Proud tedy bude Vcc/(50k+5) ~ Vcc/(20k+5) = 0.1mA ~ 0.25mA.
Neučí se ohmův zákon už na základce?

To je těžké. Odpor vnitřního pull-upu má docela
široký rozsah 20K - 50K.
Pokud to potřebuješ zjistit přesně, tak použij měřák.

OZ je v pohodě, nevěděl jsem ale, co mám vzít jako hodnotu pro R, myslel jsem, že takto vypočítám proud, který “teče”, když je to interně přes PU na hodnotě 1, ne když sepnu vůči zemi.

Vyber si hodnotu od 2k2 do 10k

maximalny prud bude napr Un/2200=5/2200= 2,27mA

interny odpor Ti tuto hodnotu zvysi maximalne o cca 10-15%

Na interne odpory sa nikdy nespoliehaj. Uz len kvoli ich hodnote sa moze spomalit nabijanie parazitnych kapacit, a pri restarte nemusi byt aktivovane vobec a to sa potom na pinoch moze naindukovat hocico nezdrave.

díky všem

Například v případě onoho magnetického spínače někde na okně 20m od procesoru bych ale stejně dráty nepřipojoval natvrdo k mcu. Minimálně oddělit od procesoru uzel mezi pullupem a drátem nějakým větším odporem (alespoň 1k, klidně 10k, procesor nic nebere).

takže když je interní pull up, tak by tebou navrhovaný odpor byl v sérii s drátem? tj. před přivedením drátu do pinu?

Nechci být pedantický, ale magnetické čidlo (Hall) i optočlen mají na výstupu obě úrovně, takže tam je pull-up zbytečný.

Z dřívějších diskuzí mám takový dojem, že radek tvoří něco jako domácí automatizaci, tedy “magnetická čidla” pravděpodobně hlídají okna a moc se mi nechce věřit, že by byla založena na hallově jevu. Spíš bych předpokládal jazýčkové kontakty na rámu a magnety na okenici. Takový snímač by přídavný odpor skutečně potřeboval. Stejná situace je s optočlenem - ty jednoduché mívají nejčastěji pouze tranzistorový výstup. Tedy opět se bez odporu neobejde.

radek: ten sériový odpor lze použít pouze s externím pullupem. Propoužití s interním bys ho musel spočítat tak, aby procesor spolehlivě rozpoznal nízkou úroveň i přes napětí na onom odporu + napětí na drátech a spínači.

je i není to tak, automatizaci dělám dlouhodobě, některé otázky vyplývají postupně i pro jiné obvody / typy nasazení.
ad odpor - díky

ještě kontrolní dotaz k tomu sériovému rezistoru - chápu dobře, že to tam je kvůli tomu, aby pinem netekl tak velký proud? dík

Abysme si rozuměli: Pullup je mezi Vcc a drátem ke spínači. Přídavný odpor je mezi tímto spojem a procesorem. Jelikož je pin procesoru jako vstupní, neteče do něho žádný proud.
Přídavný odpor zde má pouze ochranou funkci pro případ, kdy by na drátech snímače vzniklo napětí větší než Vcc nebo menší než 0V. Odpor pak omezí proud, který se uzavře přes ochranné diody procesoru. Kdyby tam ten odpor nebyl, proud by nebyl omezen, zničil by diody a pak i procesor.

Nie

P.S. Piityy ma predbehol :slight_smile:

malo to zniet asi takto

Nie, nie je ta kvoli tomu.

ja spinam zasadne LOG0 na vystupe. pocas resetu su piny v stave vysokej impedancie, teda nimi netecie ziadny prud. Cize, ked je na vystupe zapojena LED /optoclen/ cez rezistor z VCC, tak nesvieti. Po inicializacii vystupu a zapise LOG1 do vystupneho portu sa situacia nemeni a dioda stale nesvieti. Nedochadza teda k preblikavaniu a prekmitavaniu vystupu v case resetu a inicializacie vystupov. az zapisom LOG0 na vystup sa dioda rozsvieti.
Zaroven vystup procesora je mozne zatazit niekolkonasobne vyssim prudom prave v stave LOG0v porovnani, ked je v stavo LOG1.
Jednoznacne spinat LOG0

To platilo v dobách x51, kdy byly porty tvořeny pull-upem a tranzistorem spínajícím zem. Na AVR už na tom nezáleží. Zatížitelnost je stejná na horním i dolním tranzistoru a otázka probliknutí je pouze věcí programu (nastavit registry DDRx a PORTx ve správném pořadí).
Je ovšem pravda, že taky spínám ve většině případů zemí jako na x51.

je to sice konkurencne forum, snad ma tu neukamenuju:
avrfreaks.net/index.php?name … 43&start=0

pocas resetu su piny avr v stave vysokej impedancie. Ak je k pinu zapojeny tranzistor NPN a z VCC je pripojeny rezistor do bazy a T je vypnuty pri LOG0 na porte (baza GND), tak pocas resetu bude cez rezistor do bazy tranzistor otvoreny az do doby, kedy sa pocas inicializacie nezapise do portu log0 a ta stiahne bazu k zemi a trandak sa uzavrie. Cize dojde k kratkemu zapnutiu zariadenia spinaneho tranzistorom pocas resetu.
Mam s tym osobnu skusenost, musel som niektore takto urobene vystupy v mojom prvom zapojeni zinvertovat a navrhnut novu dosku. Takze som si to sakra dobre zapamatal a spinam uz jedine log0. Ak potrebujem opacnu funkciu tak radsej volim invertor medzi avr a zariadenie s externym pull up rezistorom pre kazdy pripad.
Ako pises je to zvyklost este z x51 a nie je dovod ju menit.