Sterowanie urzadzeniem przez port drukarkowy

Feb 11, 2005 34 Replies

jesli pod win95/98 to da rade, gdzies w MSN jest wlasnie artykul jak to robic szybko i regularnie w takim OS jak win9x Alternatywnie jakis pentium stare, polozyc dos i pojechac - kompletnego PC w takiej konfiguracji mozna dostac za 30 - 50zl... - moze sie okazac ze to najszybszy i najwygodniejszy sposob na cos takiego... (patrze na to od strony programistyczno uzytkowej - wystarczy wsadzic karte na ISA i mamy dwa porty rownolegle - 16 niezaleznych wyjsc, dobre narzedzia do pisania softu - mozemy zapuscic to na przerwaniach od timera. Jakby sie uparl to mozna nawet wsadzic to do BIOS... w koncu mamy tam co najmniej 64KB co powinno az nadto wystarczy do obslugi czegos takiego... gdzies widzalem programik do konwersji oprogramowania w taki sposob zeby dawalo sie to wsadzac od razu do BIOS - konwertowal wywolania BIOS na procedury i skompilowany kod bez problemu dawal sie zapisac w EPROM).

Fri, 11 Feb 2005 12:45:51 +0100, na pl.misc.elektronika, the4dK napisał(a):

Loodzie, co Wy z tą dokładnością Windows, czy to ma sterować startem promu?

100 Hz dostaniesz bez żadnego problemu ( no chyba, że jednocześnie na maksa obciążysz peceta czymś innym ). Taki prosty układzik :

- dwa rejestry szeregowe z latchem ( 595 albo podobny )

- trzy transoptory ( najlepiej niskoprądowe , 6N139 albo podobne ) sterowane z linii TxD, RTS, DTR ) i obsługujące linie data, clk i strobe rejestrów ( od razu masz separację galwaniczną portu )

- ew. za transoptorami dodatkowa kostka Schmitt ( np. 4093 ) do zregenerowania zboczy

- co 10 ms ( f=100Hz ) odświeżasz rejestry nową 16 - bitową próbką wyzwalania stroboskopów pobieraną ze skryptu. Taktowanie liniii kontrolnych z użyciem funkcji API może z powodzeniem osiągnąć kilkadziesiąt kHz a więc wystarczy w zupełności. Jak czasem Windows przesunie coś o parę ms - nic nie szkodzi, to będzie zupełnie niezauważalne. Przy tym używając API zapewnisz przenośność kodu na w2k i XP. Do odmierzania 10 ms nie używaj timera systemowego ! Pod w98 ma on rozdzielczość nie lepszą niż 55 ms a więc się nie nadaje. Weź timer multimedialny - można na nim na ogół zjechać do 1 ms i ma dobrą powtarzalność .

To IMHO powinno biegać bez problemu - a sprzęt ( bez części wykonawczej ) to kilkanaście PLN.

Jeśli wersja w uP to proponuję wziąć jakiś z trochę większym ramem. Tam ustawisz sobie przełączane bufory na kilka sekund sterowania ( 1 sekunda =

100 2-bajtowych próbek ). W momencie opróżnienia bufora uP przełacza się na drugi i śle do peceta żądanie nowego bloku danych, którym doładowuje zużyty bufor. To tylko przykład oczywiście. Zastosowanie uP umożliwi rozbudowę i zwiększenie uniwersalności - jak przyjdzie ochota można dodać obsługę np. CF i tam mieć różne nagrane sekwencje do puszczania już bez żadnego PC

Taaa. Niedawno dostałem od Maxima próbki z max233 na czele i zmontowałem układzik z uC at89s52 mający za zadanie odebrać bajt z portu COM, zinkrementować i odeslać z powrotem. Na PCta napisałem programik w BCB i... coś wysyła, ale nic nie odbiera.

Albo ja jestem zbyt tępy, albo to może wina lutowania i programowania po nocach, bo wydawało mi się, że układ realizujący coś tak prostego musi działać poprawnie od pierwszego odpalenia. Jak widać nie...

Dlatego jeśli ktoś dysponuje sprawdzonym "gotowcem" (program na PC + schemat połączeń od wtyczki DSub9 do max233) to bardzo proszę o kontakt.

