Ostatnio zacząłem bawić się w programowanie portu LPT. Jestem na etapie wysyłania bitów (umiem zapalać i gasić diody, etc). Przeglądając sieć, wpadłem na pomysł zaprogramowania wyświetlacza. Niestety - stary komp posiadający port LPT stoi teraz w szkole i pełni rolę serwera. W domu mam tylko laptopa z usb.
I moje pytanie - czy ta (
formatting link
) przejściówka działa na zasadzie emulacji portu LPT (czy mogę się odnosić do niej i wysyłać dane tak jak do zwykłego portu LPT)? Czy ten (
formatting link
) wyświetlacz zadziała na niej? Używam Linuksa (Ubuntu).
Pozdrawiam Konrad95
Didn't find your answer? Ask the community — no account required.
A
Adam Dybkowski
konrad95 pisze:
Nie zadziała. Potrzebujesz do laptopa karty PCMCIA LPT. Ale jeżeli jest to nowy sprzęt z ExpressCard to karty LPT nie zadziałają (w trybie sterowania indywidualnymi bitami). Już lepiej kup wyświetlacz z USB i już. Szukaj hasła "CrystalFontz".
Wyświetlacz wygląda standardowo. Czyli na powyższym konwerterze USB->LPT nie zadziała.
K
konrad95
Adam Dybkowski pisze:
Mam Compaq Presario F730US - ten model nie ma ani PCMCIA ani ExpressCard :/ Czyli pozostało mi chyba tylko sprowadzenie z powrotem kompa ze szkoły ;) Co do wyświetlacza na USB - ja nie chcę kupić wyświetlacza żeby mi coś pokazywał non-stop, tylko żeby nauczyć się programować tego typu rzeczy.
Dzięki za zainteresowanie wątkiem :)
Pozdrawiam Konrad95
B
BartekK
Adam Dybkowski pisze:
Oj zadziała(łby) gdyby napisać odpowiedni soft + parę kabelków mądrze skręcić. Na wyjściu przejściówki USB-LPT masz wszsytkie potrzebne linie LPT (DATA0-DATA7, sterowanie itp), trzeba tylko przekonać przejściówkę że na jej końcu wisi drukarka (i przyjmuje dane z linii D0-D7), oraz wysyłać do tej drukarki odpowiednie "znaki" odpowiadające odpowiednim stanom pinów D0-D7, ale przyjmując sterowanie 4bit oraz brak odczytu (tylko zapis) do lcd - to wystarczy.
Sam swego czasu tak zmajstrowałem sterowanie "na piechotę" tyle że w windowsie, wybierając "typowa drukarka - tylko tekst" na danym porcie, i wysyłając odpowiednio spreparowane pliki do tej drukarki. Problemem jest tylko to, że driver może obcinać wszystko co poza znakami w ASCI oraz kodami sterującymi - trzeba odpowiednio wybrać linie portu, by operować w zakresie dostępnych kombinacji bitowych. Albo zmajstrować mały kawałek procka który to zamieni. Ale z tego co pamiętam to w linuksowym cat plik > /dev/usblp0 nie cięło niczego, wszystko ładnie szło co do bitu, jedynie trzeba było dobrze ustawiać PE/Busy/Ack
K
konrad95
BartekK pisze:
Masz może jakiś schemat jak to połączyć? Działało by to gdybym napisał własny program w C? Chodzi mi czy będzie śmigać wysyłanie bitów funkcją outb().
Pozdrawiam Konrad95
T
T.M.F.
konrad95 pisze:
Kup lepiej jakis uklad FTDI, FTDI232 lub pochodne, bedziesz mogl wykorzystac USB, uniwersalne niezalezne od systemu drivery i programowanie sie uprosci. Ilosc linii IO ktore ten uklad oferuje jest wystarczajaca.
M
Mirek
W repo masz program lcd4linux, niestety na przejściówce USB-LPT mogą być problemy, ale warto to sprawdzić. Funkcja outb() raczej nie zadziała, ale możesz tak jak pisze kolega BartekK wysyłać dane do /dev/usblp0, co do podłączenia to pewnie
4-bitowo (bo nie będzie z czego sterować "RS" wyświetlacza): D0-D3 wyświetlacza do D0-D3 lpt, "Enable" do "STROBE" lpt (STROBE powinno dawać automatycznie impuls po zapisie do /dev/usblp0), "RS" wyświetlacza np do D4 lpt. "R/W" można do masy (do wyświetlacza tylko zapisujemy). Pozostaje tylko ułożyć sobie odpowiednią sekwencję bajtów do sterowania
- tutaj uwaga: niektóre wyświetlacze dziwnie się inicjalizują zwłaszcza w trybie 4 bitowym (trzeba mu wysłać trochę śmieći i poczekać, następnie zadać tryb 4-bitowy i znów poczekać - OIDP)
Mirek.
B
BartekK
konrad95 pisze:
Raczej nie ma co liczyć że outb() ci zadziała. To zupełnie inny sposób wysyłania danych ;) outb() możesz sięgać (jak ioperm zezwoli) do portów (adresów w przestrzeni i/o) fizycznych w komputerze, czyli w zasadzie wyłącznie podpiętych przez ISA/PCI/PCIe (i mobilne mutacje expresscard,Pcmcia) - urządzenie (tutaj port lpt) musi być w "hardwarowej" przestrzeni adresowej "wprost". A to co ja proponuje, to sterowanie przez wysyłanie danych (bajtów, całych, odpowiednio złożonych) do "urządzenia" wirtualnego w systemie, występującego przeważnie jako /dev/usblp0 albo /dev/usb/lp0 (zależnie od systemu i kernela). Tak samo jakbyś te bajty wysyłał do pliku, a potem hex-edytorem obejrzał, czy odpowiednie bity się zgadzają. Pomijając kwestię delayów między kolejnymi wysłanymi ("wydrukowanymi" do /dev/usblp0) bajtami, bo lcd tak szybko jak lpt działa, karmić się danymi nie da)
formatting link
Upraszczając trochę - jak sobie załączysz na taką przejściówkę LPT drukarkę jakąś starszą-hardwarową, np jakąś igłówkę, i zrobisz komendę "cat plik.txt /dev/usblp0", a plik bedzie zawierac jeden bajt równy "B" (literę B), to komputer będzie czekał aż na porcie LPT zniknie sygnał BUSY (drukarka zajęta gdy =1, drukarka gotowa gdy zwarte do masy) a potem na liniach danych D0-D7 ustawi się 0x42 (czyli 0100 0010 binarnie) i drukarka wydrukuje odpowiedni znaczek, potwierdzi krótkim sygnałem (zwaciem do gnd) na linii /ACK - i nic więcej się nie stanie.
J
J.F.
Niemal gwarantowane ze nie zadziala.
Tylko ze przejsciowka nie wysle nastepnych bajtow dopoki drukarka nie potwierdzi ze odebrala poprzedni.
Trzeba bedzie jakis sprytny impulsatorek podlaczyc do lini BUSY, a moze INTR ..
J.
M
Mirek
Z BUSY to problemu nie będzie - wystarczy podać na stałe NOT-BUSY, gorzej może być faktycznie z ACK (o ile jest niezbędny) - może wystarczy podać zanegowany sygnał STROBE?
Mirek.
B
BartekK
Jest niezbędny, musi się pojawić, i to z pewnym opóźnieniem (a nie od razu, bo lcd nie zdąży przyjąć danych, a port już zmieni stan)
Dobry pomysł, a jeszcze lepszy - przed negatorem dać jakiś układ opóźniający RC.
A
Adam Dybkowski
BartekK pisze:
No to już może lepiej kupić najtańszy konwerter USB->RS232 (na Allegro kabelki USB do starych komórek po ok. 5 zł) i dokleić do niego ulubiony mikrokontroler (kolejne 5 zł) - oby nóżek starczyło na podłączenie LCD. Standardowy w tym przypadku protokół CrystalFontz jest w sieci wystarczająco dobrze opisany, można znaleźć też przykłady softu go obsługującego (tzn. gadające z komputerem przez UART oraz z równoległym modułem LCD). Zaletą jest dodatkowo zasilanie wyświetlacza z 5V (USB) - to rozwiązanie wygrywa z LPT.
Z
Zbych
Adam Dybkowski pisze:
[...]
Możesz podać przykład takiego konwertera z wyprowadzonym zasilaniem? Miałem w łapach, ze 3 różne konwertery do nokii i niestety żaden nie miał wyprowadzonego zasilania z USB.
J
J.F.
Dawno temu to Busy byl niezbedny, ale to bylo pare windowsow temu :-)
J.
A
Adam Dybkowski
Zbych pisze:
:-o Ale dlaczego chcesz stuprocentowego gotowca? Jeżeli brakuje jednego przewodu to go dolutuj i po sprawie. Zasilanie 5V ze złącza USB (AFAIR pin nr 1) i tak musi trafiać na scalak konwertera USB-UART, jeżeli trzeba to go wyprowadź na zewnątrz. I tak przecież musisz czymś zastąpić tą wtyczkę Nokii, Samsunga czy inną. Najlepiej w ogóle rozbebeszyć kompletnie gotowy konwerter i zintegrować ze swoim urządzeniem (w jednej obudowie obok wyświetlacza), obok dodasz ładne gniazdko USB-B i będzie gites.
Z
Zbych
Adam Dybkowski pisze:
Bo mi się odciski robią od roboty :-)
Konwerter najczęściej jest zalany razem ze wtykiem USB. Wybebeszanie mija się z celem, a tym bardziej wbudowywanie tego w urządzenie.
A
Adam Dybkowski
Zbych pisze:
No to kup konwerter USB-UART zbudowany na bazie układu FTDI FT232. Do dostania m.in. w Propox. Płytka z gniazdkiem USB-B i scalakiem, bez obudowy. Idealne do zintegrowania ze swoim urządzeniem. Tyle że kosztuje ze 30-50 zł (dawno nie patrzyłem na ich stronę www).
Z
Zbych
Adam Dybkowski pisze:
Kabel od telefonu 5..10zł. Chyba jednak zostanę przy tym rozwiązaniu.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.