ENCICLOPEDIA DE RADIOELECTRÓNICA E INGENIERÍA ELÉCTRICA Otra vida del puerto LPT. Parte 2. Enciclopedia de radioelectrónica e ingeniería eléctrica. Enciclopedia de radioelectrónica e ingeniería eléctrica. / Компьютеры Para registrar señales en el puerto LPT, recomiendo ensamblar un circuito (Fig. 1) que consta de ocho interruptores y ocho resistencias con una resistencia de 270 Ohm - 1 kOhm. Con esta posición de los interruptores (botones) SW1-SW8, hay un "1" lógico en todos los contactos superiores, cuando alguno está cerrado, aparecerá un "0" lógico en el contacto correspondiente. Los pines se pueden conectar directamente al bus D0-D7 (pines 2-9, dirección &H378) o a ERROR, SELECT, PAPER END, ACK y -BUSY (pines 15, 13, 12, 10 y 11, dirección &H379) .
Para mostrar datos provenientes del puerto LPT, recomiendo el siguiente esquema.
Resistencias R1-R8 con un valor nominal de 270 - 330 ohmios, cualquier LED, digamos AL307B. Tal circuito no requiere energía, todo brillará de todos modos. Me traje todas las señales, todo es inmediatamente visible. En general, recomiendo descargar el programa LPT 3D HARD Analyzer en valery-us4leh.narod.ru/dlpt.html. Escrito por Valery Kovtun. Con la ayuda de este programa... en general, lo verás por ti mismo. Ensamblemos un generador de pulso rectangular en un chip K561LA7. Generador de energía + 5V. El hecho es que es más conveniente ensamblar todos los dispositivos, por ejemplo, en las series 155, 555, para que las señales tengan un nivel TTL. Lógica "cero" 0-0,8V y registro "uno" 2,4-4,2V. La conveniencia de la serie 561 radica en la versatilidad de la fuente de alimentación: funciona igual de bien de + 3V a + 12V. Por lo tanto, la elección de los microcircuitos queda a su gusto, la única pregunta es obtener pulsos rectangulares con una amplitud de no más de + 5V. En la Figura 3 se muestra un diagrama de un generador de impulsos simple.
El generador en sí está ensamblado en los elementos D1.1-D1.3, y simplemente usé el elemento D1.4 para frentes más "hermosos" de los pulsos de salida. R1, R2, C1 - elementos de ajuste de frecuencia. Con estos parámetros de los elementos, la frecuencia de generación es de aproximadamente 5-7 Hz. Para mayor claridad, el funcionamiento del generador se puede representar en la forma del siguiente gráfico:
La salida del inversor D1.4 se conecta al pin 2 del conector LPT (bus D0). Antes de usar el generador, es necesario poner el bus D0-D7 en el modo de recepción de datos. Para ello, enviamos 37 a &H43A.
Después de eso, comenzamos a sondear el puerto &H378.
Variable A tomará el valor 254 o 255. ¿Por qué?
El hecho es que después de que los buses D0-D7 se cambian al modo de recepción de datos, se configuran al nivel de una unidad lógica (fila amarilla). Cuando el nivel D0 aparece en el bus D0, el registro "0" (fila azul) - el primer bit toma el valor de cero, lo que significa 2 + XNUMX1+22+23+24+25+26+27 = 254. Por lo tanto, podemos rastrear el cambio en la señal en el bus D0, pero si contamos el número de cambios en 1 segundo, obtendremos... correcto: un contador de frecuencia digital. Conocimiento número impulsos entrantes por segundo se puede decir sobre frecuencia en hercios. Entonces, el programa contador de frecuencia. El formulario debe tener 3 botones y una etiqueta. El botón 1 inicia el medidor de frecuencia, el botón 2 se detiene, el botón 3 - sale, la etiqueta - indica la frecuencia. ******************************************* Para aquellos que usan inpout32.dll Opción explícita 'declaración de biblioteca para trabajar con direcciones de puerto Función de declaración privada 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) 'declaración de biblioteca para contar milisegundos Función de declaración privada GetTickCount Lib "kernel32" () siempre que Dim FTV As Long ' valor inicial de la hora del sistema Dim STV As Long ' valor final de la hora del sistema Dim FV As Integer 'FV es el estado inicial del puerto Dim SV As Integer 'Estado de puerto comparable con SV Dim cntr 'contador de pulsos Dim J As Integer 'J=1 conteo permitido, J=0 conteo no permitido Subcomando privado1_Click () Fuera &H37A, 43' ponemos neumáticos D0-D7 en modo lectura FTV = GetTickCount 'hora recordada del sistema en milisegundos J = 1 'contar - permitir FV = Inp(&H378) 'leer estado del puerto SV = FV 'SV es igual al estado del puerto cntr = 0 'contador a cero Hacer mientras J <> 0 DoEvents STV = GetTickCount 'recuerda la hora actual del sistema Si STV > FTV + 1000 Entonces FrequencyShow 'si ha pasado un segundo, muestra el resultado FV = Inp(&H378) 'dirección de sondeo constante &H378 Si FV <> SV Entonces 'si el estado del puerto ha cambiado SV = FV 'SV es igual al estado del puerto cntr = cntr + 0.5 ' contador + 0.5 Si terminar Si J = 0 Entonces Salir Hacer 'si el usuario presionó Parar Red ISTE Loop End Sub Subcomando privado2_Click () 'detener bucle 'si el usuario presionó Detener J = 0 End Sub Subcomando privado3_Click () J = 0 'cuenta - parada Out &H37A, 0 'restaurar el estado del bus D0-D7 Descárgame 'salir del programa End Sub 'Rutina de visualización de frecuencia Espectáculo de subfrecuencia público () Label1.Caption = Int(cntr) & " Hz" 'mostrar resultado cntr = 0 'contador a cero Pausa (0.2) 'retraso. Necesario para medir bajas frecuencias FTV = GetTickCount 'hora recordada del sistema en milisegundos End Sub Rutina de retraso. Formato de llamada: Pausa (número de segundos) Pausa secundaria pública (valor como único) Dim Comienzo, Fin Inicio = Temporizador Temporizador Do While < Inicio + Valor DoEvents Red ISTE Loop Finalizar = Temporizador End Sub ******************************************* Para aquellos que usan dlportio.dll Opción explícita 'declaración de biblioteca para trabajar con direcciones de puerto Función de declaración privada 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) 'declaración de biblioteca para contar milisegundos Función de declaración privada GetTickCount Lib "kernel32" () siempre que Dim FTV As Long ' valor inicial de la hora del sistema Dim STV As Long ' valor final de la hora del sistema Dim FV As Integer 'FV es el estado inicial del puerto Dim SV As Integer 'Estado de puerto comparable con SV Dim cntr 'contador de pulsos Dim J As Integer 'J=1 conteo permitido, J=0 conteo no permitido Subcomando privado1_Click () DlPortWritePortUchar &H37A, 43' poner los buses D0-D7 en modo lectura FTV = GetTickCount 'hora recordada del sistema en milisegundos J = 1 'contar - permitir FV = DlPortReadPortUchar (&H378) 'leer estado del puerto SV = FV 'SV es igual al estado del puerto cntr = 0 'contador a cero Hacer mientras J <> 0 DoEvents STV = GetTickCount 'recuerda la hora actual del sistema Si STV > FTV + 1000 Entonces FrequencyShow 'si ha pasado un segundo, muestra el resultado FV = DlPortReadPortUchar (&H378) 'dirección de sondeo constante &H378 Si FV <> SV Entonces 'si el estado del puerto ha cambiado SV = FV 'SV es igual al estado del puerto cntr = cntr + 0.5 ' contador + 0.5 Si terminar Si J = 0 Entonces Salir Hacer 'si el usuario presionó Parar Red ISTE Loop End Sub Subcomando privado2_Click () 'detener bucle 'si el usuario presionó Detener J = 0 End Sub Subcomando privado3_Click () J = 0 'cuenta - parada DlPortWritePortUchar &H37A, 0 'restaurar el estado del bus D0-D7 Descárgame 'salir del programa End Sub 'Rutina de visualización de frecuencia Espectáculo de subfrecuencia público () Label6.Caption = Int(cntr) & " Hz" 'mostrar resultado cntr = 0 'contador a cero Pausa (0.2) 'retraso. Necesario para medir bajas frecuencias FTV = GetTickCount 'hora recordada del sistema en milisegundos End Sub Rutina de retraso. Formato de llamada: Pausa (número de segundos) Pausa secundaria pública (valor como único) Dim Comienzo, Fin Inicio = Temporizador Temporizador Do While < Inicio + Valor DoEvents Red ISTE Loop Finalizar = Temporizador End Sub ******************************************* ¿Y todo? Usted pregunta. Sí, eso es todo. Ese es todo el programa, que por alguna razón funciona. Ø Como puede ver, el código es casi el mismo para diferentes bibliotecas, por lo tanto, en los siguientes ejemplos, consideraremos el código solo con la biblioteca dlportio.DLL Si analiza cuidadosamente el código del programa del contador de frecuencia, notará que se agrega 0.5 al contador, centro = centro + 0.5, y no 1. El hecho es que este código de programa considera la transición del estado del puerto de 1 a 0 y viceversa de 0 a 1, por lo tanto, para contar la frecuencia, debe agregar 0.5 y luego generar Etiqueta1.Caption = Int(cntr) & "hz" O agrega 1 centro = centro + 1, Y luego salida Etiqueta1.Caption = Int(ctr/2) & "hz" Aquí están las matemáticas. Por cierto, has probado a poner algún tipo de sensor en el eje giratorio de algún motor. Probablemente, con la ayuda de este programa obtendrás un maravilloso tacómetro J Bueno, sigamos adelante. Tomamos el mismo generador de pulsos y en lugar de la resistencia R2 o R1 soldamos el termistor (el autor del artículo fue a una tienda de automóviles y compró un sensor de temperatura de un VAZ-30 por 2101 rublos). Este sensor térmico cambia su resistencia en función de la temperatura (3200 ohmios a +140C y 143 Ohm a una temperatura de +1000C.) Dado que cambiamos la resistencia, la frecuencia del generador también cambia, lo que significa que obtenemos un convertidor temperatura-frecuencia, es decir. termómetro digital. Quiero llamar su atención sobre el hecho de que el cambio de resistencia en función de la temperatura no se da de forma lineal, como se puede observar en el siguiente gráfico,
por lo tanto, "explicar" a la computadora que 100 pulsos son 20 grados y 110 pulsos son 21 grados no será muy fácil, pero sin embargo posible. La pregunta está solo en el tamaño del código y el algoritmo. Si en lugar de una resistencia colocamos un sensor de combustible del tanque de gasolina, obtenemos un indicador de nivel de líquido. Es más conveniente construir dicho indicador de la siguiente manera: 1. Medimos la frecuencia del pulso con el tanque vacío 2. Agregamos un poco de volumen (dependiendo de la gradación - precisión que desee obtener) y nuevamente medimos la frecuencia 3. Y así sucesivamente hasta la parte superior de su contenedor. Y puede construir un indicador de nivel de líquido de acuerdo con un principio diferente, si ensambla la estructura en la figura a continuación.
Si el nivel del líquido cambia, la posición del flotador con el imán también cambia, por lo que los interruptores de láminas correspondientes se cierran (abre). Lo mejor es usar un tubo de plástico de paredes delgadas. El esquema de este dispositivo es el siguiente:
Puede procesar la información de dicho dispositivo de acuerdo con el siguiente algoritmo.
Ø Algunos pueden objetarme que no es necesario poner los buses D0-D7 en modo de lectura, y esto funcionará. A esto solo puedo responder lo siguiente: quien quiera, que no traduzca. No voy a discutir este tema. Si el puerto &H378 no está en modo de recepción de datos y el pin utilizado (en nuestro caso, 2 - D0) tiene un "1" lógico, entonces el generador no funciona. La corriente de salida del bus D0-D7 en el modo de transferencia de datos es mayor que la corriente de salida del chip CMOS (561LA7), por lo que no habrá generación. Por supuesto, si cortocircuita el contacto a tierra con unas pinzas, la corriente no será suficiente. Pero me parece que no es difícil escribir una línea adicional de código y hacer lo que aconsejan los desarrolladores de hardware de computadora. Consideremos ahora el proceso inverso, es decir, el proceso de transferencia de datos desde una computadora a su dispositivo. Tomemos, por ejemplo, el mismo generador de pulsos, solo cambie un poco su circuito.
Después de aplicar energía al generador, de repente encontramos que el generador no funciona. Y funcionará solo cuando aparezca el nivel lógico "2" en la entrada 1.1 del elemento D1. DlPortWritePortUchar &H378, 1 Y todo funcionó de inmediato. Aquí hay un generador controlado por computadora. Bueno, el generador es todo pequeño, aunque debemos rendir homenaje a este dispositivo: en tantos circuitos electrónicos, es el generador de pulsos el que se toma como base. ¿Por qué no conectamos algo más serio a la computadora? Aquí hay tal esquema
Conectamos la entrada de este dispositivo a cualquier salida que nos guste, por ejemplo, a D3, conectamos la entrada GND al cable común del conector, pero habrá que tomar + 12V de una fuente de alimentación separada. El relevo se puede tomar automóvil. En general, todos los parámetros de los elementos pueden ser completamente diferentes (tomé lo que tenía a mano) DlPortWritePortUchar &H378, 8 o DlPortWritePortUchar &H378, 9 o DlPortWritePortUchar &H378, 10 Lo principal es que debe haber un registro "3" en el bus D1. El relé funcionará, pero lo que usted recoja es asunto suyo. En general, al cambiar dispositivos de alto voltaje, es necesario (por si acaso) protegerse de cortocircuitos, de averías en el caso, en general, para hacerlo. Para que en caso de accidente tu maravilloso puerto LPT no se queme. Por eso, para este tipo de conexiones es conveniente utilizar el aislamiento galvánico del puerto y de tu dispositivo, por ejemplo, a través de un optoacoplador.
Si todo en su dispositivo "se quema", entonces a través de la luz, por desgracia, la corriente no pasará, todavía no se les ocurrió tal cosa. Aquí es donde termina la segunda parte. ¿Habrá una tercera parte? Creo que sí, pero esto es de lo que se tratará... Autor: Alexey Klyushnikov, Ivanovo; Publicación: cxem.net Ver otros artículos sección Компьютеры. Lee y escribe útil comentarios sobre este artículo. Últimas noticias de ciencia y tecnología, nueva electrónica: Cuero artificial para emulación táctil.
15.04.2024 Arena para gatos Petgugu Global
15.04.2024 El atractivo de los hombres cariñosos.
14.04.2024
Otras noticias interesantes: ▪ Microcontroladores de 32 bits con un bajo consumo de energía récord ▪ Shampost - compost después de cultivar champiñones ▪ Toshiba TC3567x Bluetooth de bajo consumo 4.1 IC Feed de noticias de ciencia y tecnología, nueva electrónica
Materiales interesantes de la Biblioteca Técnica Libre: ▪ Sección del sitio Plantas cultivadas y silvestres. Selección de artículos ▪ artículo Preguntas malditas. expresión popular ▪ artículo ¿Quién es un animal y quién es una bestia? Respuesta detallada ▪ artículo Cálculo del estabilizador de corriente. Directorio ▪ artículo Filtro ante. recetas simples y consejos
Deja tu comentario en este artículo: Todos los idiomas de esta página Hogar | Biblioteca | Artículos | Mapa del sitio | Revisiones del sitio www.diagrama.com.ua |