jak nastavit pin jako zem?

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
lastope1
Příspěvky: 1
Registrován: 18 lis 2017, 15:51

jak nastavit pin jako zem?

Příspěvek od lastope1 » 18 lis 2017, 15:56

Zdravím,
Nevím, zda je to možné, ale potřeboval bych nastavit pin jako zem, abych mohl v běhu programu měnít polaritu mezi děma vývody. Kdyby se našel někdo kdo se v tom vyzná, byl bych nadšen.
petr

Wojta
Příspěvky: 184
Registrován: 22 črc 2017, 16:39

Re: jak nastavit pin jako zem?

Příspěvek od Wojta » 18 lis 2017, 19:41

Prakticky se to stane pokud nastavíte pin na LOW pomocí digitalWrite(cislopinu, LOW);
Ale nevím pro jakou přesně aplikaci to chcete. Co timy vývody řídíte atd.
Zkuste to víc popsat. Pokud je budete měnit pomocí pinMode tak to fungovat bude.

martinius96
Příspěvky: 585
Registrován: 01 srp 2017, 19:29
Bydliště: Poprad
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od martinius96 » 18 lis 2017, 21:59

Mňa ešte napadlo (neviem či je to pri všetkých doskách):

Kód: Vybrat vše

pinMode(cislopinu, INPUT_PULLDOWN);   
ATMega (Arduino UNO) má iba interný PULLUP, PULLDOWN nemá, ani to kód neskompiluje.
Ak máte Arduino Uno, tak použite návod od Wojty :)
PullUP drží "za každú cenu" 1 (HIGH)
PullDown drží "za každú cenu" 0 (LOW)

jankop
Příspěvky: 1057
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od jankop » 19 lis 2017, 17:54

PullUp ani PullDown nedrží úroveň za každou cenu a pro zamýšlený účel je to nepoužitelné. Je to interní rezistor, jehož hodnota se často pohybuje v desítkách Kohm.
Prostě se nastaví výstupní pin digitalWrite(cislopinu, LOW);
Nic víc, nic míň. Lépe "zem" udělat nejde.

martinius96
Příspěvky: 585
Registrován: 01 srp 2017, 19:29
Bydliště: Poprad
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od martinius96 » 20 lis 2017, 06:09

jankop píše:
19 lis 2017, 17:54
PullUp ani PullDown nedrží úroveň za každou cenu a pro zamýšlený účel je to nepoužitelné. Je to interní rezistor, jehož hodnota se často pohybuje v desítkách Kohm.
Prostě se nastaví výstupní pin digitalWrite(cislopinu, LOW);
Nic víc, nic míň. Lépe "zem" udělat nejde.
Obrázek
Určite? :-)
Obrázek

Wojta
Příspěvky: 184
Registrován: 22 črc 2017, 16:39

Re: jak nastavit pin jako zem?

Příspěvek od Wojta » 20 lis 2017, 16:48

Nedá se souhlasit s oběma? Řekl bych to takhle:

Pokud napětí mezi piny jen měříte něčím co má vysoký vstupní odpor, řády Mohmů, dalo by se asi využít i pullupu a pulldownu.

Čím bude ale větší zátěž mezi těmi piny (menší odpor), tím bude stoupat úbytek napětí na pullupu a pulldownu. V tomhle případě je mnohem lepší využít digitalWrite.

Jde o to že pokud není potřeba se nějak extrémě starat o ochranu pinů (kterou zajišťuje 1 možnost) tak bych volil tu druhou.

jankop
Příspěvky: 1057
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od jankop » 20 lis 2017, 19:46

To co jsem napsal, pochopitelně platí. nemá smysl filozofovat, jestli je zátěž větší / menší. A už úplně irelevantní je, jaký pulldown si dám do řídící elektrody externího FETu. Přiznám se, že mě dokáže pobavit, když se mě snaží někdo přesvědčovat argumenty ze slabikáře elementární elektroniky. K čemu slouží pullup a pulldown rezistor jsem se dovtípil nejspíš dřív, než ses martinius96 narodil :D
Prostě lepší "zem" než

Kód: Vybrat vše

 digitalWrite(cislopinu, LOW)
udělat na I/O pinu nejde.

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od petan » 20 lis 2017, 21:09

Taky nevím co řešíte... Pokud ze zapne pull-up rezistor, tak se připojí na výstupní pin rezistor (20 - 50 kOhm) pomocí pomocného tranzistoru - viz obrázek. (vychází z Atmel328)
Obrázek

Když je na výstupu hodnota HIGH, tak je hradlo (zde Logic) sepnuté - na výstup jde napětí otevřeným tranzistorem, když je na výstupu LOW, tak je nožička jakoby v luftu. Je třeba použít externí pull-down rezistor, aby byla zajištěna log. 0 na výstupu.


Čistě teoreticky by šlo přepólování výstupu řešit takto:
Je nutné však počítat s tím, že zátěž (RZ) je do série s pull-down rezistorem (Rd), který nesmí být moc malý, aby se nepřetížil výstup procesoru. Samozřejmě, že je lepší použít H-můstek. Nevím, co přesně od toho očekáváš...

Obrázek

jankop
Příspěvky: 1057
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od jankop » 21 lis 2017, 10:06

Dovolím si tvrdit petane, že se zásadně mýlíš. Vůbec celá diskuze je poněkud ujetá. To proto, že pullup / pulldown rezistory se uplatní pouze, když je pin v režimu vstupu. Při výstupu jsou interní rezistory prostě odpojeny, tudíž je nesmyslné je řešit. A prakticky vždy je výstup tvořen komplementárním budičem, který dává relativně "tvrdé" úrovně HIGH i LOW, tudíž není třeba žádného pulldown rezistoru pro dosažení úrovně LOW. Výstupy tedy pracují v obou módech - source i sink. Sem tam může mít MCU speciální output OC, pak je třeba pullup, ale to je naprosto výjímečné a určitě to nebylo předmětem otázky.

Uživatelský avatar
SkullKeep
Příspěvky: 313
Registrován: 23 srp 2017, 18:51
Bydliště: Brno
Kontaktovat uživatele:

Re: jak nastavit pin jako zem?

Příspěvek od SkullKeep » 21 lis 2017, 10:28

Mě napadlo jiné řešení posílat na určitý PIN HIGH a pak přes optočlen (např. PC817A) to uzemnit. A tak se vyhnete případnému odpálení Arduina.
:twisted: :?: :arrow: :geek: P. Q. M.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti