Skocz do zawartości

Wejścia cyfrowe - podstawowe pytania


EMMB

Pomocna odpowiedź

Witam.

Jestem nowym posiadaczem Arduino Uno i właśnie wczoraj ukończyłem "Kurs Arduino – #3 – UART (komunikacja z PC), zmienne".

Nie potrafię jednak iść dalej, ponieważ mam jeszcze pewien problem z wejściami cyfrowymi.

Nie wiem, czy coś pominąłem, czy nie potrafię szukać, ale nie jestem pewny paru kwestii i nie chciałbym zrobić już na wstępie z mojej płytki odpadu.

Dowiedziałem się, że z powodu pewnych zakłóceń stan nie jest określony (tzn. na wejściu jest zawsze więcej niż 0V). Dowiedziałem się, że funkcją "INPUT_PULLUP" niweluje te zakłócenia, ale wszystkie ćwiczenia polegają na zwieraniu z masą. Mam pewien projekt, ale będzie on wymagał żeby używać napięcia jako sygnału wejściowego, stąd też parę zasadniczych pytań z mojej strony:

1)Można zamiast z masą zwierać z 5V używając tylko funkcji "INPUT_PULLUP"? Ma to jakieś znaczenie? Czy funkcja ta z góry ustala stan wejścia wysoki?

2)Napięcie można podawać na każdy cyfrowy I/O? TX i RX też?

3)Jest jakiś sposób, by zabezpieczyć wejście przed przypadkowym uszkodzeniem (przepięciem), żeby nie wpływało to na funkcjonalność (np.szybkość odczytu) ?

Z góry dziękuję.

Pozdrawiam forumowiczów.

Link do komentarza
Share on other sites

Dzięki za szybką odpowiedź. Nie ukrywam, że pokrzyżowało mi to trochę plany. Dopiero jak zacząłem zabawę z Arduino, dowiedziałem się, że obsługa wejść cyfrowych nie jest tak prosta i oczywista jak myślałem. 😟

Mam jeszcze pytania odnośnie punktu 1.

1)Jest jakiś wykaz Arduino które obsługują "pull down", czy trzeba przeglądać dokumentację każdego z osobna?

2)Tak naprawdę, to chcę jako stan wysoki podać napięcie ok.24V, trochę już o tym czytałem... ale jestem bardzo początkujący. Do tego celu stosuje się, z tego co do tej pory wyczytałem, dzielniki napięcia, bądź rezystory (jeśli dobrze kojarzę). Więc nasunęło mi się pytanie czy można upiec dwie pieczenie na jednym ogniu tzn.zastosować rezystor który obniży napięcie w ten sposób aby nastanie niskim było pewne 0V, a przy wysokim nie przekraczało 5V? Jeśli tak, to w jaki sposób go podłączyć (szeregowo z z sygnałem, czy z wejścia do masy) i jak go obliczyć? Może sam dzielnik rozwiąże mój problem i wymusi 0V na wejściu (o tym jeszcze nie czytałem)?

Jeśli plotę głupoty, to mi wybaczcie, ale jest to moja pierwsza w życiu tego typu zabawa. Napisałem już mały programik, który nawet działa zgodnie z moimi założeniami 😯😃, ale wszystko posypało mi się przez ten nieszczęsny trudny do osiągnięcia stan niski...😩.

Pozdrawiam...

Link do komentarza
Share on other sites

1 godzinę temu, EMMB napisał:

1)Jest jakiś wykaz Arduino które obsługują "pull down", czy trzeba przeglądać dokumentację każdego z osobna?

Raczej takiego Arduino moim zdaniem nie znajdziesz.

1 godzinę temu, EMMB napisał:

zastosować rezystor który obniży napięcie w ten sposób aby nastanie niskim było pewne 0V

Może się nie znam ale z prawa Ohma U=I*R wynika, że musiałbyś mieć R=0 - jak to sobie wyobrażasz? Pewne 0V raczej trudno będzie uzyskać. Stan logiczny 0 odpowiada tutaj napięciu z zakresu bodajże 0 - 0,5V.

Możesz także użyć klucza tranzystorowego by dopasować sobie różne poziomy napięć. Tranzystorem możemy włączyć z Arduino np. przekaźniki na 12V więc pewnie można i w drugą stronę. Możesz także użyć transoptora by galwanicznie rozdzielić te 2 układy o różnych poziomach napięć.

Edytowano przez Belferek
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

3 godziny temu, Belferek napisał:
5 godzin temu, EMMB napisał:

1)Jest jakiś wykaz Arduino które obsługują "pull down", czy trzeba przeglądać dokumentację każdego z osobna?

