Grzech
Guest
Sun Nov 12, 2006 11:15 am
Witam grupę!
Ostatnio dużo studiowałem grup, czytałem na temat LPT i jego sterowania,
zaowocowało to napisaniem programu dla XP, wysyłającego dane na wyjście.
Docelowy mój projekt, to obsługa urządzenia nie tylko w kierunku wysyłania
do niego danych, ale także odbioru sygnałów wysyłanych przez urządzenie,
stąd moje pytanie o kwestie realizacji technicznej:
W jaki sposób, fizycznie, urządzenie ma ustawiać bity ? Wiem, że trzeba
podać napięcie logiczne na daną nóżkę, ale skąd to napięcie bezpiecznie
doprowadzić ? Chciałbym, aby była separacja galwaniczna między komputerem, a
urządzeniem. W związku z tym, nie ma problemu z wysyłaniem sygnału - po
prostu wysterowuję transoptor, ten z kolei albo tranzystor, albo przekaźnik.
Natomiast jak wprowadzić w ten sposób dane w drugą stronę (do komputera) ?
Zastanawia mnie też kwestia, czy gdyby podać napięcie na któryś z pinów np.
logiczne "1", a następnie wysterować z komputera ten sam pin i nadać mu
logiczne "0", to czy takie zabiegi są dla płyty głównej bezpieczne ? -
chodzi mi tu o realizację dwukierunkowej transmisji, czy jeśli dany bit ma
pełnić rolę bitu wejściowego, to trzeba to deklarować w jakiś posób ?
Z góry dziękuję za wszelkie wskazówki.
xaveri
Guest
Sun Nov 12, 2006 2:52 pm
Dane do komputera wprowadza się tak, że na porcie ustawiasz 1 i zwierasz
przez rezystancję do masy a nie podajesz 1 na port... zreszta w prockach
jest dokladnie tak samo 1 na port i zwarcie to impuls wejsciowy.
X
Greg(G.Kasprowicz)
Guest
Sun Nov 12, 2006 5:07 pm
Quote:
Dane do komputera wprowadza się tak, że na porcie ustawiasz 1 i zwierasz
przez rezystancję do masy a nie podajesz 1 na port... zreszta w prockach
jest dokladnie tak samo 1 na port i zwarcie to impuls wejsciowy.
w 8051 i pochodnych (chociaz nie wszystkich, np FX2)
w porzadniejszych sa oddzielne rejestry I/O
w przypadku LPT mozliwe ze w biosie musisz ustawic tryb w ECP/EPP
Grzech
Guest
Sun Nov 12, 2006 6:15 pm
Quote:
Dane do komputera wprowadza się tak, że na porcie ustawiasz 1 i zwierasz
przez rezystancję do masy a nie podajesz 1 na port... zreszta w prockach
jest dokladnie tak samo 1 na port i zwarcie to impuls wejsciowy.
A mniej więcej jaka to musi być rezystancja ? - bo rozumiem, że nie za mała,
żeby nie przeciążyć portu.
Gregor
Guest
Sun Nov 12, 2006 6:43 pm
"xaveri" napisal:
Quote:
Dane do komputera wprowadza się tak, że na porcie ustawiasz 1 i zwierasz
przez rezystancję do masy a nie podajesz 1 na port... zreszta w prockach
jest dokladnie tak samo 1 na port i zwarcie to impuls wejsciowy.
Jeszcze takiego portu rownoległego nie widziałem - standardowy port rownoległy
nie jest w stanie czytac na liniach danych, jesli sie chce przeslac dane do
komputera trzeba je wysyłać w 4-bitowych paczkach po liniach kontrolnych.
Praktycznie każdy nowoczesny (no - w miarę nowoczesny, w coraz większej częsci
najnowszych kompów niema portu rownoległego

)ma jednak kontroler portu
rownleglego który może pracować w trybach rozszerzonych epp i/lub ecp - w takiej
konfiguracji program może zmieniać "kierunek" bitów danych. Całkiem użyteczny
opis jak się to robi pod adresem
http://www.beyondlogic.org/spp/parallel.htm
(swoja droga - wspominaja tam o twojej metodzie - z komentarzem "or a input
only port, once you blow up the latches output"
GRG
J.F.
Guest
Sun Nov 12, 2006 7:01 pm
On Sun, 12 Nov 2006 18:43:08 +0100, Gregor wrote:
Quote:
"xaveri" napisal:
Dane do komputera wprowadza się tak, że na porcie ustawiasz 1 i zwierasz
przez rezystancję do masy a nie podajesz 1 na port... zreszta w prockach
jest dokladnie tak samo 1 na port i zwarcie to impuls wejsciowy.
Jeszcze takiego portu rownoległego nie widziałem - standardowy port rownoległy
nie jest w stanie czytac na liniach danych,
Funkcja czytania jest, pytanie czy zrobi to z linii czy z rejestru.
A jak zrobi z linii to czy uda sie go nie spalic przy "przeciaganiu"
linii.
Na niektorych podobno dzialalo, w tym oryginalnym ibm PC.
Niektorzy nawet twierdza ze dwukierunkowosc [ale uczciwa] byla
projektowana, ale komus przeszkadzala. Faktycznie - kwestia jednej
sciezki.
Quote:
Na ttl miala wieksze szanse zadzialac. A od lat to chyba jednak cmos.
J.
Grzech
Guest
Mon Nov 13, 2006 4:14 pm
Quote:
nie jest w stanie czytac na liniach danych, jesli sie chce przeslac dane
do
komputera trzeba je wysyłać w 4-bitowych paczkach po liniach kontrolnych.
Ciekawy link o LPT dałeś - czegoś takiego szukałem. W skutek przeczytania
zacząłem się bawić. Moja płyta główna ma 4 tryby pracy do wyboru: SPP, EPP,
ECP, ECP+EPP. Obecnie mam wybrany tryb standardowy SPP. Wykonałem
następujące czynności:
1. Dołączyłem miernik do jednej z linii danych
2. Uruchomiłem program - wpisałem na D0-D7 jedynki - na wyjściu: 4,55 [V]
3. Teraz wpisałem na D0-D7 same zera - na wyjściu: 0,08 [V]
4. Następnie ustawiłem bit 5 rejestru BAZOWY+2 na 1 (czyli niby włączam
bi-directional) - na wyjściu danych pojawia się 4,55[V]
5. Sprawdzam programowo (czytam port), otrzymuje wynik: FF, czyli wszędzie
na liniach danych widzi jedynki, mimo, że na linie danych przez rejestr
bazowy wcześniej wpisałem same zera.
6. Próbuję wpisywać na rejestr bazowy (linie danych) różne kombinacje
binarne - czytanie danych z portu cały czas daje wynik FF - dopiero po
wyłączeniu bi-directional program wczytuje wpisane do rejestru bazowego
wartości.
Tak więc bi-directional u mnie działa - teraz pytanie:
Czy fakt, że na wyjściach D0-D7 program odczytuje jedynki, to przyczyna
standardu TTL (czyli wiszące wejścia są jak jedynki) ? Czy może to efekt
działania PULL-UPów ? Bo gdybym chciał czytać, to nie wiem teraz, czy robić
pull-upy i zwierać do masy, czy te pull-upy są już podpięte ?
A teraz inne pytanie ...O powyższe kwestie to bardziej z ciekawości się
pytam, bo nie widzę zastosowania takiego naprzemiennego czytania/zapisywania
w mojej aplikacji i urządzeniu. Natomiast zainteresowałeś mnie tymi liniami
kontrolnymi. Z odczytaniem ich nie ma problemu. Jak w tym przypadku
zrealizować fizyczne podanie na nie odpowiedniego stanu ? Połączyć masę
mojego urządzenia z masą na LPT i podać napięcie w standardzie TTL ? A może
jakaś separacja galwaniczna ? Jakieś propozycje ?
Z góry dzięki za wszystkie wyjaśnienia. Pozdrawiam!
Gregor
Guest
Mon Nov 13, 2006 7:16 pm
"Grzech" napisal:
Quote:
Tak więc bi-directional u mnie działa - teraz pytanie:
Czy fakt, że na wyjściach D0-D7 program odczytuje jedynki, to przyczyna
standardu TTL (czyli wiszące wejścia są jak jedynki) ? Czy może to efekt
działania PULL-UPów ?
Wejścia TTL zachowują się jakby miały wbudowane pull-up - czy zachowanie twojego
portu jest spowodowane tym że ma "prawdziwe" wejścia TTL czy producent dodał
pull-up niema większego znacznia
Quote:
Bo gdybym chciał czytać, to nie wiem teraz, czy robić
pull-upy i zwierać do masy,
Pull-up oznacza "podciągnięty do stanu wysokiego", jeśli chcesz "ściągnąć do 0"
potrzebujesz pull-down

Przy pierwszych eksperymentach z portem równoległym
proponowałbym unikanie bezpośredniego przyłączania pinów portu do zasilania
(obojętne czy chodzi o 5V czy mase) - przylutuj do pinów rezystorki (jakieś
1kohm powinny być ok.) i przez nie zwieraj do masy lub zasilania a nie będziesz
musiał dwa razy sprawdzać czy pin jest w trybie IN czy OUT (pamiętaj że jedna z
linii kontrolnych zwraca sygnał zanegowany!)
Quote:
A teraz inne pytanie ...O powyższe kwestie to bardziej z ciekawości się
pytam, bo nie widzę zastosowania takiego naprzemiennego czytania/zapisywania
w mojej aplikacji i urządzeniu. Natomiast zainteresowałeś mnie tymi liniami
kontrolnymi. Z odczytaniem ich nie ma problemu. Jak w tym przypadku
zrealizować fizyczne podanie na nie odpowiedniego stanu ? Połączyć masę
mojego urządzenia z masą na LPT i podać napięcie w standardzie TTL ?
To najprostsze rozwiązanie
Quote:
A może jakaś separacja galwaniczna ? Jakieś propozycje ?
Separacja galwaniczna jest dobrym pomysłem - szczególnie do eksperymentów
Pamiętaj jednak że nie czyni ona "niezniszczalnym". Najprostsze rozwiązanie
to płytka uniwersalna z kilkoma transoptorami i baterią płaska do zasilania
strony PC (zasilanie można też pociągnąć z wolnej wtyczki zasilacza lub
portu USB ale jeszcze nie widziałem żeby ktoś to zrobił elegancko i bezpiecznie,
a do zabawy bateria wystarczy).
GRG