sygnal logiczny do komputera
sygnal logiczny do komputera
witajcie
badając urządzenie muszę przesłać pomierzone sygnały do komputera
sygnały są logiczne 0 i 1 o wartości napięcia okolo 3,4 V
wartości są pobierane przy pomocy sondy logicznej
w jaki sposób przesłać odczytane dane do komputera (rs232. lpt) aby następnie z przesłanych danych zrobić użytek - program albo w javie albo w c++
z góry dziękuje za odpowiedzi
maciej
badając urządzenie muszę przesłać pomierzone sygnały do komputera
sygnały są logiczne 0 i 1 o wartości napięcia okolo 3,4 V
wartości są pobierane przy pomocy sondy logicznej
w jaki sposób przesłać odczytane dane do komputera (rs232. lpt) aby następnie z przesłanych danych zrobić użytek - program albo w javie albo w c++
z góry dziękuje za odpowiedzi
maciej
Re: sygnal logiczny do komputera
Użyucie złącza LPT pozwoli PC-towym programom wczytać stan logiczny wystawiony przez sondę, ale należy pamiętać, że port LPT w swej idei jest portem wyjściowym (z punktu widzenia PC-ta), więc naturalną jego funkcja jest sterowanie "czymś" przyłączonym do złącza PLT. Oprócz wysgałów wyjściowych, to złącze oferuje również sygnały wejściowe. W nowszych rozwiązaniach port oferuje rozszerzone tryby.mati82 pisze:witajcie
badając urządzenie muszę przesłać pomierzone sygnały do komputera
sygnały są logiczne 0 i 1 o wartości napięcia okolo 3,4 V
wartości są pobierane przy pomocy sondy logicznej
w jaki sposób przesłać odczytane dane do komputera (rs232. lpt) aby następnie z przesłanych danych zrobić użytek - program albo w javie albo w c++
z góry dziękuje za odpowiedzi
maciej
W przypadku użycia transmisji szeregowej, to konieczne będzie użycie jakiegoś mikrokontrolera (zakładam, że sona TTL nie ma wbudowanego interfejsu szeregowego). Wyjście z sondy może być próbkowane przez mikrokontroler i stan może być transmitowany PC-ta via RS232. Sposób kodowania jest kwestią umowną. Możesz przykładowo dla stanu 0 transmitować znak "0" i analogicznie dla 1 znak "1". Pozostaje kwestia jeszcze prędkości transmisji. Czas trwania transmisji jednego znaku wynosi ileś (w zależności od prędkości transmisji) i jeżeli ilość próbek z sondy jest duża, to może okazać się, że ten kanał komunikacyjny jest za wolny.
Szkoda, że nie zostało napisane ile tych sygnałów logicznych jest.
Dla maksymalnie trzech można wykorzystać linie sterujące przepływem na porcie RS232,
czyli CTS,DSR oraz linię "dzwonka" RI (Ring Indicator).
Jeżeli piszesz w Javie, to po podłączeniu się do portu i odpowiednim skonfigurowaniu event-listenera
dostaniesz meldunki, że któraś z tych linii zmieniła stan:
http://java.sun.com/products/javacomm/r ... Event.html
i można to już jakoś wykorzystać do zbierania danych.
N.
Dla maksymalnie trzech można wykorzystać linie sterujące przepływem na porcie RS232,
czyli CTS,DSR oraz linię "dzwonka" RI (Ring Indicator).
Jeżeli piszesz w Javie, to po podłączeniu się do portu i odpowiednim skonfigurowaniu event-listenera
dostaniesz meldunki, że któraś z tych linii zmieniła stan:
i można to już jakoś wykorzystać do zbierania danych.
N.
Faktycznie, pomysł godny uwagi szczególnie ze względu na "czas transmisji" takiego sygnału. Można zaprogramować PC-towego UART'a na przerwania od zmiany stany linii modemowych. Sam UART wygeneruje przerwanie natychmiast, pozostaje jedynie kwestia jak długo będzie ten sygnał obrabiał "mikry soft".tasza pisze:Szkoda, że nie zostało napisane ile tych sygnałów logicznych jest.
Dla maksymalnie trzech można wykorzystać linie sterujące przepływem na porcie RS232,
czyli CTS,DSR oraz linię "dzwonka" RI (Ring Indicator).
Jeżeli piszesz w Javie, to po podłączeniu się do portu i odpowiednim skonfigurowaniu event-listenera
dostaniesz meldunki, że któraś z tych linii zmieniła stan:
http://java.sun.com/products/javacomm/r ... Event.html
i można to już jakoś wykorzystać do zbierania danych.
N.
sygnały logiczne wyglądają tak:
http://img266.imageshack.us/img266/6343/listinglu6.png
wszystkie są potrzebne jednocześnie, nie mogę pojedynczo przesyłać, musi być zestaw
a zestaw :
miltuplekser > max3232 > rs232 > pc
to zadziała ?
http://img266.imageshack.us/img266/6343/listinglu6.png
wszystkie są potrzebne jednocześnie, nie mogę pojedynczo przesyłać, musi być zestaw
a zestaw :
miltuplekser > max3232 > rs232 > pc
to zadziała ?
To już lepiej tak: sygnały równelegle (jest 8 sztuk) na port do procka -> procek wysyła szeregowo -> MAX232 -> COMx w PC. Każdy kanał pomiarowy sondy by odpowiadał poszczególnym bitow w transmitowanym znaku, czyli przesłanie jednego bajtu obrazowałoby 8 linii z sondy w danej chwili pomiarowej. Tak nie powinno nic zginąć.mati82 pisze:sygnały logiczne wyglądają tak:
http://img266.imageshack.us/img266/6343/listinglu6.png
wszystkie są potrzebne jednocześnie, nie mogę pojedynczo przesyłać, musi być zestaw
a zestaw :
miltuplekser > max3232 > rs232 > pc
to zadziała ?
Nadal nie wiadamo z jaką szybkością trzeba próbkować wyjście sondy TTL. Z rysunku nie wywnioskowałem o czasie trwania impulsów, a próbkować trzeba gęściej by go nie zgubić.
Lub: bezpośrednio (no, może przez jakiś buforek typu 74HC541) na piny danychgaweł pisze:To już lepiej tak: sygnały równelegle (jest 8 sztuk) na port do procka -> procek wysyła szeregowo -> MAX232 -> COMx w PC.
D0....D7 portu LPT, potem taki algorytm w dowolnym języku
Kod: Zaznacz cały
1) deklaracja bufora na dane o wymaganym rozmiarze
2) skanowanie
od n = 0 do rozmiar bufora
wartość z portu --> bufor [ n ]
opóżnienie ile potrzeba (w us, ms, s )
3) prezentacja
od n = 0 do rozmiar bufora
od s = 0 do 7
jeżeli ( bufor [ n ] & (1 << s) ) != 0
rysuj stan_H sygnału o numerze s dla próbki n
a jak nie
rysuj stan_L sygnału o numerze s dla próbki n
N.
częstotliwość próbkowania powinna być około 1 ms,gaweł pisze:To już lepiej tak: sygnały równelegle (jest 8 sztuk) na port do procka -> procek wysyła szeregowo -> MAX232 -> COMx w PC. Każdy kanał pomiarowy sondy by odpowiadał poszczególnym bitow w transmitowanym znaku, czyli przesłanie jednego bajtu obrazowałoby 8 linii z sondy w danej chwili pomiarowej. Tak nie powinno nic zginąć.
Nadal nie wiadamo z jaką szybkością trzeba próbkować wyjście sondy TTL. Z rysunku nie wywnioskowałem o czasie trwania impulsów, a próbkować trzeba gęściej by go nie zgubić.
o jakim procku myślisz aby zastosować zamiast multipleksera ?
myślałem o prostym multiplekserze z wbudowanym zegarem
Praktycznie każdy procek AVR, ale jeżeli nie masz praktyki z prockami, to lepiej rozważ propozycję Taszy, bo procek ... prockiem ale poźniej trzeba będzie dla jego napisać odpowiedni program.mati82 pisze:częstotliwość próbkowania powinna być około 1 ms,
o jakim procku myślisz aby zastosować zamiast multipleksera ?
myślałem o prostym multiplekserze z wbudowanym zegarem
Jest to raczej kwestia punktu widzenia. Dla mnie transmisja szeregowa jest naturalna. Rozwiązuje wiele problemów. Przychodzi znak i masz przerwanie. W LPT-cie przerwania to tak ... nie specjalnie są sympatyczne, a to w dużej mierze rozwiązuje problem synchronizacji, chociaż pozostaje jeszcze metoda pool'ingowa.tasza pisze:Zamiast sobie zadanie uprościć, to robicie wszystko aby to skomplikować.
A tak, więc pozwól, że przedstawię swój.gaweł pisze:Jest to raczej kwestia punktu widzenia.
Warunki brzegowe (bazując na wypowiedziach powyżej):
1. 8 sygnałów binarnych (w miarę kompatybilnych z TTL)
2. wymagana jest akwizycja wszystkich jednocześnie (czyli próbka=bajt )
3. okres próbkowania 1ms (czyli f=1kHz)
4. dane przesłać do PC przy pomocy dostępnych sprzęgów RS232/LPT
Niewiadome:
1. maksymalna ilość próbek, choć to jest akurat bez znaczenia
Rozwiązanie, które ja zaproponowałam wymaga:
1. tylko i wyłącznie napisania programu na PC (Java/C++)
wspomniany układ buforujący '541 jest tylko dla bezpieczeństwa portu równoległego i można go pominąć.
(a taki prosty program, wraz z okienkowym interface w Java/Swing jest do napisania
w około godziny, z czystej ciekawości wczoraj wieczorem to sprawdziłam...)
Wady mojego rozwiązania to:
1. bez dodatkowego wsparcia sprzętowego - obsługa 8 (no, może 10 sygnałów binarnych)
2. graniczną f akwizycji danych wyznaczy wydajność programu i maszyny, na której on działa
Powyższe jednak nie przeszkadza - patrz: warunki brzegowe.
Drugie rozwiązanie, które tu omawiamy wymaga:
1. zbudowania układu z wykorzystaniem MCU (nieważne jakiego)
2. oprogramowania powyższego, aby zbierał dane i odsyłał do PC
3. napisania programu na PC, by dane odbierał i....pokazywał/archiwizował/cokolwiek
Jak widać, jest to relatywnie więcej pracy...
N.
A, to jest nowość. Tylko generuje dwa pytania:mati82 pisze:aplikacja w pc już istnieje, potrzebuje tylko danych wejściowych
a) ta aplikacja zbiera dane via RS232 i je obrabia
b) tylko pokazuje/obrabia już zgromadzone dane i wejście dla niej trzeba przygotować?
Nie wiem co inni, ale dla mnie to dziwadło.mati82 pisze:nadal nie rozumiem, dlaczego odrzucacie pomysł z multiplekserem?
Niemniej jednak - przykładowy schemat w załączniku.
Działanie:
Kostka 4051 to (de)multiplekser 1/8, wybór wejścia kombinacją stanów A,B,C
7493 to licznik binarny, wykorzystałam drugą połówkę, więc liczy do 8
MAX232 -wiadomo - konwersja napięć TTL/RS232
I teraz tak:
Na początku zerujemy licznik, wysterowując linię RTS
potem generujemy osiem impulsów na linii DTR, co nam kolejno wybierze wejścia sygnałowe
Po każdym impulsie na DTR badamy stan sygnału CTS i w ten sposób kompletujemy
kolejne bity w bajcie.
Na koniec zapisujemy gdzieś tak zgromadzoną próbkę.
N.
- Załączniki
-
- cudak1.gif
- (9.86 KiB) Pobrany 8722 razy
to znaczy aplikacja jest produktem zewnętrznym i do nich należy wykorzystać sygnały które doprowadzę do rs232, wiec sprawę aplikacji pomijamy teraztasza pisze:A, to jest nowość. Tylko generuje dwa pytania:
a) ta aplikacja zbiera dane via RS232 i je obrabia
b) tylko pokazuje/obrabia już zgromadzone dane i wejście dla niej trzeba przygotować?
dziękuje za układ, przyda się
jednak napisałem w pierwszym poście że sygnały mają wartość okolo 3,4 V, czy w takiej sytuacji nie powinniśmy użyć układu MAX 3232 ?
Tak myślę, że jednak MAX232 potraktuje 3.4V jako poprawną jedynkę logiczną.mati82 pisze:ednak napisałem w pierwszym poście że sygnały mają wartość okolo 3,4 V, czy w takiej sytuacji nie powinniśmy użyć układu MAX 3232 ?
Ewentualnie możesz sygnał "dane" pomiędzy '4051 a MAX-em podciągnąć do VCC
rezystorem jakieś 10K, ale to chyba nie będzie konieczne...
N.