Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] LPT jako RS232.

przemo.t 29 Wrz 2004 17:56 3543 8
  • #1 29 Wrz 2004 17:56
    przemo.t
    Poziom 27  

    Witam..
    Mam nastepujacy problemik, mianowicie nie mam portu rs232 (laptop) a chcialbym sie skomunikowac przez ten port z mikrokontrolerem.
    Czy jest mozliwosc uzycia do tego celu portu LPT?? Myslalem tak sobie zeby wykorzystac pin np: ACT dla RX i DB0 dla TX czy to ma sens??Chodzi raczej o strone programowa w C++ Buider, czy ten standardowy Timer jest na tyle szybki zeby zczytac dane z RS, jaka by mogla byc maksymalna predkosc RSa dla takiego rozwiazania??
    Jak ten problem rozwiazac programowo, licze na wasze wskazowki i/lub kawalki kodu
    Dodam ze sprawa roznicy napiec na LPT i RS232(-12V, 12V) nie ma znaczenia bo mikrokontroler i tak ma 5V i 0V tak ja LPT. Nie satysfakcjonuja mnie takze rozwiazania juz podawane typu przejsciowki USB->RS, USB->LPT.
    Z gory gdzieki za zainteresowanie
    Pozdrawiam Przemek

    Zamykam. - arnoldziq

    0 8
  • #2 29 Wrz 2004 18:48
    Xitami
    Poziom 29  

    w hipermarkiecie dostaniesz za niewielką kasę port RS z wtyczką (od strony komputera) USB, i gadasz z nim przez api windows jak z portem szeregowym

    0
  • #3 29 Wrz 2004 22:02
    przemo.t
    Poziom 27  

    Wiem ze cos takiego istnieje zreszta pisalem o tym w poscie poprzednim! Nie widzialem tanszych niz 50zl, troche szkoda mi wydac ta kase szczegolnie ze bede tego potrzebowal tylko do jednego celu.

    Moze macie jakiec propozycje, inne propozycje...

    0
  • #4 30 Wrz 2004 10:17
    Anonymous
    Użytkownik usunął konto  
  • #5 30 Wrz 2004 10:36
    przemo.t
    Poziom 27  

    dzieki tjanusz
    Poszukam tego komponentu i postaram sie cos wykombinowac.
    Pozdrawiam

    0
  • #6 30 Wrz 2004 14:02
    BoskiDialer
    Poziom 34  

    największy problem z rs232 na lpt jest dość duża zwięzłość czasowa przy dużych szybościach, a jak wiadomo windows potrafi odebrać czas procesora programowi na czas nieokreślony (w sęsie około 50ms) i wtedy cała ramka jest uszkodzona. prostrzy sposób to jakiś układ przejściowy który posiada UART (np at90s2313) można go połączyć za pomocą złącza SPI (3 przewody) i dodatkowo 2 znaczniki: odebrania danych i wysłania danych. 5 pinów od strony lpt i 2 piny od strony rs232, wtedy niema co się bawić w zależności czasowe gdyż nimi zajmuje sie uP a dokładniej sprzęt, pisząc 3 funkcje można ukryć całą warstwe fizyczną łącza szeregowego (3 funkcje: wyślij,odbierz,sprawdź czy odebrano bajt) i problem znika.

    oczywiście można napisać moduł który polega na kontekstach systemu (wątki), i jeden wątek uruchomić do symulowania rs'a, oczywiście korzystał by z HPC, ale dodatkowo by miał ustawiony priorytet na High dzięki czemu by lepiej symulował rs (TimeCritical by zawiesił system).

    0
  • #7 30 Wrz 2004 14:32
    przemo.t
    Poziom 27  

    BoskiDialer ->tez sie nad tym zastanawialem, ale jak to jest rozwiazane w rs232 przeciez tam tez moga sie zgubic bity tak jak w LPT, moze w rs chodzi o to ze zegar tam jest hardwareowo a w tym przypadku bedzie za to odpowiadal soft i winda, wiem ze jest tam dosc skuteczna kontrola parzystosci ale przeciez to takze mozna wykorzysac w LPT, czy to wystarczy??

    0
  • #8 30 Wrz 2004 14:59
    BoskiDialer
    Poziom 34  

    Lpt to jest nic innego jak 17 pinów odzwierciedlonych w 3 portach 0x378 - 0x37a, rs232 to jest cały kontroler który ma 2 bufory, 2 rejestry przesówane, detektor błędów (parzystości), blok współpracy z modemem (wejścia/wyjścia: dtr,rts,dsr,cts,ri,dcd), programowalny generator częstotliwości więc system ustawi ten układ na jakąś częstotliwość, wpisze mu kilka bajtów i zajmuje sie swoimi sprawami, a uart wysyła dane, i nic niezaczyna interferować, co jakiś czas procesor sprawdza stan uartu, albo czeka na przerwanie od niego.
    z lpt jest ten problem że wszystkie zależności czasowe spoczywają na programie użytkowym i systemie, jeśli system przełączy kontekst na zadługo to ramka sie rozjedzie i klapa.
    "wiem ze jest tam dosc skuteczna kontrola parzystosci"
    kontrola błędów jest skuteczna dla pojedynczych błędnych bitów wynikających przez niesprzyjające warunki w którym sie znajduje medium transmisji, niejest skuteczne do błędów powstałych podczas nadawania.
    co do kontroli błędów:
    aby wykryć n uszkodzonych bitów trzeba dodać conajmniej n bitów kontrolnych, aby naprawić n uszkodzonych bitów trzeba dodać 2n+1 bitów kontrolnych.
    w uarcie jeśli zostanie wykryty uszkodzony jakiś bit, parzystość się niebędzie zgadzać i bajt zostanie conajwyżej odżucony przez program, ale zmiana parzystej liczby bitów nigdy niezostanie wykryta. co do zależności czasowych jeśli windows na zadługi czas przełączy kontekst to na linii danych szeregowych zapanuje jeden ciągły stan np bit startu, w tym momencie system przełączy kontekst, i przywróci go podczas gdy powinien być transmitowany bit np stopu. klęska! bit parzystości może dać pewność jak 1 do 2 że ramka jest jest względnie poprawna, względnie gdyż zmiana parzystej liczby bitów na przeciwne również da ramke poprawną. jedyny sposób to wysyłanie z identyczną częstotliwością (max 4% błędu na bit stopu. identyczną czyli nadajnik i odbiornik mają taką samą) inaczej całość może sie rozsypać podczas strumieniowego wysyłania danych.
    więc polecam Tylko zewnętrzny uart podłączony do lpt.
    inna sprawa to jeśli chcesz połączyć mikrokontroler z (hm..) laptopem bez wykorzystania max232 więc rozumiem że to ma być tylko wymiana danych, beż żadnych dodatków pośrednich typu modem albo coś.. radził bym Tobie zastanowić się nad podłączeniem tego mikrokontrolera za pomocą SPI, dzięki czemu żadna ramka sie nierozkraczy.

    0
  • #9 30 Wrz 2004 15:27
    przemo.t
    Poziom 27  

    OK czyli mowisz ze SPI?
    Powiedz mi tylko to ma byc bezposrenio z procka do lini LPT? sorry za lamerskie pytania ale zaczynam z AVRami i z SPI, zbytnio jescze nie wszystko kumam. Musi byc jakis uklad posredniczacy?
    LPT jako rs232 skutecznie mi wzbiles z glowy :D
    --------------------------------------------------------------------------------

    Kolega BoskiDialer pomogl mi przez GG, jeszce raz bardzo dziekuje

    0