Raczej takiego Arduino moim zdaniem nie znajdziesz.

A to dlaczego nie? Choćby pierwsze z brzegu Arduino Zero ma pull-up i pull-down na wszystkich pinach.

4 godziny temu, Belferek napisał:

Może się nie znam ale z prawa Ohma U=I*R wynika, że musiałbyś mieć R=0 - jak to sobie wyobrażasz? Pewne 0V raczej trudno będzie uzyskać. Stan logiczny 0 odpowiada tutaj napięciu z zakresu bodajże 0 - 0,5V.

To ciekawe, możesz pokazać obliczenia?

Generalnie jak masz 24V albo więcej, to raczej optoizolator będzie najbezpieczniejszy. Zależy jeszcze trochę co to za sygnał, może napisz coś więcej co próbujesz zrobić.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Kolega EMMB pisze:

13 godzin temu, EMMB napisał:

chcę jako stan wysoki podać napięcie ok.24V, trochę już o tym czytałem... ale jestem bardzo początkujący. Do tego celu stosuje się, z tego co do tej pory wyczytałem, dzielniki napięcia, bądź rezystory (jeśli dobrze kojarzę). Więc nasunęło mi się pytanie czy można upiec dwie pieczenie na jednym ogniu tzn.zastosować rezystor który obniży napięcie w ten sposób aby nastanie niskim było pewne 0V

No to jeśli mowa o rezystorach i dzielniku napięcia to pewnie do obliczeń wykorzystałby coś takiego:

Screen-2020-10-03_08-39-32.thumb.jpg.30b95869cae7f4fd46db6d94da889b35.jpg

Chce uzyskać Uwy = 0V przy Uwe=24V. No to podstaw te dane do wskazanego równania, a najlepiej pokaż jak z dzielnika uzyskać pewne 0V.

7 godzin temu, deshipu napisał:

Choćby pierwsze z brzegu Arduino Zero ma pull-up i pull-down na wszystkich pinach

No tak moje niedopatrzenie - cały czas Arduino kojarzy mi się z ATmegą.

Edytowano przez Belferek
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Jeżeli są Arduino, które obsługują pull-down, to myślę, że część mojego problemu rozwiąże. Poszukam na internecie i rozeznam temat.

Jeśli chodzi o te "pewne zero", to być może źle się wyraziłem. Chodzi mi oczywiście o pewny stan niski na wejściu.

Już tłumaczę:

Mam instalację wody deszczowej. Dwa zbiorniki a w nich pływaki i pompy. Instalacja jest na 24V (transformator) i chciałem podpiąć pod sygnał wyjścia z tych pływaków Arduino, po to, aby widzieć który z pływaków jest zadziałany, bo czasem się zawieszają. Najprostszym sposobem wydawało mi się podpiąć pod wyjścia z pływaków, obniżyć napięcie i wprowadzić na wejście cyfrowe. Jeśli na wejściu pojawi się obniżone napięcie z pływaka to mi zasygnalizuje, że jest pełny zbiornik. Dlatego zależało mi aby normalnie był stan niski i żeby mogło przychodzić napięcie, które jest wykorzystywane w pływakach do sterowania pompami. Odcinki, pomiędzy pływakami, a szafą sterowniczą są dość odległe i obawiam się, przy stanie rozwartym pływaków jakieś napięcie występować na powrocie będzie i to trudne do przewidzenia. Odwracanie logiki wydaje mi się w tym wypadku mało pewne. 

12 godzin temu, Belferek napisał:

Możesz także użyć klucza tranzystorowego by dopasować sobie różne poziomy napięć. Tranzystorem możemy włączyć z Arduino np. przekaźniki na 12V więc pewnie można i w drugą stronę. Możesz także użyć transoptora by galwanicznie rozdzielić te 2 układy o różnych poziomach napięć.

 

8 godzin temu, deshipu napisał:

Generalnie jak masz 24V albo więcej, to raczej optoizolator będzie najbezpieczniejszy.

Na razie powyższe powyższe wypowiedzi brzmią dla mnie trochę kosmicznie, ale będą bardzo pomocne jak będę zgłębiał temat obniżania napięcia. Na chwilę obecną jeszcze tkwię na etapie nieszczęsnego stanu niskiego.

Na tym etapie wydaje mi się najsensowniejsze kupić płytkę z pull-down i coś do separacji wchodzących napięć.

Dobrze zrozumiałem? To najlepsze rozwiązanie?

Link do komentarza
Share on other sites

Ja mam kilka uwag.

