Strona 1 z 1

porzadkowanie danych do przesylu na port szeregowy

: 12 lut 2006, 23:57
autor: moonkey
temat dotyczy tego urzadzonka ktore chce zrobic:

http://www.elektroda.pl/rtvforum/viewto ... highlight=

otoz w calym urzadzeniu bede mial okolo 10 (moze wiecej) fototranzystorow, ktorych stany bede musial przeslac do komputera. postanowilem wykorzystac do tego port szeregowy. nie wiem jednak jak te dane uporzadkowac i wyslac na port szeregowy. padl pewien pomysl z ust mojego kuzyna
dorob za kazdym fototranzystorami kondensatory o roznych pojemnosciach. beda sie wyladowywac w roznym czasie, dzieki czemu bedziesz mial wysylany jeden bit w danym czasie
czy to bylo by skuteczne? jesli tak, czy to jest najlepsze rozwiazanie? (nie wydaje mi sie).

: 13 lut 2006, 11:40
autor: ludas
ehh.. Zabłądziłem od tych wszystkich postów...

Moja propozycja: wykorzytaj jakiś rejestr PISO (Paralel In Serial Out)
Może jeszcze tutaj znajdziesz coś co ci pomoże: Odczyt stanu jednego bitu z portu COM
----
Zresztą możesz do tego celu bez problemu wykorzystać port LPT.
Do dyspozycji masz 8 bitów wejściowych i cztery bity dwukierunkowe,
więc razem możliwość podłączenia 12 sygnałów.

: 13 lut 2006, 17:13
autor: ggg1986
wydaje mi się że wejść jest 5, a nie 8. I raczej naraz 12 sygnałów nie pobierze. Ale te 10 możesz pobrać na 2 razy po 5. Myśle że można zrobic tak: Bierzesz 5 bramek AND. jedną końcówkę dajesz do tego fototranzystora i pozostałe 5 łączysz ze sobą i podpinasz je do jednego pinu wyjścia z portu szeregowego. Oczywiście te wyjścia z bramek And podpinasz do 5 wejść, tak samo robisz z drugą piątką fototranzysorów. Teraz dajesz na tym pinie wyjścia 1 i odczytujesz zawartośc pierwszych pięciu, później dajesz 1 na drógim pinie i odczytujesz kolejne 5. Biorąc pod uwagę że jest 8 wejść możesz odczytać 8x5=40 wartości, zakładając oczywiście że komputer jest w stanie czasowo wyrobić, zanim nie nadejdzie kolejna partia danych i nie zmienią się stany na fototranzystorach, ale to chyba lepsze od tych kondensatorów.

: 13 lut 2006, 17:58
autor: ludas
ggg1986 pisze:wydaje mi się że wejść jest 5, a nie 8. I raczej naraz 12 sygnałów nie pobierze.
faktycznie, nie wiem skąd mi się uroiło to 8 bitów wejściowych :oops:
LPT FAQ

Moim zdaniem pomysł z podzieleniem odczytu na dwie części jest całkiem dobry,
nie jestem tylko pewien czy jeden pin wyjściowy zdoła zasilić 5 bramek, ale zawsze
możesz wykorzystać pozostałe wyjście np. po jednym na każdą bramkę, dzięki temu
będziesz miał wiekszą dowolność przy odczytywaniu stanu poszczególnych bitów.

: 13 lut 2006, 22:41
autor: MarK
ludas pisze:faktycznie, nie wiem skąd mi się uroiło to 8 bitów wejściowych
wcale się nie "uroiło", bo rzeczywiście można odczytać conajmniej 8 bitów. większość "dzisiejszych" portów lpt ma dwukierunkowy rejestr danych. żeby włączyć tą możliwość trzeba ustawić jeden bit w rejestrze statusu lpt (nie pamiętam teraz który, ale w razie potrzeby mogę poszukać :-) )
sprawdziłem to "samodzielnie" - swego czasu przez port lpt podłączałem przetwornik adc (MAX197). końcówki D0-D7 przetwornika podłączyłem właśnie do rejestru danych (końcówki 2 - 9 portu lpt).

: 15 lut 2006, 13:55
autor: Zink
Niestety nie wszystkie nowe płyty to mają. Ja kiedyś zrobiłem urządzenie, które komunikowało się z PC-tem właśnie za pomocą dwukierunkowego portu danych. W trakcie projektowania padła mi płyta główna, musiałem kupić nową, i ta nowa już nie miała tej opcji.

Tak na marginesie: gdyby ktoś potrzebował prostego monitora portu LPT, to napisałem takie coś (w załączniku). Podaje on także nazwy sygnałów, bity w rejestrach oraz numery nóżek, któe odpowiadają sygnałom. Program jest mojego autorstwa, używam w nim nie mojej biblioteki Inpout32.dll, która też jest dostępna za darmo.

A jeśli chodzi odczytywanie stanów z wielu czujników, to można użyć rejestrów przesuwających (np. 74HC165), zamieniających dane równoległe na szeregowe. Można je łączyć szeregowo usykując w ten sposób praktycznie dowolną liczbę wejść, a z portu będą użyte tylko jedno wyjście (zegar) i jedno wejście (dane), ewentualnie jeszcze jedno wyjście do sterowania. Przy zwiększaniu liczby wejść będzie się tylko zwiększał czas potrzebny na odczytanie wszystkich.
Innym sposobem jest zastosowanie multipleksera (na przykład 4051), który ma 8 wejść i jedno wyjście. Dzięki niemu można programowo przełączać z którego wejścia chcemy aktualnie coś odczytywać. Wadą jest to, że oprócz wejścia danych z portu musimy wyprowadzić sygnały ustawiające numer odczytywanego wejścia w kodzie binarnym, dla multipleksera 8-wejściowego będą to 3 sygnały (2^3 = 8), dla 16-wejściowego - 4. W związku z tym, że potrzebujesz więcej niż 8 wejść, to trzebaby było łączyć dwa multipleksery 8-wejściowe (16-wejściowe istnieją, ale bardzo trudno je dostać), co wymagałoby dodatkowej bramki NOT i dodatkowego 4-tego wyjścia z portu. Dlatego chyba w Twoim przypadku najlepszym wyjściem będzie rejestr presuwający.