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).
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.
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.
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
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.
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)
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.
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?
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.
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.
:-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.
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).
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.