Po pierwsze, pull-up czy pull-down jest konieczny tylko wtedy, gdy po drugiej stronie możesz mieć otwarty układ — rozwarte styki niepodłączone do niczego. Jeśli po drugiej stronie jest optoizolator, przełącznik dwustanowy przełączający między napięciem a masą, albo jakieś inne urządzenie podające stan wysoki lub niski, to nie musisz się martwić.

Po drugie, rezystor podciągający czy ściągający może być zewnętrzny. Kupowanie specjalnie innej płytki tylko dlatego, że nie chcemy dokładać do układu jednego rezystora wydaje mi się złym pomysłem.

Po trzecie, zawsze można odwrócić logikę przy pomocy bramki NOT. Taka bramka może też nam posłużyć jako bufor do "czyszczenia" sygnału, żeby zawsze mieć albo pełne 0 albo 5V i nic pomiędzy.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

To ja tylko dorzucę jedną: dla początkującego najbezpieczniejszym rozwiązaniem jest chyba optoizolator. Co najwyżej jak coś pokiełbasi to sfajczy transoptor za złotówkę a nie całe Arduino. Aha, i można użyć wewnętrznych pull-upów 😉

A przy okazji - będzie to bardziej odporne na jakieś zakłócenia.

Edytowano przez ethanak
Link do komentarza
Share on other sites

To wszystko na początku wydawało mi się bardzo proste. Kupię płytkę, napiszę prosty programik: jak 5V na wejściu, to zaświeć diodę i będę przez tydzień pękał z dumy jaki to jestem dobry. Okazuje się jednak, że wiem, że nic nie wiem i muszę jeszcze dużo poczytać zanim nawet zacznę zadawać pytania, bo części odpowiedzi na razie nawet nie rozumiem 😩.

Poczytam trochę o tym optoizolatorze.

32 minuty temu, deshipu napisał:

Po drugie, rezystor podciągający czy ściągający może być zewnętrzny.

O tym również muszę trochę poczytać, bo na chwilę obecną za dużo na ten temat nie wiem. Jeśli jest to zwykły rezystor, to jak obliczyć jego wartość i jak go podpiąć, żeby działał jako pull-down.

 

38 minut temu, deshipu napisał:

o pierwsze, pull-up czy pull-down jest konieczny tylko wtedy, gdy po drugiej stronie możesz mieć otwarty układ

Czyli jeśli zastosuję optoizolator, to nie potrzebuję pull-up czy pull-down?

 

40 minut temu, deshipu napisał:

rozwarte styki niepodłączone do niczego

Taka sytuacja występowałaby gdybym robił to według mojego pierwszego założenia: "podłącze przewód do powrotu pływaka obniżając napięcie z 24V na 5V" i wtedy musiał bym zastosować rezystor, bądź funkcję pull-up(down)?

Reasumując, jeśli wszystko dobrze zrozumiałem, to jak zastosuję optoizolator to Arduino domyślnie będzie miało na wejściu stan niski, czy wysoki, a jak przyjdzie napięcie na ten optoizolator, to ten stan się zmieni na przeciwny i wszystko będzie działać.

36 minut temu, ethanak napisał:

Co najwyżej jak coś pokiełbasi to sfajczy transoptor za złotówkę a nie całe Arduino

i będzie najbezpieczniejsze.😃

Link do komentarza
Share on other sites

5 godzin temu, EMMB napisał:

Jeśli jest to zwykły rezystor, to jak obliczyć jego wartość i jak go podpiąć, żeby działał jako pull-down.

Jak to zwykle bywa z rezystorami, z prawa Ohma. Napięcie znasz, decydujesz jaki prąd ma płynąć gdy guzik jest wciśnięty i podstawiasz. Zazwyczaj tak naprawdę nikt tego nie liczy w przypadku przycisków jakoś specjalnie, tylko daje się coś pomiędzy 10kΩ a 100kΩ. Wbudowany rezystor w Arduino ma około 40kΩ. Podłącza się go pomiędzy nóżką a masą (wtedy jest pull-down) albo między nóżką a zasilaniem (wtedy jest pull-up).

5 godzin temu, EMMB napisał:
6 godzin temu, deshipu napisał:

rozwarte styki niepodłączone do niczego

Taka sytuacja występowałaby gdybym robił to według mojego pierwszego założenia: "podłącze przewód do powrotu pływaka obniżając napięcie z 24V na 5V" i wtedy musiał bym zastosować rezystor, bądź funkcję pull-up(down)?

Wtedy i tak miałbyś tam jakiś dzielnik napięcia, z którego dolny rezystor już działa jak pull-down.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.