Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięPWM z LPT.
Moderatorzy:Jacek Bogusz, Moderatorzy
Chciałbym sterować serwomechanizmem z portu LPT, ten PWM muszę zrobić programowo. Jest to standardowy serwomechanizm, okres 20ms, pozycja zerowa dla 1,5ms. Chciałbym zrobić to w C; inne rozwiązanie mnie nie interesuje. Najlepiej byłoby w przerwaniu uruchomić jakiś timer i precyzyjnie odmierzać czas, w interwałach największych 0.1ms, a najlepiej w microsekundach. Wie ktoś jak to napisać. Proszę nie pisać o funkcjach czasu bibioteki time.h typu delay, difftime, usleep czy CLK_TCK; to już przerobiłem i niedostatecznie czas jest odmierzany, bo procesy systemu operacyjnego zakłócają odmierzanie czasu. Takie coś chciałbym uruchamiać pod DOSem.
proponuję wykorzystać przerwanie 1C systemowego timera (taktowanego zegarem 1.19MHz)
jeżeli program ma działać pod DOS, polecam lekturę:
http://elportal.pl/index.php?module=Con ... y&ceid=254
http://www.inversereality.org/tutorials ... rrupt.html
http://et.nmsu.edu/~etti/winter97/compu ... logic.html (Controlling the sampling rate)
tam są przykłady jak podczepić swój kod pod to przerwanie i jak przekonfigurować układ 8253
pozdrawiam,
tasza
jeżeli program ma działać pod DOS, polecam lekturę:
http://elportal.pl/index.php?module=Con ... y&ceid=254
http://www.inversereality.org/tutorials ... rrupt.html
http://et.nmsu.edu/~etti/winter97/compu ... logic.html (Controlling the sampling rate)
tam są przykłady jak podczepić swój kod pod to przerwanie i jak przekonfigurować układ 8253
pozdrawiam,
tasza
:)
Wielkie dzięki, na pierwszy rzut oka wygląda na to, że to jest to czego mi trzeba było, nie trafiłem na te storny a wiele przeszukałem zanim dałem ten post. Ja na ten temat znalazłem to: http://www.learn-c.com/experiment6.htm ale tu mowa o przerwaniach w PC do obsługi wyjść pewnej karty na złączu PCI i ciężko z tego wywnioskować co dokładnie dotyczy tej karty a co PC.
[ Dodano: 22-03-2006, 09:34 ]
Ogólnie chodzi o układ Intel 8253 odpowiedzialny za przerwanie w PC, do wykorzystania w tym układzie mamy trzy 16-bitwe countery zliczające w dół, od wprowadzonej liczby. Każdy counter posiada wejścia CLK, GATE i wyjście OUT. Countery te mogą zliczać z częstotliwością do 2.6 MHz. Metoda zliczania, tryby pracy countera (ów), sterowania operacją odczytu i zapisu, numer countera którego chcemy używać; to wszystko można wprowadzić w tzn. CONTROL WORD (1 byte). Wartość countera domyślnie to 65535=0xffff, od której zlicza, można wprowadzić dowolną w zakresie od 0 do 65535 za pomocą 1 byte'u (Jest równica w działaniu countera jeżeli do countera wprowadzona zostanie liczba parzysta i nieparzysta - odsyłam do specyfikacji technicznej). Mamy możliwość wybrania trybów pracy, tzw. MODE 0 do 5. Dla przykładu przytoczę co robi MODE 3: Square Wave Generator - wyjście counter jest w stanie HIGH od rozpoczęcia zliczania do czasu aż counter zliczy połowę wartości zadanej do zliczenia i poza połową stan jest LOW, counter jest przeładowany i od początku. W tym trybie licznik zlicza co 2 na każdym zboczu opadającym sygnalu zegara. Ten mode wymaga, aby wejście GATE było w stanie HIGH. Inne MODE'y też wymagają jakiegoś stanu na wejściu GATE i tu zabawa się zaczyna...
Jak programowo wymusić stan HIGH lub LOW na GATE i jak programowo zczytać stan wyjścia OUT, żeby jakoś sensownie skorzystać z tych counterów ??? Szukałem adresów GATE i OUT ale nie znalazłem. Czy to wejście i wyjście nie ma adresu do którego jest dostęp, tylko jest poprostu nóżką układu do której się coś podłącza ???
[ Dodano: 22-03-2006, 09:34 ]
Ogólnie chodzi o układ Intel 8253 odpowiedzialny za przerwanie w PC, do wykorzystania w tym układzie mamy trzy 16-bitwe countery zliczające w dół, od wprowadzonej liczby. Każdy counter posiada wejścia CLK, GATE i wyjście OUT. Countery te mogą zliczać z częstotliwością do 2.6 MHz. Metoda zliczania, tryby pracy countera (ów), sterowania operacją odczytu i zapisu, numer countera którego chcemy używać; to wszystko można wprowadzić w tzn. CONTROL WORD (1 byte). Wartość countera domyślnie to 65535=0xffff, od której zlicza, można wprowadzić dowolną w zakresie od 0 do 65535 za pomocą 1 byte'u (Jest równica w działaniu countera jeżeli do countera wprowadzona zostanie liczba parzysta i nieparzysta - odsyłam do specyfikacji technicznej). Mamy możliwość wybrania trybów pracy, tzw. MODE 0 do 5. Dla przykładu przytoczę co robi MODE 3: Square Wave Generator - wyjście counter jest w stanie HIGH od rozpoczęcia zliczania do czasu aż counter zliczy połowę wartości zadanej do zliczenia i poza połową stan jest LOW, counter jest przeładowany i od początku. W tym trybie licznik zlicza co 2 na każdym zboczu opadającym sygnalu zegara. Ten mode wymaga, aby wejście GATE było w stanie HIGH. Inne MODE'y też wymagają jakiegoś stanu na wejściu GATE i tu zabawa się zaczyna...
Jak programowo wymusić stan HIGH lub LOW na GATE i jak programowo zczytać stan wyjścia OUT, żeby jakoś sensownie skorzystać z tych counterów ??? Szukałem adresów GATE i OUT ale nie znalazłem. Czy to wejście i wyjście nie ma adresu do którego jest dostęp, tylko jest poprostu nóżką układu do której się coś podłącza ???
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości