logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Odczyt stanu przycisków przez RS232 i kontroler - jak zacząć?

xPatryk 27 Paź 2004 23:30 4121 26
  • #1 942766
    xPatryk
    Poziom 15  
    Posty: 208
    Ocena: 7
    Witam !

    Chciałbym Was spytać, w jaki, najlepiej najprostszy sposób, można przy pomocy komputera odczytać naciśnięcie jakiegoś przycisku (chodzi mi o zamknięcie lub otwarcie obwodu, może to być również czujnik ruchu.)... ?

    chodzi mi o metodę pozwalającą odczytać stan kilkunastu wyłączników (zwarte lub rozwarte) przy pomocy kontrolera podłączonego przez złącze rs232 do pc... jak się do tego zabrać ?
    domyślam się, że należało by tu wykorzystać jakiś przetwornik A/C, a jeśli tak, to jaki i jak ?

    Pozdrawiam i proszę o odpowiedź.
  • #2 942796
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    xPatryk napisał:
    Witam !
    ...
    zamknięcie lub otwarcie obwodu, może to być również czujnik ruchu.)... ?
    ...
    domyślam się, że należało by tu wykorzystać jakiś przetwornik A/C, a jeśli tak, to jaki i jak ?

    Pozdrawiam i proszę o odpowiedź.


    Przetwornik to by się przydał gdyby trzeba było zmierzyć np. siłę nacisku na taki przycisk ale by zinterpretować tylko 2 stany(wł/wył) wystarczy sam procek(mikrokontroler) :wink:

    Pzdr.
    Piotrek Sz.
  • #3 942822
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Stan zwarty lub rozwarty to dwa stany, co jest świetnie rozumiane w światku procesorów, nie potrzeba żadnych przetworników A/C, choc niewątpliwie na upartego jest to możliwe. Piny większości mikrokontrolerów są programowalne jako wejścia i mogą odczytywać stan wyłącznika, jeżeli jego zwarcie zmienia stan z 0 na 1 lub odwrotnie. Rozwiązać można też ten problem na samych układach TTL(74XX...) lub PLD(PAL, GAL itp., ale chodzi pewnie o jak najtańsze rozwiązanie) + MAX232(lub kogos z jego rodzinki), który jest najlepszym kompanem jeżeli chodzi o majstrowanie przy porcie szeregowym)
  • #4 942994
    rtom
    Poziom 18  
    Posty: 458
    Pomógł: 6
    Ocena: 18
    Mozna bez uzywania przetwornika, jezeli to maja byc czujniki dwstanowe. Zakladam ze polaczenie z PC przez rs232 ma na celu, przesyalnie stanu czujnika ktory zadzialal i jego numeru. Jesli o to chodzi to musi byc jeszcze jakas aplikacja na PC odbierajaca te sygnaly.
    Czyli reasumujac musisz sie zdecydowac na wybor mikrokonrolera (8051 maja standardowo 32 linie I/O), zaprogamowac procek by odbieral stany z czujnikow (warto by tu zrobic izolacje galwaniczna na transoptorach oraz dac schmitta MM74HC14 zeby pieknie "wyluskal 0 lub 1") i wysylal stan i numer czujnika do PC.
  • #5 943329
    frohme
    Poziom 21  
    Posty: 421
    Pomógł: 25
    Ocena: 15
    Dla twojego problemu to chyba tak:
    1) zdecyduj jak wiele przycisków jest ci potrzebnych. 2) ustaw je w matrycę np. 3 x 4 dla 12 przycisków. 3) teraz znowu decyzja które z linii będą wyjściami i mają wystawiać sygnał "0" - przyjmijmy, że jedna z w/w 3 linii 4) wystawiasz na jedną z nich "0" na pozostałych "1" 5) odczyt na 4 liniach tam gdzie "0" to przycisk wciśnięty.
    To w zarysie dla jednego klawisza, gdy mogą być wciśnięte równocześnie inne ( a będą zgodnie z prawem Murphy'ego) to już problem innego rodzaju jak nie doprowadzić do ogłupienia procesora.
  • #6 943555
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    rtom napisał:
    8051 maja standardowo 32 linie I/O

    Oczywiście nie wszystkie z tej linii, podobnie jak nie wszystkie AVR, z popularnych Atmega128 mają 54 piny do dyspozycji 128KB Flash 4KB RAM, 4KB EEPROM, cena jednak w okolicach 80 PLN
    Najwiecej informacji na stronie producenta, w której zawarte są powyższe linki, proszę się nie sugerować moją subiektywną opinią... :)
    frohme napisał:
    Dla twojego problemu to chyba tak:
    1) zdecyduj jak wiele przycisków jest ci potrzebnych. 2) ustaw je w matrycę np. 3 x 4 dla 12 przycisków. 3) teraz znowu decyzja które z linii będą wyjściami i mają wystawiać sygnał "0" - przyjmijmy, że jedna z w/w 3 linii 4) wystawiasz na jedną z nich "0" na pozostałych "1" 5) odczyt na 4 liniach tam gdzie "0" to przycisk wciśnięty.
    To w zarysie dla jednego klawisza, gdy mogą być wciśnięte równocześnie inne ( a będą zgodnie z prawem Murphy'ego) to już problem innego rodzaju jak nie doprowadzić do ogłupienia procesora.

    Wyjścia trzeba jeszcze podłączyć przez diody, bo w wypadku wciśnięcia niektórych sąsiednich klawiszy doprowadzi to do zwarcia wyjścia o stanie "1" z wyjsciem o stanie "0", co na zdrowie uP(mikroprocesorowi) nie wyjdzie. No i wejścia podciągnąć do "1" rezystorem np. 10k, lub w konfiguracji pinów procesora (jeżeli coś takiego przewidział producent).
  • #7 947678
    xPatryk
    Poziom 15  
    Posty: 208
    Ocena: 7
    Hej !

    dzięki za szybką odpowiedź !

    frohme: nie chodzi mi o stworzenie czegoś w rodzaju klawiatury, tylko niezależnych wejść.

    potrzebuję w chwili obecnej około 32 wejść, ale z możliwością dalszej rozbudowy (większa ilość w przyszłości)...


    chyba jednak źle przedstawiłem problem...

    chodzi mi o zintegrowanie ich z systemem sterującym domem...
    mam już cały układ sterujący na bazie układu opisanego w dziale Download (Sterownik rs232) wykorzystujacego rejestry przesówne (chwilowo 64 wyjscia).
    całość współpracuje z komputerem PC pod Linuxem...
    Teraz potrzebuję stworzyć system wejść zbierający dane z czujników - przycisków (np. wyłączniki oświetlenia, itd.), czujniki ruchu, czujniki dymu, itd...

    dlatego proszę Was o pomoc i wytłumaczenie w sposób zrozumiały, jak należy podejść do problemu i taki mikrokontroler do systemu wejść wykonać...

    pozdrawiam i proszę o odpowiedź
    Patryk

    ps. mam nadzieje, że zbytnio nie zamieszałem ?
  • #8 947896
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    No to idąc za ciosem na wejścia tez dac rejestr przesuwny, tyle ze z wejściem równoległym i szeregowym do łączenia w kaskady jak np. 74HC(T)166
    Wiecej opisów rejestrów przesuwnych na tej stronie (nawet rejestry 64-bitowe)
  • #9 948619
    natalia.
    Poziom 14  
    Posty: 65
    Pomógł: 2
    Jeżeli przyciski są daleko oddalone od mikrokontrolera, to ja bym proponowała (jako uzupełnienie koncepcji kolego LightHouser) użycie jakichkolwiek transoptorów cyfrowych (przykładowo 6N137) przed rejestrem wejściowym.
  • #10 948771
    MMarek17
    Poziom 19  
    Posty: 260
    Pomógł: 20
    Ocena: 8
    Moja propozycja to magistala 1-Wire. Jest sporo ciekawych układów na 1-wire (f-ma Dallas). Ponadto w domku zasięg 1-wire powinien wystarczyć. Dla odczytu stanu linii można użyć np. DS2408 (8-bitowy I/O na 1-Wire).
    Magistala 1-wire może być połaczona do jednego uC (mikrokontrolera) a dalej RS-em (lub innym interfejsem) do PC-ta lub wprost do PC-ta (trzeba samemu oprogramować).
    Należy pamiętać że RS232 ma stosunkowo mały zasięg i w pewnym momencie może pojawić się problem z błędami i spowolnieniem transmisji. Lepiej jesli chodzi o zasięg wypada RS485 lub 1-wire.
    Przy odczycie stanu przycisków należy pamiętać o zakłóceniach oraz stanach nieustalonych w chwili zwierania i rozwierania styków.

    Może jednak rozejżeć się za istniejącymi rozwiązaniami. Nie chodzi tu o zakup modułów ale wybór standardu. Istnieją już znormalizowane systemy "sieci" domowych służących do celów sterowania, monitoringu itd. pod hasłem "inteligentny dom" (http://www.eib.pl/). Bodaj w EP 01 i 02/2004 był opisany system EIB.
  • #11 948963
    bu-sob
    Poziom 15  
    Posty: 58
    Pomógł: 13
    LightHouser napisał:
    z popularnych Atmega128 mają 54 piny do dyspozycji 128KB Flash 4KB RAM, 4KB EEPROM, cena jednak w okolicach 80 PLN

    W propox mozna kupic za 36 netto (a jak nie chcesz paragonu to i brutto)
  • #12 949370
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    No cóż, pisałem cene, jaką mi przedstawił sprzedawca w moim mieście jakieś 4 miesiące temu... :) Możliwe że gdzieś w Krakowie będzie jeszcze taniej. ;)
  • #13 949407
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    W załączeniu masz moje rozwiązanie klawiatury. Ta obsługuje matrycę 4x5 znaków ale jak nietrudno zauważyć może obsługiwać do 5x8 znaków
    Załączniki:
    • Klawiatura.zip (6.43 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #14 949462
    monjack
    Poziom 12  
    Posty: 33
    Pomógł: 2
    Ocena: 2
    hmmm nikt tu nei wtracil pewnego waznego problemu, a mianowicie o fachowej nazwie "debounce". Tzn. ze w momencie wcisniecia przycisku an styku pojawiaja sie drgania i uP odbiera to jako kiklakrotne wcisniecie, wiec muszisz to rozwiazac sprzetowo albo programowo. Programowo przez odczekanie ok. 30 ms po zadzialaniu przycisku zanim odczytasz stan.
  • #15 949761
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    GienekS napisał:
    W załączeniu masz moje rozwiązanie klawiatury. Ta obsługuje matrycę 4x5 znaków ale jak nietrudno zauważyć może obsługiwać do 5x8 znaków

    Nie rozumiem idei tego postu, autor wątku wyraźnie napisał, że nie jest zainteresowany klawiaturą...
  • #16 950407
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Przecież takie rozwiązanie w niczym nie przeszkadza zamias klawisza podpiąć sygnał z czujnika, który jest zakończony stykiem. Tymbardziej że rozwiązanie to nie eliminuje naciśnięcia kilku sygnałów jednocześnie.
    A zastosowanie układu z 40 wejściami wymagałoby użycia sporego układu.
  • #17 950486
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Jeżeli poszczególne czujniki są rozsiane po całej chatce, nie wyobrażam sobie takiej plątaniny 64 przewodów(potrzebne jest obsłużenie 32 czujników, a każdy ma 2 końce)... :), jak to np. serwisować ? 3, 4 przewody jako magistrala da się jeszcze przeżyć. Tak więc w tym konkretnym zastosowaniu raczej jakaś magistrala szeregowa + ewentualne zasilanie...
  • #18 950982
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Jeżeli tak rozpatrywać to zagadnienie to najlepiej zastosować linie składającą się z 4 przewodów, 2 zasilanie i 2 linie RS485. Wtedy możesz to rozrzucić nawet po całym bloku i do każdego procka można pdpiąć tyle przycisków ile się zmieści albo dołożyć następny układ (procek + RS485).
  • #19 951102
    MMarek17
    Poziom 19  
    Posty: 260
    Pomógł: 20
    Ocena: 8
    monjack napisał:
    hmmm nikt tu nei wtracil pewnego waznego problemu, a mianowicie o fachowej nazwie "debounce". Tzn. ze w momencie wcisniecia przycisku an styku pojawiaja się drgania i uP odbiera to jako kiklakrotne wcisniecie, wiec muszisz to rozwiazac sprzetowo albo programowo. Programowo przez odczekanie ok. 30 ms po zadzialaniu przycisku zanim odczytasz stan.


    Powiem - nieskromnie - że o tym pisałem tj. o stanach nieustalonych przy naciskaniu i zwalnianiu klawiszy.
    W przypadku dużych długości przewodów dochodzi również wpływ zakłóceń na "wiszące" piny.
    Problem xPatryka to nie tyle "jak odczytać stan przycisku/czujki" ale jaki system wybrać by uchonić się przed masą problemów związanych z zakłóceniami i iloscią kabli. Dlatego ponownie i uparcie sugeruję przyglądnięcie się specjalizowanym domowym systemom i magistralom. Tam nie ma problemu z rodzajem i ilością czujników oraz elementów wykonawczych. Systemy takie są bardzo elastyczne, a ponadto ilość przewodów jest minimalna.
  • #20 951591
    rtom
    Poziom 18  
    Posty: 458
    Pomógł: 6
    Ocena: 18
    GienekS napisal:
    Cytat:

    Jeżeli tak rozpatrywać to zagadnienie to najlepiej zastosować linie składającą się z 4 przewodów, 2 zasilanie i 2 linie RS485. Wtedy możesz to rozrzucić nawet po całym bloku i do każdego procka można pdpiąć tyle przycisków ile się zmieści albo dołożyć następny układ (procek + RS485).


    Masz jakis pomysl jak zbudowac uklad interfejsu RS 485, ew. converter 232/485, bo chyba kupowane nie wchodza w gre bo sa dosc drogie!
  • #21 951760
    natalia.
    Poziom 14  
    Posty: 65
    Pomógł: 2
    A do czego chcesz zastosować konwerter rs232/485?
  • #22 951836
    rtom
    Poziom 18  
    Posty: 458
    Pomógł: 6
    Ocena: 18
    Transmisja na duze ogleglosci ok 1000-1200m. Szukam czegos w stylu max232 (jakeigos max485).
  • #23 951931
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    To w takim wypadku wystarczy symetryczna linia (+,-,GND na stronę) sterowana wzmacniacami operacyjnymi, bedącymi w przeciwfazie z dodatnim sprzężeniem zwrotnym (histereza) z dobranym napięciem wyjściowym do długości linii jako nadajnik, a jako odbiornik 2 komparatory o parametrach do tego przystosowanych, rezystor terminujący, dopasowywany równiez do długości linii i układ logiczny reagujący, zmianą stanu na właściwy, tylko na symetryczny sygnał.
  • #25 958786
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    rtom napisał:
    Transmisja na duze ogleglosci ok 1000-1200m. Szukam czegos w stylu max232 (jakeigos max485).
    Hmm, a może MAX485, albo ADM485, wariantów jest baaaardzo dużo.
  • #26 1040316
    doktor_piotrus
    Poziom 12  
    Posty: 10
    Mam podobny problem i czytając poprzednie wypowiedzi niczego w sumie sie nie dowiedziłem. Hm

    No może po przeczytaniu postu jednego z kolegów na temat układu wymuszajacego sprzętowo lub programowo stan zwarty wyłącznika do chwili odczytania jego stanu przez komputer (hm ale nie oto sądzę chodzi).

    Może inaczej się zapytam
    Chodzi o układ połaczony z komputerem który wymusi jakoby odczyt (np.przewranie komputera w danym momencie) a nie zczytanie stanu wyłacznika co określony czas (co wg mnie zabiera wolność czasu procesora i jego zapętlenie się poprzez odczyt stanu portu).

    Myślałem nad zastosowaniem gameportu ale już sam nie wiem.
  • #27 1040402
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    doktor_piotrus napisał:
    [...]Chodzi o układ połaczony z komputerem który wymusi jakoby odczyt (np.przewranie komputera w danym momencie) a nie zczytanie stanu wyłacznika co określony czas (co wg mnie zabiera wolność czasu procesora i jego zapętlenie się poprzez odczyt stanu portu).
    Myślałem nad zastosowaniem gameportu ale już sam nie wiem.

    1. Standardowy gameport nie ma możliwości generowania żadnego przerwania, natomiast port szeregowy (COM) - tak.
    2. Dobrze byłoby oddzielić dwie kwestie :
    - Program w komputerze moze sie co jakiś czas, np. 1s(co przy dzisiejszych sprzętach nie zajmie to nawet 1 % mocy obliczeniowej) pytać mikroprocesora (np. przez RS-a), jakie ostatnio były wciskane klawisze.
    - Program w mikroprocesorze obsługiwac klawiaturę też może na przerwaniach czasowych. Nikt nie każe realizować algorytmu obsługi klawiszy poprzez notoryczne sprawdzanie w pętli... Polecam ten link na temat programowania : "Programowanie optymalne w mikrokontrolerach"
    Dokładniejszych informacji nie udzieliłem, bo pytanie nie było precyzyjnie sformułowane w języku technicznym i dość enigmatyczne.
    Pozdr, LightI

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy metody odczytu stanu kilkunastu do kilkudziesięciu przycisków lub czujników dwustanowych (np. wyłączników, czujników ruchu) za pomocą mikrokontrolera podłączonego do komputera przez interfejs RS232. Wskazano, że do odczytu stanów zwartych/rozwartych nie jest potrzebny przetwornik A/C, wystarczy mikrokontroler z programowalnymi wejściami cyfrowymi. Proponowane rozwiązania obejmują wykorzystanie rejestrów przesuwnych (np. 74HC166) do rozszerzenia liczby wejść, izolację galwaniczną za pomocą transoptorów (np. 6N137) oraz eliminację drgań styków (debounce) programowo lub sprzętowo. Zwrócono uwagę na problem zakłóceń i długości przewodów, sugerując zastosowanie magistrali szeregowej o większym zasięgu, np. RS485 lub magistrali 1-Wire z układami DS2408. Dyskutowano także o organizacji wejść w matryce i konieczności stosowania diod zabezpieczających oraz rezystorów podciągających. Wskazano, że system powinien być skalowalny i elastyczny, z możliwością integracji z systemem sterowania domem. Poruszono kwestie programowego odczytu stanów na przerwaniach oraz problemów z wielowątkowością i efektywnością odczytu. Wskazano na gotowe rozwiązania i standardy systemów inteligentnego domu (np. EIB). W dyskusji pojawiły się także sugestie dotyczące konwerterów RS232/RS485 (MAX232, MAX485, ADM485) oraz budowy własnych układów do transmisji na duże odległości.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA