Bibliothèque technique gratuite ENCYCLOPÉDIE DE LA RADIOÉLECTRONIQUE ET DU GÉNIE ÉLECTRIQUE Une autre vie du port LPT. Partie 2. Encyclopédie de l'électronique radio et de l'électrotechnique Encyclopédie de l'électronique radio et de l'électrotechnique / ordinateurs Pour enregistrer des signaux sur le port LPT, je recommande d'assembler un circuit (Fig. 1) composé de huit commutateurs et de huit résistances d'une résistance de 270 Ohm - 1 kOhm. Avec cette position des interrupteurs (boutons) SW1-SW8, il y a un "1" logique sur tous les contacts supérieurs, quand l'un est fermé, un "0" logique apparaîtra sur le contact correspondant. Les broches peuvent être connectées directement au bus D0-D7 (broches 2-9, adresse &H378) ou à ERROR, SELECT, PAPER END, ACK et -BUSY (broches 15, 13, 12, 10 et 11, adresse &H379) .
Pour afficher les données provenant du port LPT, je recommande le schéma suivant.
Résistances R1-R8 avec une valeur nominale de 270 à 330 ohms, toutes les LED, disons AL307B. Un tel circuit ne nécessite pas d'alimentation, tout brillera de toute façon. J'ai apporté tous les signaux à moi, tout est immédiatement visible. En général, je recommande fortement de télécharger le programme LPT 3D HARD Analyzer sur valery-us4leh.narod.ru/dlpt.html. Écrit par Valery Kovtun. Avec l'aide de ce programme ... en général, vous verrez par vous-même. Assemblons un générateur d'impulsions rectangulaire sur une puce K561LA7. Groupe électrogène + 5V. Le fait est qu'il est plus pratique d'assembler tous les appareils, par exemple sur les séries 155, 555, afin que les signaux aient un niveau TTL. Logique "zéro" 0-0,8V et log "un" 2,4-4,2V. La commodité de la série 561 réside dans la polyvalence de l'alimentation - elle fonctionne aussi bien de + 3V à + 12V. Par conséquent, le choix des microcircuits reste à votre goût, la seule question est d'obtenir des impulsions rectangulaires d'une amplitude ne dépassant pas + 5V. Un schéma d'un simple générateur d'impulsions est illustré à la figure 3.
Le générateur lui-même est assemblé sur les éléments D1.1-D1.3, et j'ai simplement utilisé l'élément D1.4 pour des fronts plus "beaux" des impulsions de sortie. R1, R2, C1 - éléments de réglage de fréquence. Avec ces paramètres des éléments, la fréquence de génération est d'environ 5-7 Hz. Pour plus de clarté, le fonctionnement du générateur peut être représenté sous la forme du graphique suivant :
La sortie D1.4 de l'onduleur est connectée à la broche 2 du connecteur LPT (bus D0). Avant d'utiliser le générateur, il est nécessaire de mettre le bus D0-D7 en mode de réception de données. Pour ce faire, nous envoyons 37 à &H43A.
Après cela, nous commençons à interroger le port &H378.
Variable A prendra la valeur 254 ou 255. Pourquoi ?
Le fait est qu'une fois que les bus D0-D7 sont passés en mode de réception de données, ils sont définis sur un niveau d'unité logique (ligne jaune). Lorsque le niveau D0 apparaît sur le bus D0, le log "0" (ligne bleue) - le premier bit prend la valeur zéro, c'est-à-dire 2 + XNUMX1+22+23+24+25+26+27 = 254. Ainsi, nous pouvons suivre le changement du signal sur le bus D0, mais si nous comptons le nombre de changements en 1 seconde, nous obtiendrons ... à droite - un compteur de fréquence numérique. Connaissance nombre impulsions entrantes par seconde on peut dire de fréquence en Hertz. Donc, le programme de compteur de fréquence. Le formulaire doit avoir 3 boutons et une étiquette. Le bouton 1 démarre le fréquencemètre, le bouton 2 s'arrête, le bouton 3 - quitte, l'étiquette - indique la fréquence. ******************************************* Pour ceux qui utilisent inpout32.dll Option explicite 'déclaration de bibliothèque pour travailler avec des adresses de port Fonction de déclaration privée Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) 'déclaration de bibliothèque pour compter les millisecondes Fonction de déclaration privée GetTickCount Lib "kernel32" () As Long Dim FTV As Long ' valeur initiale de l'heure système Dim STV As Long ' valeur finale de l'heure système Dim FV As Integer 'FV est l'état initial du port Dim SV As Integer 'État du port comparable à SV Dim cntr 'compteur d'impulsions Dim J As Integer 'J=1 compte autorisé, J=0 compte non autorisé Private Sub Command1_Click () Out &H37A, 43' on met les pneus D0-D7 en mode lecture FTV = GetTickCount 'heure système mémorisée en millisecondes J = 1 'compter - autoriser FV = Inp(&H378) 'Lire l'état du port SV = FV 'SV est égal à l'état du port cntr = 0 ' compteur à zéro Faire Tant que J <> 0 DoEvents STV = GetTickCount 'se souvenir de l'heure système actuelle If STV > FTV + 1000 Then FrequencyShow 'si une seconde s'est écoulée, affiche le résultat FV = Inp(&H378) 'interroge constamment l'adresse &H378 If FV <> SV Then 'si l'état du port a changé SV = FV 'SV est égal à l'état du port cntr = cntr + 0.5 ' compteur + 0.5 Si fin Si J = 0 Then Exit Do ' si l'utilisateur a appuyé sur Stop boucle End Sub Private Sub Command2_Click () 'arrêter la boucle 'si l'utilisateur a appuyé sur Stop J = 0 End Sub Private Sub Command3_Click () J = 0' comptage - stop Out &H37A, 0 'restaure l'état du bus D0-D7 Déchargez-moi 'quittez le programme End Sub 'Routine d'affichage de la fréquence Public SubFrequencyShow() Label1.Caption = Int(cntr) & " Hz" 'affiche le résultat cntr = 0 ' compteur à zéro Pause (0.2) 'délai. Nécessaire pour mesurer les basses fréquences FTV = GetTickCount 'heure système mémorisée en millisecondes End Sub 'Retarder la routine. Format d'appel : Pause (nombre de secondes) Public Sub Pause (valeur unique) Dim Début, Fin Démarrer = Minuterie Faire pendant que la minuterie < Début + Valeur DoEvents boucle Fin=Minuteur End Sub ******************************************* Pour ceux qui utilisent dlportio.dll Option explicite 'déclaration de bibliothèque pour travailler avec des adresses de port Fonction de déclaration privée DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte Private Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte) 'déclaration de bibliothèque pour compter les millisecondes Fonction de déclaration privée GetTickCount Lib "kernel32" () As Long Dim FTV As Long ' valeur initiale de l'heure système Dim STV As Long ' valeur finale de l'heure système Dim FV As Integer 'FV est l'état initial du port Dim SV As Integer 'État du port comparable à SV Dim cntr 'compteur d'impulsions Dim J As Integer 'J=1 compte autorisé, J=0 compte non autorisé Private Sub Command1_Click () DlPortWritePortUchar &H37A, 43 'met les bus D0-D7 en mode lecture FTV = GetTickCount 'heure système mémorisée en millisecondes J = 1 'compter - autoriser FV = DlPortReadPortUchar (&H378) 'Lire l'état du port SV = FV 'SV est égal à l'état du port cntr = 0 ' compteur à zéro Faire Tant que J <> 0 DoEvents STV = GetTickCount 'se souvenir de l'heure système actuelle If STV > FTV + 1000 Then FrequencyShow 'si une seconde s'est écoulée, affiche le résultat FV = DlPortReadPortUchar (&H378) 'interroge constamment l'adresse &H378 If FV <> SV Then 'si l'état du port a changé SV = FV 'SV est égal à l'état du port cntr = cntr + 0.5 ' compteur + 0.5 Si fin Si J = 0 Then Exit Do ' si l'utilisateur a appuyé sur Stop boucle End Sub Private Sub Command2_Click () 'arrêter la boucle 'si l'utilisateur a appuyé sur Stop J = 0 End Sub Private Sub Command3_Click () J = 0' comptage - stop DlPortWritePortUchar &H37A, 0 'restaure l'état du bus D0-D7 Déchargez-moi 'quittez le programme End Sub 'Routine d'affichage de la fréquence Public SubFrequencyShow() Label6.Caption = Int(cntr) & " Hz" 'affiche le résultat cntr = 0 ' compteur à zéro Pause (0.2) 'délai. Nécessaire pour mesurer les basses fréquences FTV = GetTickCount 'heure système mémorisée en millisecondes End Sub 'Retarder la routine. Format d'appel : Pause (nombre de secondes) Public Sub Pause (valeur unique) Dim Début, Fin Démarrer = Minuterie Faire pendant que la minuterie < Début + Valeur DoEvents boucle Fin=Minuteur End Sub ******************************************* Et tout? Tu demandes. Oui c'est tout. C'est tout le programme qui, pour une raison quelconque, fonctionne. Ø Comme vous pouvez le voir, le code est presque le même pour différentes bibliothèques, donc, dans les exemples suivants, nous considérerons le code uniquement avec la bibliothèque dlportio.dll Si vous analysez attentivement le code de programme du compteur de fréquence, vous remarquerez que 0.5 est ajouté au compteur, centr = centr + 0.5, et non 1. Le fait est que ce code de programme considère la transition de l'état du port à la fois de 1 à 0, et vice versa de 0 à 1, par conséquent, pour compter la fréquence, vous devez soit ajouter 0.5, puis sortir Label1.Caption = Int(cntr) & "hz" Ou ajouter 1 centr = centr + 1, Et puis sortie Label1.Caption = Int(cntr/2) & "hz" Voici le calcul. Au fait, avez-vous essayé de mettre une sorte de capteur sur l'arbre rotatif d'un moteur. Probablement, avec l'aide de ce programme, vous obtiendrez un merveilleux tachymètre J Eh bien, passons à autre chose. Nous prenons le même générateur d'impulsions et au lieu de la résistance R2 ou R1, nous soudons la thermistance (l'auteur de l'article est allé dans un magasin de voitures et a acheté un capteur de température d'un VAZ-30 pour 2101 roubles). Ce capteur thermique change sa résistance en fonction de la température (3200 ohms à +140C et 143 Ohm à une température de +1000C.) Puisque nous changeons la résistance, la fréquence du générateur change également, ce qui signifie que nous obtenons un convertisseur température-fréquence, c'est à dire. thermomètre digital. Je tiens à attirer votre attention sur le fait que le changement de résistance en fonction de la température ne se produit pas de manière linéaire, comme on peut le voir sur le graphique suivant,
par conséquent, "expliquer" à l'ordinateur que 100 impulsions correspondent à 20 degrés et que 110 impulsions correspondent à 21 degrés ne sera pas très facile, mais néanmoins possible. La question n'est que dans la taille du code et de l'algorithme. Si au lieu d'une résistance, nous mettons un capteur de carburant du réservoir d'essence, nous obtenons alors un indicateur de niveau de liquide. Il est plus commode de construire un tel indicateur comme suit : 1. Nous mesurons la fréquence d'impulsion avec un réservoir vide 2. Nous ajoutons du volume (en fonction de la gradation - précision que vous souhaitez obtenir) et mesurons à nouveau la fréquence 3. Et ainsi de suite jusqu'au sommet de votre conteneur. Et vous pouvez construire un indicateur de niveau de liquide selon un principe différent, si vous assemblez la structure de la figure ci-dessous.
Si le niveau de liquide change, la position du flotteur avec l'aimant change également, de sorte que les interrupteurs à lames correspondants se ferment (s'ouvrent). Il est préférable d'utiliser un tube en plastique à paroi mince. Le schéma de cet appareil est le suivant :
Vous pouvez traiter les informations d'un tel appareil selon l'algorithme suivant.
Ø Certains pourront m'objecter qu'il n'est pas nécessaire de mettre les bus D0-D7 en mode lecture, et cela fonctionnera. À cela, je ne peux que répondre à ce qui suit - qui veut, qu'il ne traduise pas. Je n'aborderai pas ce sujet. Si le port &H378 n'est pas en mode de réception de données et que la broche utilisée (dans notre cas 2 - D0 ) a un "1" logique, alors le générateur ne fonctionnera pas. Le courant de sortie du bus D0-D7 en mode transfert de données est supérieur au courant de sortie de la puce CMOS (561LA7), il n'y aura donc pas de génération. Bien sûr, si vous court-circuitez le contact à la terre avec des pincettes, aucun courant ne suffira. Mais il me semble qu'il n'est pas difficile de taper une ligne de code supplémentaire et de faire ce que conseillent les développeurs de matériel informatique. Considérons maintenant le processus inverse, c'est-à-dire le processus de transfert de données d'un ordinateur vers votre appareil. Prenons par exemple le même générateur d'impulsions, il suffit de changer un peu son circuit.
Après avoir mis le générateur sous tension, nous constatons soudainement que le générateur ne fonctionne pas. Et cela ne fonctionnera que lorsque le niveau logique "2" apparaîtra à l'entrée 1.1 de l'élément D1. DlPortWritePortUchar &H378, 1 Et tout a immédiatement fonctionné. Voici un générateur contrôlé par ordinateur. Eh bien, le générateur est tout petit, même s'il faut rendre hommage à cet appareil - dans tant de circuits électroniques, c'est le générateur d'impulsions qui sert de base. Pourquoi ne pas connecter quelque chose de plus sérieux à l'ordinateur. Voici un tel schéma
Nous connectons l'entrée de cet appareil à n'importe quelle sortie que nous aimons, par exemple, à D3, nous connectons l'entrée GND au fil commun du connecteur, mais le + 12V devra être prélevé sur une source d'alimentation séparée. Le relais peut être pris en automobile. En général, tous les paramètres des éléments peuvent être complètement différents (j'ai pris ce qui était sous la main) DlPortWritePortUchar &H378, 8 ou DlPortWritePortUchar &H378, 9 ou DlPortWritePortUchar &H378, 10 L'essentiel est qu'il y ait un journal "3" sur le bus D1. Le relais fonctionnera, mais ce que vous captez vous regarde. En général, lors de la commutation d'appareils haute tension, il est nécessaire (au cas où) de se protéger des courts-circuits, de la panne au boîtier, en général, de le faire. Ainsi, en cas d'accident, votre merveilleux port LPT ne s'éteindra pas. Par conséquent, pour de telles connexions, il est pratique d'utiliser l'isolation galvanique du port et de votre appareil, par exemple via un optocoupleur.
Si tout dans votre appareil "brûle", alors à travers la lumière - hélas, le courant ne passera pas, ils n'ont pas encore trouvé une telle chose. C'est là que se termine la deuxième partie. Y aura-t-il une troisième partie - je pense que oui, mais voici de quoi il s'agira... Auteur : Alexey Klyushnikov, Ivanovo ; Publication : cxem.net Voir d'autres articles section ordinateurs. Lire et écrire utile commentaires sur cet article. Dernières nouvelles de la science et de la technologie, nouvelle électronique : Machine pour éclaircir les fleurs dans les jardins
02.05.2024 Microscope infrarouge avancé
02.05.2024 Piège à air pour insectes
01.05.2024
Autres nouvelles intéressantes : ▪ Les vers contre le vieillissement ▪ Améliorer la qualité du sol martien ▪ La télévision empêche les bébés d'apprendre à parler ▪ Expression du visage de chat ▪ Les nanotubes repoussent l'eau Fil d'actualité de la science et de la technologie, nouvelle électronique
Matériaux intéressants de la bibliothèque technique gratuite : ▪ section des descriptions de poste du site Web. Sélection d'articles ▪ article Rire, vraiment, n'est pas un péché pour tout ce qui semble drôle. Expression populaire ▪ Que s'est-il passé aux États-Unis au XIXe siècle ? Réponse détaillée ▪ article Conseils technologiques. Encyclopédie de l'électronique radio et de l'électrotechnique
Laissez votre commentaire sur cet article : Toutes les langues de cette page Page principale | bibliothèque | Articles | Plan du site | Avis sur le site www.diagramme.com.ua |