Bezpłatna biblioteka techniczna ENCYKLOPEDIA RADIOELEKTRONIKI I INŻYNIERII ELEKTRYCZNEJ Kolejne życie portu LPT. Część 2. Encyklopedia elektroniki radiowej i elektrotechniki Encyklopedia radioelektroniki i elektrotechniki / Komputery Aby rejestrować sygnały na porcie LPT, zalecam złożenie obwodu (ryc. 1) składającego się z ośmiu przełączników i ośmiu rezystorów o rezystancji 270 Ohm - 1 kOhm. Przy tej pozycji przełączników (przycisków) SW1-SW8 na wszystkich górnych stykach występuje logiczna „1”, gdy któryś z nich jest zamknięty, na odpowiednim styku pojawi się logiczne „0”. Piny można podłączyć bezpośrednio do magistrali D0-D7 (piny 2-9, adres &H378) lub do ERROR, SELECT, PAPER END, ACK i -BUSY (piny 15, 13, 12, 10 i 11, adres &H379) .
Aby wyświetlić dane pochodzące z portu LPT, polecam poniższy schemat.
Rezystory R1-R8 o wartości nominalnej 270 - 330 omów, dowolne diody LED, powiedzmy AL307B. Taki obwód nie wymaga zasilania, wszystko i tak będzie świecić. Przyniosłem sobie wszystkie sygnały, wszystko jest natychmiast widoczne. Ogólnie zdecydowanie polecam pobranie programu LPT 3D HARD Analyzer ze strony valery-us4leh.narod.ru/dlpt.html. Napisane przez Valery'ego Kovtuna. Z pomocą tego programu… ogólnie sam się przekonasz. Złóżmy prostokątny generator impulsów na chipie K561LA7. Generator prądu + 5V. Faktem jest, że wygodniej jest montować wszystkie urządzenia, na przykład w serii 155, 555, aby sygnały miały poziom TTL. Logiczne „zero” 0-0,8 V i log „jeden” 2,4-4,2 V. Wygoda serii 561 polega na uniwersalności zasilania - równie dobrze działa od +3V do +12V. Dlatego wybór mikroukładów pozostaje do gustu, jedynym pytaniem jest uzyskanie prostokątnych impulsów o amplitudzie nie większej niż + 5 V. Schemat prostego generatora impulsów pokazano na rysunku 3.
Sam generator jest montowany na elementach D1.1-D1.3, a ja po prostu użyłem elementu D1.4, aby uzyskać bardziej „piękne” fronty impulsów wyjściowych. R1, R2, C1 - elementy zadawania częstotliwości. Przy tych parametrach elementów częstotliwość generowania wynosi około 5-7 Hz. Dla jasności działanie generatora można przedstawić w postaci następującego wykresu:
Wyjście falownika D1.4 jest podłączone do styku 2 złącza LPT (magistrala D0). Przed użyciem generatora należy wprowadzić magistralę D0-D7 w tryb odbioru danych. W tym celu wysyłamy 37 do &H43A.
Następnie rozpoczynamy odpytywanie portu &H378.
Zmienna A przyjmie wartość 254 lub 255. Dlaczego?
Faktem jest, że po przełączeniu magistrali D0-D7 w tryb odbioru danych są one ustawione na poziom jednostki logicznej (żółty rząd). Gdy na szynie D0 pojawi się poziom D0 log "0" (niebieska linia) - pierwszy bit przyjmuje wartość zero, co oznacza 2 + XNUMX1+22+23+24+25+26+27 = 254. Tym samym możemy śledzić zmianę sygnału na szynie D0, ale jeśli policzymy ilość zmian w ciągu 1 sekundy, otrzymamy… rację – cyfrowy licznik częstotliwości. Porozumiewawczy liczba przychodzące impulsy na sekundę można powiedzieć o częstotliwość w hercach. A więc program licznika częstotliwości. Formularz powinien mieć 3 przyciski i Etykietę. Przycisk 1 uruchamia miernik częstotliwości, Przycisk 2 stop, Przycisk 3 - wyjście, Etykieta - wskazuje częstotliwość. ******************************************* Dla osób korzystających z pliku inpout32.dll Opcja Jawna „deklaracja biblioteczna do pracy z adresami portów” Prywatna deklaracja funkcji Inp Lib „inpout32.dll” Alias „Inp32” (ByVal PortAddress As Integer) As Integer Prywatna deklaracja Sub Out Lib „inpout32.dll” Alias „Out32” (ByVal PortAddress jako liczba całkowita, wartość ByVal jako liczba całkowita) 'biblioteczna deklaracja do liczenia milisekund Prywatna deklaracja funkcji GetTickCount Lib „kernel32” () Tak długo Dim FTV As Long 'wartość początkowa czasu systemowego Dim STV As Long 'wartość końcowa czasu systemowego Dim FV As Integer 'FV jest stanem początkowym portu Dim SV As Integer „Stan portu porównywalny z SV” Dim cntr 'licznik impulsów Dim J As Integer 'J=1 zliczanie dozwolone, J=0 zliczanie niedozwolone Private Sub Command1_Click () Out &H37A, 43 'przestawiamy opony D0-D7 w tryb odczytu FTV = GetTickCount 'zapamiętany czas systemowy w milisekundach J = 1 'licz - zezwól FV = Inp(&H378) 'odczyt stanu portu SV = FV 'SV oznacza stan portu cntr = 0 'licznik do zera Rób póki J <> 0 DoEvents STV = GetTickCount 'zapamiętaj aktualny czas systemowy Jeśli STV > FTV + 1000 Następnie częstotliwość Pokaż „jeśli minęła sekunda, wyświetl wynik FV = Inp(&H378) 'ciągłe odpytywanie adresu &H378 If FV <> SV Then „jeżeli zmienił się stan portu SV = FV „SV równa się stanowi portu cntr = cntr + 0.5 ' licznik + 0.5 End If Jeśli J = 0, to Exit Do 'jeśli użytkownik nacisnął Stop' Pętla End Sub Private Sub Command2_Click () „zatrzymaj pętlę” 'jeśli użytkownik nacisnął Stop J=0 End Sub Private Sub Command3_Click () J = 0 „liczba - stop” Out &H37A, 0 'przywróć stan magistrali D0-D7 Wyładuj mnie „wyjdź z programu” End Sub 'Procedura wyświetlania częstotliwości Public SubFrequencyShow() Label1.Caption = Int(cntr) & "Hz" 'wyświetl wynik cntr = 0 'licznik do zera Pauza (0.2) „opóźnienie. Potrzebne do pomiaru niskich częstotliwości FTV = GetTickCount 'zapamiętany czas systemowy w milisekundach End Sub „Opóźnienie rutyny. Format połączenia: Pauza (liczba sekund) Publiczna pauza podrzędna (wartość jako pojedyncza) Przyciemnij początek, koniec Start = Minutnik Zrób, gdy timer < Start + Wartość DoEvents Pętla Zakończ=Zegar End Sub ******************************************* Dla osób korzystających z dlportio.dll Opcja Jawna „deklaracja biblioteczna do pracy z adresami portów” Prywatna deklaracja funkcji DlPortReadPortUchar Lib „dlportio.dll” (ByVal Port As Long) As Byte Deklaracja prywatna Sub DlPortWritePortUchar Lib „dlportio.dll” (ByVal Port tak długo, ByVal wartość jako bajt) 'biblioteczna deklaracja do liczenia milisekund Prywatna deklaracja funkcji GetTickCount Lib „kernel32” () Tak długo Dim FTV As Long 'wartość początkowa czasu systemowego Dim STV As Long 'wartość końcowa czasu systemowego Dim FV As Integer 'FV jest stanem początkowym portu Dim SV As Integer „Stan portu porównywalny z SV” Dim cntr 'licznik impulsów Dim J As Integer 'J=1 zliczanie dozwolone, J=0 zliczanie niedozwolone Private Sub Command1_Click () DlPortWritePortUchar &H37A, 43 „ustaw magistrale D0-D7 w tryb odczytu” FTV = GetTickCount 'zapamiętany czas systemowy w milisekundach J = 1 'liczba - zezwól FV = DlPortReadPortUchar (&H378) 'odczyt stanu portu SV = FV „SV równa się stanowi portu cntr = 0 'licznik do zera Rób póki J <> 0 DoEvents STV = GetTickCount 'zapamiętaj aktualny czas systemowy Jeśli STV > FTV + 1000 Następnie częstotliwość Pokaż „jeśli minęła sekunda, wyświetl wynik FV = DlPortReadPortUchar (&H378) 'ciągłe odpytywanie adresu &H378 If FV <> SV Then „jeżeli zmienił się stan portu SV = FV „SV równa się stanowi portu cntr = cntr + 0.5 ' licznik + 0.5 End If Jeśli J = 0, to Exit Do 'jeśli użytkownik nacisnął Stop' Pętla End Sub Private Sub Command2_Click () „zatrzymaj pętlę” 'jeśli użytkownik nacisnął Stop J=0 End Sub Private Sub Command3_Click () J = 0 „liczba - stop” DlPortWritePortUchar &H37A, 0 'przywróć stan magistrali D0-D7 Wyładuj mnie „wyjdź z programu” End Sub 'Procedura wyświetlania częstotliwości Public SubFrequencyShow() Label6.Caption = Int(cntr) & "Hz" 'wyświetl wynik cntr = 0 'licznik do zera Pauza (0.2) „opóźnienie. Potrzebne do pomiaru niskich częstotliwości FTV = GetTickCount 'zapamiętany czas systemowy w milisekundach End Sub „Opóźnienie rutyny. Format połączenia: Pauza (liczba sekund) Publiczna pauza podrzędna (wartość jako pojedyncza) Przyciemnij początek, koniec Start = Minutnik Zrób, gdy timer < Start + Wartość DoEvents Pętla Zakończ=Zegar End Sub ******************************************* I wszystkich? Ty pytasz. Tak, to wszystko. To cały program, który z jakiegoś powodu działa. Ø Jak widać, kod jest prawie taki sam dla różnych bibliotek, dlatego w poniższych przykładach rozważymy kod tylko z biblioteką porcja.dll Jeśli dokładnie przeanalizujesz kod programu licznika częstotliwości, zauważysz, że do licznika dodaje się 0.5, ctr = ctr + 0.5, a nie 1. Faktem jest, że ten kod programu uwzględnia zmianę stanu portu zarówno z 1 na 0, jak i odwrotnie z 0 na 1, dlatego aby policzyć częstotliwość, należy albo dodać 0.5, a następnie wyprowadzić Label1.Caption = Int(cntr) & "hz" Lub dodaj 1 ctr = ctr + 1, A potem wyjście Label1.Caption = Int(cntr/2) & "hz" Oto matematyka. Przy okazji, czy próbowałeś umieścić jakiś czujnik na obracającym się wale jakiegoś silnika. Prawdopodobnie za pomocą tego programu otrzymasz wspaniały obrotomierz J Cóż, przejdźmy dalej. Bierzemy ten sam generator impulsów i zamiast rezystora R2 lub R1 lutujemy termistor (autor artykułu poszedł do sklepu samochodowego i kupił czujnik temperatury z VAZ-30 za 2101 rubli). Ten czujnik temperatury zmienia swoją rezystancję w zależności od temperatury (3200 omów przy +140C i 143 Ohm w temperaturze +1000C.) Ponieważ zmieniamy rezystancję, zmienia się również częstotliwość generatora, co oznacza, że \uXNUMXb\uXNUMXbdostajemy konwerter temperatura-częstotliwość, tj. termometr cyfrowy. Chcę zwrócić uwagę na fakt, że zmiana rezystancji w zależności od temperatury nie przebiega liniowo, co widać na poniższym wykresie,
dlatego „wytłumaczenie” komputerowi, że 100 impulsów to 20 stopni, a 110 impulsów to 21 stopni, nie będzie łatwe, ale mimo wszystko możliwe. Pytanie dotyczy tylko rozmiaru kodu i algorytmu. Jeśli zamiast rezystora włożymy czujnik paliwa ze zbiornika gazu, to otrzymamy wskaźnik poziomu cieczy. Bardziej wygodne jest zbudowanie takiego wskaźnika w następujący sposób: 1. Mierzymy częstotliwość tętna przy pustym zbiorniku 2. Dodajemy trochę objętości (w zależności od tego jaką gradację - dokładność chcemy uzyskać) i ponownie mierzymy częstotliwość 3. I tak dalej, aż do samej góry pojemnika. I możesz zbudować wskaźnik poziomu cieczy zgodnie z inną zasadą, jeśli złożysz konstrukcję na poniższym rysunku.
Jeśli zmienia się poziom cieczy, zmienia się również położenie pływaka z magnesem, więc odpowiednie kontaktrony zamykają się (otwierają). Najlepiej użyć cienkościennej plastikowej rurki. Schemat tego urządzenia jest następujący:
Możesz przetwarzać informacje z takiego urządzenia zgodnie z następującym algorytmem.
Ø Niektórzy mogą mi sprzeciwić się, że nie jest konieczne wprowadzanie magistrali D0-D7 w tryb odczytu, a to zadziała. Na to mogę odpowiedzieć tylko co następuje - kto chce niech nie tłumaczy. Nie będę poruszał tego tematu. Jeżeli port &H378 nie jest w trybie odbioru danych, a używany pin (w naszym przypadku 2 - D0 ) ma logiczną „1”, to generator nie działa. Prąd wyjściowy magistrali D0-D7 w trybie przesyłania danych jest większy niż prąd wyjściowy układu CMOS (561LA7), więc nie będzie generacji. Oczywiście, jeśli pincetą zewrzesz styk z masą, to żaden prąd nie wystarczy. Ale wydaje mi się, że nie jest trudno wpisać dodatkową linijkę kodu i zrobić tak, jak radzą twórcy sprzętu komputerowego. Rozważmy teraz proces odwrotny, tj. proces przesyłania danych z komputera do urządzenia. Weźmy na przykład ten sam generator impulsów, tylko zmień trochę jego obwód.
Po podłączeniu zasilania do generatora nagle stwierdzamy, że generator nie działa. I zadziała tylko wtedy, gdy na wejściu 2 elementu D1.1 pojawi się poziom logiczny „1”. DlPortWritePortUchar &H378, 1 I wszystko od razu zadziałało. Oto generator sterowany komputerowo. Cóż, generator jest mały, chociaż musimy oddać hołd temu urządzeniu - w tak wielu obwodach elektronicznych podstawą jest generator impulsów. Może podłączymy coś poważniejszego do komputera. Oto taki schemat
Podłączamy wejście tego urządzenia do dowolnego wyjścia, które nam się podoba, na przykład do D3, wejście GND podłączamy do wspólnego przewodu złącza, ale + 12 V trzeba będzie pobrać z osobnego źródła zasilania. Przekaźnik można zabrać samochodem. Ogólnie wszystkie parametry elementów mogą być zupełnie inne (wziąłem to co było pod ręką) DlPortWritePortUchar &H378, 8 lub DlPortWritePortUchar &H378, 9 lub DlPortWritePortUchar &H378, 10 Najważniejsze, że na magistrali D3 powinien znajdować się dziennik „1”. Przekaźnik będzie działał, ale to, co do niego wybierzesz, to twoja sprawa. Ogólnie rzecz biorąc, podczas przełączania urządzeń wysokonapięciowych konieczne jest (na wszelki wypadek) zabezpieczenie się przed zwarciem, ogólnie przed awarią do obudowy. Aby w razie wypadku Twój wspaniały port LPT się nie przepalił. Dlatego do takich połączeń wygodnie jest zastosować izolację galwaniczną portu i urządzenia np. poprzez transoptor.
Jeśli wszystko w twoim urządzeniu „wypali się”, to przez światło - niestety prąd nie przepłynie, jeszcze czegoś takiego nie wymyślili. Tu kończy się druga część. Czy będzie trzecia część - myślę, że będzie, ale oto o czym będzie... Autor: Aleksiej Klusznikow, Iwanowo; Publikacja: cxem.net Zobacz inne artykuły Sekcja Komputery. Czytaj i pisz przydatne komentarze do tego artykułu. Najnowsze wiadomości o nauce i technologii, nowa elektronika: Maszyna do przerzedzania kwiatów w ogrodach
02.05.2024 Zaawansowany mikroskop na podczerwień
02.05.2024 Pułapka powietrzna na owady
01.05.2024
Inne ciekawe wiadomości: ▪ Poprawa jakości marsjańskiej gleby ▪ Telewizja uniemożliwia dzieciom naukę mówienia Wiadomości o nauce i technologii, nowa elektronika
Ciekawe materiały z bezpłatnej biblioteki technicznej: ▪ część opisów stanowisk na stronie internetowej. Wybór artykułu ▪ Co wydarzyło się w USA w XIX wieku? Szczegółowa odpowiedź ▪ artykuł Na dyżurze centrali do odbioru sygnałów. Standardowe instrukcje dotyczące ochrony pracy ▪ artykuł Wskazówki technologiczne. Encyklopedia elektroniki radiowej i elektrotechniki ▪ artykuł Stabilizator napięcia do 35 woltów. Encyklopedia elektroniki radiowej i elektrotechniki
Zostaw swój komentarz do tego artykułu: Wszystkie języki tej strony Strona główna | biblioteka | Artykuły | Mapa stony | Recenzje witryn www.diagram.com.ua |