Ja swój program pisałem w oparciu o książkę "RS232 - Praktyczne Programowanie" i aż głowa mnie bolała od WinAPI. Szukałem w necie darmowych komponentów do ułatwienia sobie życia, ale znalazłem tylko komercyjne.

Pomęczę się z tym problemem jeszcze dzisiaj i jeśli nic nie uda mi się wskórać, to jutro zacznę zadawać duuużo pytań. Bądźcie więc czujni :D

PS. Czy jest jakiś prosty sposób na sprawdzenie, czy mój program pod Windowsem w ogóle potrafi coś wysłać i odebrać? Może zewrzeć we wtyczce linie TxD i RxD?

pozdrawiam

O! To sie nazywa konstruktywny post ;]

Jurek Szczesiul napisał(a):

tez tak mysle

[ciach]

A to jest w komponentach? Czy musze sie odwolywac do funkcji WinAPI, np. GetTickCount?

Eee, za duzo kombinowania chyba. W sumie, to przeciez duzej (jak na elektronike) czestotliwosci nie potrzeba, ani tym bardziej dokladnosci. Najwazniejsze, zebym mogl napisac skrypt mrugania o dlugosci kilkudziesieciu instrukcji.

W kazdym razie, wielkie dzieki za rade!

a zapytam z ciekawosci czy probowales zamienic linie bo gro problemow w takich przypadkach to zamienione linie TxD i RxD po jednej ze stron - sprobuj albo przy kompie albo przy uC zamienic linie...

Fri, 11 Feb 2005 17:02:29 +0100, na pl.misc.elektronika, the4dK napisał(a):

W komponentach raczej nie będzie. Szukaj w helpie MS-multimedia-reference haseł timeProc, timeBeginPeriod, timeSetEvent, timeEndPeriod,timeKillEvent itd.

Przykłady zastosowania mam tylko dla Delphi ( podobnie jak komponent sterowania pinami RS-a - zrobiony specjalnie do takich nietypowych przypadków ).

Jurek Szczesiul napisał(a):

Dzieki za info. Poszukam.

Jesli mozesz, to podrzuc mi na priv. Moze byc dla Delphi.

hm... ja na Atmedze162 odpalilem 3 uarty :), i wszystko dzialalo dobrze :)

moze poswiergolily Ci sie rx'y i tx'y :) /mi to sie nie zdarza, bo _dokladnie_ (wada: mala szybkosc :) tworze schemat;

na ogol RX na jakims scalaku, czy w PeCecie (DB9, pin #2), oznacza _odbior_ i nalezy go "przyczepic" do TX'a przylaczanego urzadzenia :). /i vice versa :)

trzymajac sie tej zasady zaoszczedzisz nerwy i, suma-sumarum, czas :).

ps. swoja droga, jestem zaskoczony jak wielu osobom pieprzy sie rx z tx'em i na odwrot; nie wiedza czy rx do odbior, czy moze do tego trza rx'a przylaczyc, itd...

nie znam sie na elektronice, ale (o dziwo? :) z tym akurat problemow nie mam :)

na msdn'ie jest zajebisty artykul o Serial Communication in Win32; tyle, ze ma wady: musisz go przeczytac, nieco zajarzyc, i samemu napisac program :).

