Kostenlose technische Bibliothek ENZYKLOPÄDIE DER FUNKELEKTRONIK UND ELEKTROTECHNIK Ein anderes Leben des LPT-Ports. Teil 2. Enzyklopädie der Funkelektronik und Elektrotechnik Lexikon der Funkelektronik und Elektrotechnik / Computer Um Signale am LPT-Port aufzuzeichnen, empfehle ich den Aufbau einer Schaltung (Abb. 1) bestehend aus acht Schaltern und acht Widerständen mit einem Widerstand von 270 Ohm – 1 kOhm. Bei dieser Stellung der Schalter (Knöpfe) SW1-SW8 liegt an allen oberen Kontakten eine logische „1“; wenn einer davon geschlossen ist, erscheint am entsprechenden Kontakt eine logische „0“. Die Pins können direkt an den Bus D0-D7 (Pins 2-9, Adresse &H378) oder an ERROR, SELECT, PAPER END, ACK und -BUSY (Pins 15, 13, 12, 10 und 11, Adresse &H379) angeschlossen werden.
Um Daten anzuzeigen, die vom LPT-Port kommen, empfehle ich das folgende Schema.
Widerstände R1-R8 mit einem Nennwert von 270 - 330 Ohm, beliebige LEDs, sagen wir AL307B. Diese Schaltung benötigt keinen Strom, es leuchtet trotzdem alles. Ich habe alle Signale für mich selbst herausgeholt, alles ist sofort sichtbar. Generell empfehle ich dringend, das Programm LPT 3D HARD Analyzer unter valery-us4leh.narod.ru/dlpt.html herunterzuladen. Es wurde von Valery Kovtun geschrieben. Mit Hilfe dieses Programms... werden Sie im Allgemeinen selbst sehen. Lassen Sie uns einen Rechteckimpulsgenerator mit der Mikroschaltung K561LA7 zusammenbauen. Generatorstromversorgung +5V. Tatsache ist, dass es bequemer ist, alle Geräte beispielsweise auf der 155-, 555-Serie zusammenzubauen, damit die Signale einen TTL-Pegel haben. Logische „Null“ 0–0,8 V und logische „Eins“ 2,4–4,2 V. Der Vorteil der 561-Serie liegt in der Vielseitigkeit des Netzteils – es funktioniert gleichermaßen gut von +3 V bis +12 V. Daher bleibt die Wahl der Mikroschaltung Ihrem Geschmack überlassen; die einzige Frage besteht darin, Rechteckimpulse mit einer Amplitude von nicht mehr als +5 V zu erhalten. Die Schaltung eines einfachen Impulsgenerators ist in Abbildung 3 dargestellt.
Der Generator selbst besteht aus den Elementen D1.1-D1.3, und ich habe einfach Element D1.4 für „schönere“ Flanken der Ausgangsimpulse verwendet. R1, R2, C1 – Frequenzeinstellelemente. Bei diesen Parametern der Elemente beträgt die Erzeugungsfrequenz ca. 5-7 Hz. Der Übersichtlichkeit halber kann der Betrieb des Generators in Form der folgenden Grafik dargestellt werden:
Der Wechselrichterausgang D1.4 ist mit Pin 2 des LPT-Steckers (Bus D0) verbunden. Vor der Verwendung des Generators muss der D0-D7-Bus in den Datenempfangsmodus geschaltet werden. Dazu senden wir 37 an die Adresse &H43A.
Danach beginnen wir mit der Abfrage von Port &H378.
Variable A nimmt entweder den Wert 254 oder 255 an. Warum?
Tatsache ist, dass die D0-D7-Busse nach dem Umschalten in den Datenempfangsmodus auf den logischen Eins-Pegel (gelbe Reihe) gesetzt werden. Wenn der Log-Pegel „0“ auf dem D0-Bus erscheint (blaue Reihe), nimmt das erste Bit den Wert Null an, was 0+2 bedeutet1+22+23+24+25+26+27 = 254. Somit können wir die Änderung des Signals auf dem D0-Bus verfolgen, aber wenn wir die Anzahl der Änderungen in einer Sekunde zählen, erhalten wir ... richtig - einen digitalen Frequenzzähler. Wissen Menge eingehende Impulse pro Sekunde kann man sagen Frequenz in Hertz. Das Programm ist also ein Frequenzmesser. Das Formular sollte 3 Schaltflächen und eine Beschriftung haben. Taste 1 startet den Frequenzmesser, Taste 2 stoppt, Taste 3 – Beenden, Beschriftung – zeigt die Frequenz an. ******************************************* Für diejenigen, die inpout32.dll verwenden Option Explizit 'Bibliotheksdeklaration für die Arbeit mit Portadressen Privat Deklarieren Sie die Funktion Inp Lib „inpout32.dll“ Alias „Inp32“ (ByVal PortAddress As Integer) als Integer Privat deklarieren Sub Out Lib „inpout32.dll“ Alias „Out32“ (ByVal PortAddress As Integer, ByVal Value As Integer) 'Bibliotheksdeklaration zum Zählen von Millisekunden Private Deklarationsfunktion GetTickCount Lib „kernel32“ () As Long Dim FTV As Long 'Anfangswert der Systemzeit Dim STV As Long 'Endwert der Systemzeit Dim FV As Integer 'FV ist der Ausgangszustand des Ports Dim SV As Integer 'SV-vergleichbarer Portstatus Dim cntr 'Impulszähler Dim J As Integer 'J=1 Zählung erlaubt, J=0 Zählung nicht erlaubt Privater Unterbefehl1_Click () Aus &H37A, 43 'versetzen wir die Reifen D0-D7 in den Lesemodus FTV = GetTickCount 'merkte sich die Systemzeit in Millisekunden J = 1 'count - erlauben FV = Inp(&H378) 'den Portstatus lesen SV = FV 'SV entspricht dem Hafenstaat cntr = 0 'Zähler auf Null Tun Sie While J <> 0 DoEvents STV = GetTickCount 'merkt sich die aktuelle Systemzeit Wenn STV > FTV + 1000, dann FrequencyShow: Wenn eine Sekunde vergangen ist, wird das Ergebnis angezeigt FV = Inp(&H378) 'ruft ständig die Adresse &H378 ab Wenn FV <> SV, dann, wenn sich der Portstatus geändert hat SV = FV 'SV entspricht Portstatus cntr = cntr + 0.5 'Zähler + 0.5 End If If J = 0 Then Exit Do 'wenn der Benutzer Stop gedrückt hat Loop End Sub Privater Unterbefehl2_Click () 'Schleife stoppen 'wenn der Benutzer Stop gedrückt hat J = 0 End Sub Privater Unterbefehl3_Click () J = 0 'Zählen - Stopp Out &H37A, 0 'stellt den Zustand des Busses D0-D7 wieder her Entladen Sie mich 'beenden Sie das Programm End Sub 'Frequenzanzeigeroutine Öffentliche SubFrequencyShow() Label1.Caption = Int(cntr) & " Hz" 'zeigt das Ergebnis an cntr = 0 'Zähler auf Null Pause (0.2) 'Verzögerung. Wird zur Messung tiefer Frequenzen benötigt FTV = GetTickCount 'merkte sich die Systemzeit in Millisekunden End Sub „Routine verzögern. Anrufformat: Pause (Anzahl Sekunden) Public Sub Pause (Wert als Single) Schwacher Start, Ende Start = Timer Do While Timer < Start + Wert DoEvents Loop Ende=Timer End Sub ******************************************* Für diejenigen, die dlportio.dll verwenden Option Explizit 'Bibliotheksdeklaration für die Arbeit mit Portadressen Private Deklarationsfunktion DlPortReadPortUchar Lib „dlportio.dll“ (ByVal Port As Long) als Byte Private Declare Sub DlPortWritePortUchar Lib „dlportio.dll“ (ByVal Port As Long, ByVal Value As Byte) 'Bibliotheksdeklaration zum Zählen von Millisekunden Private Deklarationsfunktion GetTickCount Lib „kernel32“ () As Long Dim FTV As Long 'Anfangswert der Systemzeit Dim STV As Long 'Endwert der Systemzeit Dim FV As Integer 'FV ist der Ausgangszustand des Ports Dim SV As Integer 'SV-vergleichbarer Portstatus Dim cntr 'Impulszähler Dim J As Integer 'J=1 Zählung erlaubt, J=0 Zählung nicht erlaubt Privater Unterbefehl1_Click () DlPortWritePortUchar &H37A, 43 'setzt die D0-D7-Busse in den Lesemodus FTV = GetTickCount 'merkte sich die Systemzeit in Millisekunden J = 1 'zählen - zulassen FV = DlPortReadPortUchar (&H378) 'Portstatus lesen SV = FV 'SV entspricht Portstatus cntr = 0 'Zähler auf Null Tun Sie While J <> 0 DoEvents STV = GetTickCount 'merkt sich die aktuelle Systemzeit Wenn STV > FTV + 1000, dann FrequencyShow: Wenn eine Sekunde vergangen ist, wird das Ergebnis angezeigt FV = DlPortReadPortUchar (&H378) 'ruft ständig die Adresse &H378 ab Wenn FV <> SV, dann, wenn sich der Portstatus geändert hat SV = FV 'SV entspricht Portstatus cntr = cntr + 0.5 'Zähler + 0.5 End If If J = 0 Then Exit Do 'wenn der Benutzer Stop gedrückt hat Loop End Sub Privater Unterbefehl2_Click () 'Schleife stoppen 'wenn der Benutzer Stop gedrückt hat J = 0 End Sub Privater Unterbefehl3_Click () J = 0 'Zählen - Stopp DlPortWritePortUchar &H37A, 0 'stellt den Zustand des D0-D7-Busses wieder her Entladen Sie mich 'beenden Sie das Programm End Sub 'Frequenzanzeigeroutine Öffentliche SubFrequencyShow() Label6.Caption = Int(cntr) & " Hz" 'zeigt das Ergebnis an cntr = 0 'Zähler auf Null Pause (0.2) 'Verzögerung. Wird zur Messung tiefer Frequenzen benötigt FTV = GetTickCount 'merkte sich die Systemzeit in Millisekunden End Sub „Routine verzögern. Anrufformat: Pause (Anzahl Sekunden) Public Sub Pause (Wert als Single) Schwacher Start, Ende Start = Timer Do While Timer < Start + Wert DoEvents Loop Ende=Timer End Sub ******************************************* Und alle? Du fragst. Das ist alles. Das ist das ganze Programm, das irgendwie funktioniert. Ø Wie Sie sehen können, ist der Code für verschiedene Bibliotheken nahezu gleich, daher betrachten wir in den folgenden Beispielen nur Code mit der Bibliothek dlportio.dll Wenn Sie den Code des Frequenzzählerprogramms sorgfältig analysieren, werden Sie feststellen, dass dem Zähler 0.5 hinzugefügt wird. Zentr = Zentr + 0.5, und nicht 1. Tatsache ist, dass dieser Programmcode den Übergang des Portstatus sowohl von 1 auf 0 als auch umgekehrt von 0 auf 1 zählt. Um die Häufigkeit zu zählen, müssen Sie also entweder 0.5 addieren und dann ausgeben Label1.Caption = Int(cntr) & „Hz“ Oder füge 1 hinzu Zentr = Zentr + 1, Und dann ausgeben Label1.Caption = Int(cntr/2) & "Hz" Hier ist die Mathematik. Haben Sie übrigens schon einmal versucht, einen Sensor an der rotierenden Welle eines Motors anzubringen? Wahrscheinlich erhalten Sie mit Hilfe dieses Programms einen hervorragenden Drehzahlmesser J Nun, lass uns weitermachen. Wir nehmen den gleichen Impulsgenerator und löten anstelle des Widerstands R2 oder R1 einen Thermistor ein (der Autor des Artikels ging in ein Autohaus und kaufte einen Temperatursensor von einem VAZ-30 für 2101 Rubel). Dieser Temperatursensor ändert seinen Widerstand abhängig von der Temperatur (3200 Ohm bei einer Temperatur von +14).0C und 143 Ohm bei einer Temperatur von +1000C.) Da wir den Widerstand ändern, ändert sich auch die Frequenz des Generators, was bedeutet, dass wir einen Wandler erhalten Temperatur-Frequenz, d.h. digitales Thermometer. Ich möchte Sie darauf aufmerksam machen, dass die Widerstandsänderung in Abhängigkeit von der Temperatur nicht linear erfolgt, wie in der folgenden Grafik zu sehen ist:
Dem Computer zu „erklären“, dass 100 Impulse 20 Grad und 110 Impulse 21 Grad sind, wird daher nicht sehr einfach, aber dennoch möglich sein. Die einzige Frage ist die Größe des Codes und des Algorithmus. Wenn wir anstelle eines Widerstands einen Kraftstoffsensor aus einem Gastank einbauen, erhalten wir eine Flüssigkeitsstandanzeige. Es ist bequemer, einen solchen Indikator wie folgt einzurichten: 1. Wir messen die Pulsfrequenz, wenn der Behälter leer ist 2. Fügen Sie etwas Volumen hinzu (je nachdem, welche Abstufung und Genauigkeit Sie erreichen möchten) und messen Sie die Frequenz erneut 3. Und so weiter bis zum oberen Rand Ihres Behälters. Sie können einen Flüssigkeitsstandanzeiger nach einem anderen Prinzip bauen, wenn Sie die Struktur in der Abbildung unten zusammenbauen.
Ändert sich der Flüssigkeitsstand, ändert sich auch die Position des Schwimmers mit Magnet und somit schließen (öffnen) die entsprechenden Reedschalter. Am besten verwenden Sie ein dünnwandiges Kunststoffrohr. Das Diagramm dieses Geräts ist wie folgt:
Sie können Informationen von einem solchen Gerät mit dem folgenden Algorithmus verarbeiten.
Ø Einige mögen mir einwenden, dass es nicht notwendig ist, die Busse D0-D7 in den Lesemodus zu versetzen, und alles wird so funktionieren. Darauf kann ich nur folgendes antworten: Wer will, der soll nicht übersetzen. Ich werde dieses Thema nicht diskutieren. Wenn sich Port &H378 nicht im Datenempfangsmodus befindet und am verwendeten Pin eine logische „2“ liegt (in unserem Fall 0 - D1), dann Generator funktioniert nicht. Der Ausgangsstrom des D0-D7-Busses im Datenübertragungsmodus ist größer als der Ausgangsstrom der CMOS-Mikroschaltung (561LA7), sodass keine Erzeugung erfolgt. Wenn Sie den Kontakt mit Masse mit einer Pinzette kurzschließen, reicht natürlich kein Strom aus. Aber es scheint mir, dass es nicht schwer ist, eine zusätzliche Codezeile einzugeben und den Rat der Computerhardware-Entwickler zu befolgen. Betrachten wir nun den umgekehrten Vorgang, d.h. der Vorgang der Datenübertragung von einem Computer auf Ihr Gerät. Nehmen wir als Beispiel den gleichen Impulsgenerator, ändern Sie lediglich seine Schaltung ein wenig.
Nachdem wir den Generator mit Strom versorgt haben, stellen wir plötzlich fest, dass der Generator nicht funktioniert. Und es funktioniert nur, wenn am Eingang 2 des Elements D1.1 der logische Pegel „1“ erscheint. DlPortWritePortUchar &H378, 1 Und alles fing sofort an zu funktionieren. Hier ist ein computergesteuerter Generator. Nun, der Generator ist alles klein, obwohl wir diesem Gerät Tribut zollen müssen – in vielen elektronischen Schaltkreisen wird der Impulsgenerator als Grundlage genommen. Sollten wir nicht etwas Ernsthafteres an den Computer anschließen? Hier ist ein solches Schema
Wir verbinden den Eingang dieses Geräts mit einem beliebigen Ausgang, zum Beispiel mit D3, verbinden den GND-Eingang mit dem gemeinsamen Kabel des Steckers, aber +12 V müssen von einer separaten Stromquelle bezogen werden. Sie können eine Autostaffel nehmen. Generell können alle Parameter der Elemente völlig unterschiedlich sein (ich habe genommen, was zur Hand war) DlPortWritePortUchar &H378, 8 oder DlPortWritePortUchar &H378, 9 oder DlPortWritePortUchar &H378, 10 Die Hauptsache ist, dass auf dem D3-Bus ein Protokoll „1“ vorhanden ist. Das Relais wird funktionieren, aber was Sie daran anschließen, bleibt Ihnen überlassen. Im Allgemeinen ist es beim Schalten von Hochspannungsgeräten erforderlich (nur für den Fall), dass Sie sich vor einem Kurzschluss und einem Ausfall des Gehäuses schützen. Dies ist im Allgemeinen der Fall. Damit Ihr wunderbarer LPT-Anschluss im Falle eines Unfalls nicht durchbrennt. Daher ist es für solche Verbindungen sinnvoll, eine galvanische Trennung des Ports und Ihres Geräts zu verwenden, beispielsweise durch einen Optokoppler.
Wenn in Ihrem Gerät alles „durchbrennt“, fließt leider kein Strom durch das Licht, so etwas haben sie sich noch nicht ausgedacht. Damit ist der zweite Teil beendet. Wird es einen dritten Teil geben? Ich denke, dass es einen geben wird, aber darum wird es gehen... Autor: Alexey Klyushnikov, Ivanovo; Veröffentlichung: cxem.net Siehe andere Artikel Abschnitt Computer. Lesen und Schreiben nützlich Kommentare zu diesem Artikel. Neueste Nachrichten aus Wissenschaft und Technik, neue Elektronik: Kunstleder zur Touch-Emulation
15.04.2024 Petgugu Global Katzenstreu
15.04.2024 Die Attraktivität fürsorglicher Männer
14.04.2024
Weitere interessante Neuigkeiten: ▪ Überwachen Sie MSI Optix G32C4 ▪ 12,5-Gbit/s-Mindspeed-Kreuzschienen ▪ MAX30205 - medizinischer digitaler Temperatursensor ▪ Extrem haltbare Magnesiumverbindung ▪ Die Gefahr erneuerbarer Energien News-Feed von Wissenschaft und Technologie, neue Elektronik
Interessante Materialien der Freien Technischen Bibliothek: ▪ Abschnitt der Website Schutz elektrischer Geräte. Artikelauswahl ▪ Artikel Lokhvitskaya Nadezhda Aleksandrovna (Teffi). Berühmte Aphorismen ▪ Artikel Woher hatte Apollo die Leier? Ausführliche Antwort ▪ Artikel Highlander Berg. Legenden, Kultivierung, Anwendungsmethoden ▪ Artikel Türkische Sprichwörter und Sprüche. Große Auswahl
Hinterlasse deinen Kommentar zu diesem Artikel: Alle Sprachen dieser Seite Startseite | Bibliothek | Artikel | Sitemap | Site-Überprüfungen www.diagramm.com.ua |