Kdy reaguje reset PIN

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, ...)
Odpovědět
Mau
Příspěvky: 18
Registrován: 11 zář 2020, 15:13
Reputation: 0

Kdy reaguje reset PIN

Příspěvek od Mau » 24 zář 2020, 07:59

Prosím poradit,

chci použít na arduinu reset pin k resetování arduina pomocí jiného řídícího pinu. Reset se provede při logické nule. Všude se píše, že při startu či vypnutí arduina je na všech pinech logická nula, resp. evidentně reset pin je nastaven jako inuput s pullup a když ho zapojíte do nezepnutého/nenastaveného pinu = LOW = reset.

A jak arduino zapnu se zapojeným reset pinem?

Všude se píše, že musíte ovládací pin, kterým řídíte reset nastavit na HIGH - ale kdy? Jak se může nastavit, když vlastně zapnu arduino, v ten okamžik je na reset LOW = reset = restart = na ovládacím pinu je LOW a tak do nekonečna. Dle této logiky prostě nemůže arduino nastartovat, protože je stále reset pin LOW. Ale evidentně to funguje a zapnou lze, když na ovládacím pinu nastavíte HIGH. Ale z toho plyne otázka:

Kdy začne arduino řešit, co je na pinut reset?

Je to až po setup() ? Nebo někdy prostě "později" ? Až dojde k loop() ? Hned to být nemůže, musí tam být prostor k nastavení ovládacího pinu na HIGH.....

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

Re: Kdy reaguje reset PIN

Příspěvek od jankop » 24 zář 2020, 08:34

Všude se píše, že při startu či vypnutí arduina je na všech pinech logická nula
A kde všude se to píše? Většina pinů MCU po resetu je nastavována jako vstup. Tím pádem pomocí pullup nebo pulldown rezistoru můžeš určit jeho výchozí úroveň. Řešíš problém, který neexistuje.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Kdy reaguje reset PIN

Příspěvek od ondraN » 24 zář 2020, 09:35

Pin RESET je vstupní a protože musí mít úroveň H, tak je, většinou, přes rezistor zapojen na napájení čipu. Funkce resetu je asynchronní a je naprosto jedno, jaký program uvnitř běží a v jaké je fázi. Je to prostě záležitost hardware.
Nevím, co tě vede k použití eterního pinu jako reset, ale dá se to udělat i jinak. V programu si definuješ funkci

Kód: Vybrat vše

void(* ResetArduino)(void) = 0;   //SW reset arduina
Je to vlastně pointer na funkci nastavený na adresu 0, kde je uložen tzv. RESET vektor, tedy adresa, kde se začíná po HW resetu.
V programu pak pro provedení resetu jen zavoláš tu funkci

Kód: Vybrat vše

ResetArduino();
a tím se zresetuje stejně, jak pinem RESET.

Mau
Příspěvky: 18
Registrován: 11 zář 2020, 15:13
Reputation: 0

Re: Kdy reaguje reset PIN

Příspěvek od Mau » 24 zář 2020, 09:59

jankop píše:
24 zář 2020, 08:34
A kde všude se to píše?
https://www.theengineeringprojects.com/ ... cally.html - kdekoliv, kde se vytváří takový program, tak první, co se musí udělat, je nastavin pin na HIGH - zde dokonce dříve, než se definu pin mode OUTPUT.....
Když to neudělám, arduino nenaběhne, protože se stále resetuje....
.... Řešíš problém, který neexistuje.
Tak nevím, ale když zapnu Arduino, tak na všech pinech naměřím 0 V - tedy log 0

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Kdy reaguje reset PIN

Příspěvek od ondraN » 24 zář 2020, 10:22

Mau píše:
24 zář 2020, 09:59
.......
Tak nevím, ale když zapnu Arduino, tak na všech pinech naměřím 0 V - tedy log 0
Po zapnutí arduina, jsou všechny piny nastaveny jako vstupní. Mají tedy stav vysoké impedance. Pokud bys na ten vstup dal voltmetr, naměříš nulu, protože tam není injektováno žádné napětí, ne z důvodu 6e by ten vstup byl držený jako výstup na nule. Snadno to ověříš tím, že pin zapojíš přes rezistor na napájení, a najednou tam to napětí naměříš.
Pokud chceš opravdu spínat reset jiným výstupem, stačí, když ho spojíš s RESET vývodem. Nejdříve si na něm nastavíš H a pak ho teprve zapneš jako výstup. Následně ho sepneš na L a arduino se zresertuje. To ti zároveň nastaví ten pin, tkerým jsi reset provedl jako vstupní.

Kód: Vybrat vše

#define RSTPIN		6
setup{
	digitalWrite(RSTPIN,HIGH);
	pinMode(RSTPIN, OUTPUT);
	}
	
loop{
......
	digitalWrite(RSTPIN, LOW); //okamzity HW reset arduina
}

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

Re: Kdy reaguje reset PIN

Příspěvek od jankop » 24 zář 2020, 10:30

Když je pin po resetu nastaven jako ryzí input, tak na něm není definována logická úroveň. Prostě použiješ externí pullup rezistor, který ostatně na pinu RESET stejně musí být. A v programu v části setup() nastavíš pro daný pin hodnotu HIGH a přepneš ho do režimu output.
Jinak ta funkce pro reset, kterou popisuje ondraN, je velmi dobrá.
ondraN byl rychlejší, ale naprosto přesně popsal problém.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Kdy reaguje reset PIN

Příspěvek od pavel1tu » 24 zář 2020, 12:26

ondraN píše:
24 zář 2020, 09:35
Pin RESET je vstupní a protože musí mít úroveň H, tak je, většinou, přes rezistor zapojen na napájení čipu. Funkce resetu je asynchronní a je naprosto jedno, jaký program uvnitř běží a v jaké je fázi. Je to prostě záležitost hardware.
Nevím, co tě vede k použití eterního pinu jako reset, ale dá se to udělat i jinak. V programu si definuješ funkci

Kód: Vybrat vše

void(* ResetArduino)(void) = 0;   //SW reset arduina
Je to vlastně pointer na funkci nastavený na adresu 0, kde je uložen tzv. RESET vektor, tedy adresa, kde se začíná po HW resetu.
V programu pak pro provedení resetu jen zavoláš tu funkci

Kód: Vybrat vše

ResetArduino();
a tím se zresetuje stejně, jak pinem RESET.
děkuji ;)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Mau
Příspěvky: 18
Registrován: 11 zář 2020, 15:13
Reputation: 0

Re: Kdy reaguje reset PIN

Příspěvek od Mau » 24 zář 2020, 14:42

OK, díky všem za odpovědi.

Odpovědět

Kdo je online

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