na koniec, poza satysfakcja, ze okielznales rs-232 w windzie, ulatwisz sobie zycie raz na zawsze (jesli chodzi o obsluge rs'a :)

jesli masz win9x to wgraj np. terminal z nortona commandera i sprawdz spad niego komunikacje z Twoim urzadzeniem;

jesli nie dziala - szukaj bledow najpierw w sprzecie, a potem dopiero w sofcie na PC;

no ja yyyy...... ja nigdy nie mialem stroboskopu w reku, dlatego pytam; swoja droga - zaciekawil mnie ten watek, i zrobilbym sobie tez jakies strobo :) /najlepiej mrugajace w rytm muzyki, ale to chyba trzeba widmo na jakims dsp obliczac :(

Rytmu na DSP raczej nie bardzo da sie obliczyc (za wolne), po za tym rytm trzeba miec on-line i synchronicznie z muzyka. Najwyzej mozna by liczyc 'chwilowe' widmo i na tej podstawie generowac sygnal taktujacy PLL. Ale to porywanie sie z armata na muchy. Kiedys, gdzies tak w liceum (poczatek lat 80) bawilismy sie z kolegami ilumofoniami i zrobilismy eksperymentalnie uklad skladajacy sie z rejestru przesuwajacego 8 bitowego polaczonego w licznik Johnsona sterowane z jakiegos prostego ukladziku wejsciowego na 1 tranzystorze i bardzo fajnie chodzilo. Niestety byl to tylko uklad eksperymentalny z LEDami (a wtedy LEDy byly slabe) zamiast zarowek. Pamietam tylko ze jakos podejrzanie fajnie wylapywalo rytm. Uklad wejsciowy to byla dioda ladujaca kondensator (prostownik jednopolowkowy), tranzystor byl odtykany w momencie ladowania kondensatora, czyli w momencie gwatlownego wzrostu glosnosci.

Krzysiek Rudnik

U¿ytkownik "PAndy" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:cuibul$nkq$ snipped-for-privacy@news.onet.pl...

Królestwo za taki programik!! :)

Wojtek

Widmo można wyjąć bezproblemowo jakimś pluginem wprost z Winampa. A jeśli chcesz się ze stroboskopem podpiąć bezpośrednio pod źródło sygnału np. do głośników, to może jakiś wtórnik a za nim układ rezonansowy dostrojny do danej częstotliwości, na którym napięcie będzie sterowało częstotliwością błysków? Tak tylko rzucam pomysł z rękawa bo sam nic podobnego nie robiłem :)

pozdrawiam

U¿ytkownik "Q" snipped-for-privacy@gazeta.gov.pl> napisa³ w wiadomo¶ci news:cujh79$fk3$ snipped-for-privacy@nemesis.news.tpi.pl...

ja to usiebie zrobilem w sposob 100% analogowy wiejscie sygna³u audio, potem filtr aktywny dolnoprzepustowy (tak ok od

80-120hz w dó³) no i na drugim wzm op uk³ad daj±cy na wyjsciu sygna³ przy przekroczeniu pewnej amplitudy. dziala wg mnie bardzo dobrze.

Ja prawdę mówiąc działałem bez schematu bo uznałem, że szkoda coś tak prostego rysować. Na szczęście Rx i Tx nie poświergoliłem. W sumie popełniłem tylko jeden błąd, ale za to zasadniczy: chwyciłem się za lutownicę po pierwszej w nocy :) I chyba to było powodem, że zapomniałem przyłączyć w procku /EA do zasilania. Jak to poprawiłem zaczął się wykonywać program z pamięci wewnętrznej i się okazało, że wszystko działa, hula, śmiga itp. Szkoda tylko, że kosztowało mnie to półtorej dnia sprawdzania i nerwów.

Mi się ta zasada wydawała całkiem naturalna :) Dopiero jak się okazało, że "nie działa" zacząłem wątpić w swoją intuicję.

Wad jest więcej: trzeba go jeszcze znaleźć :) Z czytanem, jarzeniem i kodowaniem już sobie poradzę (zresztą jak się okazało mój program na PC działał od początku dobrze).

No tak, okiełznałem, jestem z siebie dumny. A życie ułatwiłbym sobie chyba tylko pisząc jakąś klasę do obudowania wywołań WinAPI. Na to jestem jednak zbyt leniwy, choć kto wie, może kiedyś zamiast robić kopiuj kod-wklej kod będę wolał pisać #include rs232.h :D

Tutaj sam sobie odpowiem: to działa! I jest to genialny w swojej prostocie sposób na testowanie transmisji :)

pozdrawiam i dziękuję za uwagę ;)

Bez przesady, wystarczy dowolny Atmelek z przetwornikiem ADC dokonujacy filtracji pasmowej i adaptacyjnie ustalajacy poziom wyzwalania stroboskopu na podstawie sredniej glosnosci w pomieszczeniu. Ewentualnie ten sam Atmel liczacy 32-punktowa transformate Fouriera i szukajacy istotnych zmian w widmie. Zlozonosc obliczeniowa tego miesci sie z zapasem w wydajnosci AVRow.

Pozdrawiam Piotr Wyderski

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required