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.

JDawid
-
-
Posty:38
Rejestracja:22 gru 2005, o 00:13
Lokalizacja:Rzeszów
PWM z LPT.

Postautor: JDawid » 16 mar 2006, o 21:49

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.

Awatar użytkownika
tasza
-
-
Posty:456
Rejestracja:17 sty 2005, o 10:52

Postautor: tasza » 17 mar 2006, o 11:31

proponuję wykorzystać przerwanie 1C systemowego timera (taktowanego zegarem 1.19MHz)
jeżeli program ma działać pod DOS, polecam lekturę:
:arrow: http://elportal.pl/index.php?module=Con ... y&ceid=254
:arrow: http://www.inversereality.org/tutorials ... rrupt.html
:arrow: 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

JDawid
-
-
Posty:38
Rejestracja:22 gru 2005, o 00:13
Lokalizacja:Rzeszów

:)

Postautor: JDawid » 18 mar 2006, o 02:42

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 ???

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości