ENCICLOPÉDIA DE RÁDIO ELETRÔNICA E ENGENHARIA ELÉTRICA Outra vida da porta LPT. Parte 2. Enciclopédia de rádio eletrônica e engenharia elétrica Enciclopédia de eletrônica de rádio e engenharia elétrica / informática Para gravar sinais na porta LPT, recomendo montar um circuito (Fig. 1) composto por oito chaves e oito resistores com resistência de 270 Ohm - 1 kOhm. Com esta posição das chaves (botões) SW1-SW8, há um "1" lógico em todos os contatos superiores, quando qualquer um estiver fechado, aparecerá um "0" lógico no contato correspondente. Os pinos podem ser conectados diretamente ao barramento D0-D7 (pinos 2-9, endereço &H378) ou a ERROR, SELECT, PAPER END, ACK e -BUSY (pinos 15, 13, 12, 10 e 11, endereço &H379) .
Para exibir dados provenientes da porta LPT, recomendo o seguinte esquema.
Resistores R1-R8 com valor nominal de 270 - 330 ohms, qualquer LED, digamos AL307B. Tal circuito não requer energia, tudo vai brilhar de qualquer maneira. Eu trouxe todos os sinais para mim, tudo é imediatamente visível. Em geral, recomendo fortemente o download do programa LPT 3D HARD Analyzer em valery-us4leh.narod.ru/dlpt.html. Escrito por Valery Kovtun. Com a ajuda deste programa ... em geral, você verá por si mesmo. Vamos montar um gerador de pulso retangular em um chip K561LA7. Gerador de energia + 5V. O fato é que é mais conveniente montar todos os aparelhos, por exemplo, nas séries 155, 555, para que os sinais tenham nível TTL. Lógica "zero" 0-0,8V e log "um" 2,4-4,2V. A conveniência da série 561 reside na versatilidade da fonte de alimentação - funciona igualmente bem de + 3V a + 12V. Portanto, a escolha dos microcircuitos fica a seu gosto, a única questão é obter pulsos retangulares com amplitude não superior a + 5V. Um diagrama de um gerador de pulso simples é mostrado na Figura 3.
O próprio gerador é montado nos elementos D1.1-D1.3, e simplesmente usei o elemento D1.4 para frentes mais "bonitas" dos pulsos de saída. R1, R2, C1 - elementos de configuração de frequência. Com esses parâmetros dos elementos, a frequência de geração é de aproximadamente 5-7 Hz. Para maior clareza, a operação do gerador pode ser representada na forma do seguinte gráfico:
A saída D1.4 do inversor é conectada ao pino 2 do conector LPT (barramento D0). Antes de usar o gerador, é necessário colocar o barramento D0-D7 no modo de recepção de dados. Para fazer isso, enviamos 37 para &H43A.
Depois disso, começamos a pesquisar a porta &H378.
Variável A terá o valor 254 ou 255. Por quê?
O fato é que depois que os barramentos D0-D7 são comutados para o modo de recepção de dados, eles são definidos para um nível de unidade lógica (linha amarela). Quando o nível D0 aparece no barramento D0, o log "0" (linha azul) - o primeiro bit assume o valor zero, o que significa 2 + XNUMX1+22+23+24+25+26+27 = 254. Assim, podemos rastrear a alteração do sinal no barramento D0, mas se contarmos o número de alterações em 1 segundo, obteremos ... certo - um contador de frequência digital. sabendo número impulsos de entrada por segundo pode ser dito sobre frequência em hertz. Então, o programa de contador de frequência. O formulário deve ter 3 botões e um Label. Botão 1 iniciar medidor de frequência, Botão 2 parar, Botão 3 - sair, Etiqueta - indica a frequência. ******************************************* Para aqueles que usam inpout32.dll Opção explícita 'declaração de biblioteca para trabalhar com endereços de porta Private Declare Function 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) 'declaração de biblioteca para contar milissegundos Função de declaração privada GetTickCount Lib "kernel32" () Contanto Dim FTV As Long ' valor inicial da hora do sistema Dim STV As Long ' valor final da hora do sistema Dim FV As Integer 'FV é o estado inicial da porta Dim SV As Integer 'Estado de porta comparável a SV Dim cntr 'contador de pulso Dim J As Integer 'J=1 contagem permitida, J=0 contagem não permitida Private Sub Command1_Click () Fora & H37A, 43 'colocamos os pneus D0-D7 em modo de leitura FTV = GetTickCount 'lembrou o tempo do sistema em milissegundos J = 1 'contagem - permitir FV = Inp(&H378) 'leia o status da porta SV = FV 'SV é igual ao estado da porta cntr = 0 'contador a zero Faça enquanto J <> 0 DoEvents STV = GetTickCount 'lembra a hora atual do sistema If STV > FTV + 1000 Then FrequencyShow 'se um segundo se passou, exibe o resultado FV = Inp(&H378) 'pesquisa constantemente o endereço &H378 If FV <> SV Then 'se o estado da porta mudou SV = FV 'SV é igual ao estado da porta cntr = cntr + 0.5' contador + 0.5 Se acabar If J = 0 Then Exit Do 'se o usuário pressionou Stop laço End Sub Private Sub Command2_Click () 'parar loop 'se o usuário pressionou Parar J=0 End Sub Private Sub Command3_Click () J = 0 'contar - parar Out &H37A, 0 'restaurar estado do barramento D0-D7 Descarregue-me 'sair do programa End Sub 'Rotina de exibição de frequência Public SubFrequencyShow() Label1.Caption = Int(cntr) & " Hz" 'exibe o resultado cntr = 0 'contador a zero Pausa (0.2) 'atraso. Necessário para medir baixas frequências FTV = GetTickCount 'lembrou o tempo do sistema em milissegundos End Sub 'Rotina de atraso. Formato de chamada: Pausa (número de segundos) Subpausa pública (valor como único) Começar escuro, terminar Iniciar = Temporizador Temporizador Do While < Iniciar + Valor DoEvents laço Terminar=Temporizador End Sub ******************************************* Para quem usa dlportio.dll Opção explícita 'declaração de biblioteca para trabalhar com endereços de porta Função de declaração 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) 'declaração de biblioteca para contar milissegundos Função de declaração privada GetTickCount Lib "kernel32" () Contanto Dim FTV As Long ' valor inicial da hora do sistema Dim STV As Long ' valor final da hora do sistema Dim FV As Integer 'FV é o estado inicial da porta Dim SV As Integer 'Estado de porta comparável a SV Dim cntr 'contador de pulso Dim J As Integer 'J=1 contagem permitida, J=0 contagem não permitida Private Sub Command1_Click () DlPortWritePortUchar &H37A, 43 'colocar barramentos D0-D7 em modo de leitura FTV = GetTickCount 'lembrou o tempo do sistema em milissegundos J = 1 'contagem - permite FV = DlPortReadPortUchar (&H378) 'lê o estado da porta SV = FV 'SV é igual ao estado da porta cntr = 0 'contador a zero Faça enquanto J <> 0 DoEvents STV = GetTickCount 'lembra a hora atual do sistema If STV > FTV + 1000 Then FrequencyShow 'se um segundo se passou, exibe o resultado FV = DlPortReadPortUchar (&H378) 'pesquisa constantemente o endereço &H378 If FV <> SV Then 'se o estado da porta mudou SV = FV 'SV é igual ao estado da porta cntr = cntr + 0.5' contador + 0.5 Se acabar If J = 0 Then Exit Do 'se o usuário pressionou Stop laço End Sub Private Sub Command2_Click () 'parar loop 'se o usuário pressionou Parar J=0 End Sub Private Sub Command3_Click () J = 0 'contar - parar DlPortWritePortUchar &H37A, 0 'restaurar estado do barramento D0-D7 Descarregue-me 'sair do programa End Sub 'Rotina de exibição de frequência Public SubFrequencyShow() Label6.Caption = Int(cntr) & " Hz" 'exibe o resultado cntr = 0 'contador a zero Pausa (0.2) 'atraso. Necessário para medir baixas frequências FTV = GetTickCount 'lembrou o tempo do sistema em milissegundos End Sub 'Rotina de atraso. Formato de chamada: Pausa (número de segundos) Subpausa pública (valor como único) Começar escuro, terminar Iniciar = Temporizador Temporizador Do While < Iniciar + Valor DoEvents laço Terminar=Temporizador End Sub ******************************************* E tudo? Você pergunta. Sim, isso é tudo. Esse é todo o programa, que por algum motivo funciona. Ø Como você pode ver, o código é quase o mesmo para bibliotecas diferentes, portanto, nos exemplos a seguir, consideraremos o código apenas com a biblioteca dlportio.dll Se você analisar cuidadosamente o código do programa do contador de frequência, notará que 0.5 é adicionado ao contador, centro = centro + 0.5, e não 1. O fato é que este código de programa considera a transição do estado da porta de 1 para 0 e vice-versa de 0 para 1, portanto, para contar a frequência, você deve adicionar 0.5 e, em seguida, emitir Label1.Caption = Int(cntr) & "hz" Ou adicione 1 centro = centro + 1, E então saída Label1.Caption = Int(cntr/2) & "hz" Aqui está a matemática. A propósito, você já tentou colocar algum tipo de sensor no eixo rotativo de algum motor? Provavelmente, com a ajuda deste programa, você obterá um maravilhoso tacômetro J Bem, vamos seguir em frente. Pegamos o mesmo gerador de pulsos e em vez do resistor R2 ou R1 soldamos o termistor (o autor do artigo foi a uma oficina mecânica e comprou um sensor de temperatura de um VAZ-30 por 2101 rublos). Este sensor de temperatura muda sua resistência dependendo da temperatura (3200 ohms em +140C e 143 Ohm a uma temperatura de +1000C.) Como mudamos a resistência, a frequência do gerador também muda, o que significa que obtemos um conversor temperatura-frequência, ou seja termômetro digital. Quero chamar a atenção para o fato de que a variação da resistência em função da temperatura não ocorre de forma linear, como pode ser observado no gráfico a seguir,
portanto, "explicar" ao computador que 100 pulsos são 20 graus e 110 pulsos são 21 graus não será muito fácil, mas ainda assim possível. A questão está apenas no tamanho do código e do algoritmo. Se, em vez de um resistor, colocarmos um sensor de combustível do tanque de gasolina, obteremos um indicador de nível de líquido. É mais conveniente construir esse indicador da seguinte maneira: 1. Medimos a frequência de pulso com um tanque vazio 2. Adicionamos algum volume (dependendo da gradação - precisão que você deseja obter) e medimos novamente a frequência 3. E assim por diante até o topo do seu recipiente. E você pode construir um indicador de nível de líquido de acordo com um princípio diferente, se montar a estrutura da figura abaixo.
Se o nível do líquido mudar, a posição da bóia com o ímã também muda, de modo que os interruptores reed correspondentes fecham (abrem). É melhor usar um tubo de plástico de parede fina. O esquema deste dispositivo é o seguinte:
Você pode processar informações de tal dispositivo de acordo com o seguinte algoritmo.
Ø Alguns podem objetar a mim que não é necessário colocar os barramentos D0-D7 no modo de leitura, e isso funcionará. A isso só posso responder o seguinte - quem quiser, não traduza. Não vou discutir este assunto. Se a porta &H378 não estiver no modo de recebimento de dados e o pino usado (no nosso caso 2 - D0 ) tiver um "1" lógico, então gerador não funciona. A corrente de saída do barramento D0-D7 no modo de transferência de dados é maior que a corrente de saída do chip CMOS (561LA7), portanto não haverá geração. Obviamente, se você curto-circuitar o contato com o solo com uma pinça, nenhuma corrente será suficiente. Mas me parece que não é difícil digitar uma linha extra de código e fazer o que os desenvolvedores de hardware de computador aconselham. Vamos agora considerar o processo inverso, ou seja, o processo de transferência de dados de um computador para o seu dispositivo. Vamos pegar por exemplo o mesmo gerador de pulsos, apenas mude um pouco o seu circuito.
Depois de aplicar energia ao gerador, descobrimos repentinamente que o gerador não está funcionando. E funcionará somente quando o nível lógico "2" aparecer na entrada 1.1 do elemento D1. DlPortWritePortUchar &H378, 1 E tudo funcionou imediatamente. Aqui está um gerador controlado por computador. Bem, o gerador é todo pequeno, embora devamos prestar homenagem a este dispositivo - em tantos circuitos eletrônicos, é o gerador de pulsos que é tomado como base. Por que não conectamos algo mais sério ao computador? Aqui está esse esquema
Conectamos a entrada deste dispositivo a qualquer saída que desejarmos, por exemplo, a D3, conectamos a entrada GND ao fio comum do conector, mas + 12V terá que ser retirado de uma fonte de alimentação separada. O relé pode ser levado de automóvel. Em geral, todos os parâmetros dos elementos podem ser completamente diferentes (peguei o que tinha em mãos) DlPortWritePortUchar &H378, 8 ou DlPortWritePortUchar &H378, 9 ou DlPortWritePortUchar &H378, 10 O principal é que deve haver um log "3" no barramento D1. O relé funcionará, mas o que você pegar nele é problema seu. Em geral, ao trocar dispositivos de alta tensão, é necessário (apenas no caso) se proteger de curtos-circuitos, de avarias ao caso, em geral, para fazê-lo. Para que em caso de acidente sua maravilhosa porta LPT não queime. Portanto, para tais conexões é conveniente usar o isolamento galvânico da porta e do seu dispositivo, por exemplo, por meio de um optoacoplador.
Se tudo no seu aparelho "queimar", então pela luz - infelizmente, a corrente não vai passar, eles ainda não inventaram isso. Aqui termina a segunda parte. Haverá uma terceira parte - acho que sim, mas é sobre isso ... Autor: Alexey Klyushnikov, Ivanovo; Publicação: cxem.net Veja outros artigos seção informática. Leia e escreva útil comentários sobre este artigo. Últimas notícias de ciência e tecnologia, nova eletrônica: Máquina para desbastar flores em jardins
02.05.2024 Microscópio infravermelho avançado
02.05.2024 Armadilha de ar para insetos
01.05.2024
Outras notícias interessantes: ▪ Vermes contra o envelhecimento ▪ Melhorando a qualidade do solo marciano ▪ TV impede bebês de aprender a falar Feed de notícias de ciência e tecnologia, nova eletrônica
Materiais interessantes da Biblioteca Técnica Gratuita: ▪ seção do site Descrições de cargos. Seleção de artigos ▪ artigo Rir, realmente, não é pecado de tudo que parece engraçado. expressão popular ▪ O que aconteceu nos EUA no século XNUMX? Resposta detalhada ▪ artigo Dicas tecnológicas. Enciclopédia de rádio eletrônica e engenharia elétrica ▪ artigo Estabilizador de tensão para 35 volts. Enciclopédia de rádio eletrônica e engenharia elétrica
Deixe seu comentário neste artigo: Todos os idiomas desta página Página principal | Biblioteca | Artigos | Mapa do Site | Revisões do site www.diagrama.com.ua |