sygnal logiczny do komputera

Tutaj mozesz poruszać tematy ogólne powiązane z elektroniką, np. dyskusje na temat podzespołów, układów, zasad ich działania. Czyli można pisać o wszystkim czego nie da się przyporządkować do innych działów.
mati82
-
Posty: 6
Rejestracja: 19 mar 2007, 22:04

sygnal logiczny do komputera

Post autor: mati82 » 19 mar 2007, 22:08

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

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Re: sygnal logiczny do komputera

Post autor: gaweł » 20 mar 2007, 12:54

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
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.
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.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 20 mar 2007, 14:10

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:
:arrow: http://java.sun.com/products/javacomm/r ... Event.html
i można to już jakoś wykorzystać do zbierania danych.

N.

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 20 mar 2007, 14:32

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:
:arrow: http://java.sun.com/products/javacomm/r ... Event.html
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".

mati82
-
Posty: 6
Rejestracja: 19 mar 2007, 22:04

Post autor: mati82 » 20 mar 2007, 15:46

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 ?

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 20 mar 2007, 15:56

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 ?
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ć.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 20 mar 2007, 16:09

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.
Lub: bezpośrednio (no, może przez jakiś buforek typu 74HC541) na piny danych
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
o, coś takiego.....

N.

mati82
-
Posty: 6
Rejestracja: 19 mar 2007, 22:04

Post autor: mati82 » 20 mar 2007, 20:06

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ć.
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

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 20 mar 2007, 20:57

Zamiast sobie zadanie uprościć, to robicie wszystko aby to skomplikować.
Ok, powodzenia.

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 21 mar 2007, 10:49

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
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.
tasza pisze:Zamiast sobie zadanie uprościć, to robicie wszystko aby to skomplikować.
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
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 21 mar 2007, 11:39

gaweł pisze:Jest to raczej kwestia punktu widzenia.
A tak, więc pozwól, że przedstawię swój.

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.

mati82
-
Posty: 6
Rejestracja: 19 mar 2007, 22:04

Post autor: mati82 » 21 mar 2007, 11:51

mimo wszystko nie chce korzystać z LPT, wole na rs232

aplikacja w pc już istnieje, potrzebuje tylko danych wejściowych

nadal nie rozumiem, dlaczego odrzucacie pomysł z multiplekserem?

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 21 mar 2007, 12:54

mati82 pisze:aplikacja w pc już istnieje, potrzebuje tylko danych wejściowych
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ć?
mati82 pisze:nadal nie rozumiem, dlaczego odrzucacie pomysł z multiplekserem?
Nie wiem co inni, ale dla mnie to dziwadło.
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 8723 razy

mati82
-
Posty: 6
Rejestracja: 19 mar 2007, 22:04

Post autor: mati82 » 21 mar 2007, 13:06

tasza 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ć?
to znaczy aplikacja jest produktem zewnętrznym i do nich należy wykorzystać sygnały które doprowadzę do rs232, wiec sprawę aplikacji pomijamy teraz


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 ?

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 22 mar 2007, 14:57

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 ?
Tak myślę, że jednak MAX232 potraktuje 3.4V jako poprawną jedynkę logiczną.
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.

ODPOWIEDZ