ENCICLOPEDIA DELLA RADIOELETTRONICA ED ELETTRICA Un'altra vita del porto LPT. Parte 2. Enciclopedia dell'elettronica radio e dell'ingegneria elettrica Enciclopedia della radioelettronica e dell'elettrotecnica / Компьютеры Per registrare i segnali sulla porta LPT, consiglio di assemblare un circuito (Fig. 1) composto da otto interruttori e otto resistori con una resistenza di 270 Ohm - 1 kOhm. Con questa posizione degli interruttori (pulsanti) SW1-SW8, c'è un "1" logico su tutti i contatti superiori, quando uno qualsiasi è chiuso, apparirà uno "0" logico sul contatto corrispondente. I pin possono essere collegati direttamente al bus D0-D7 (pin 2-9, indirizzo &H378) o a ERROR, SELECT, PAPER END, ACK e -BUSY (pin 15, 13, 12, 10 e 11, indirizzo &H379) .
Per visualizzare i dati provenienti dalla porta LPT, consiglio il seguente schema.
Resistori R1-R8 con un valore nominale di 270 - 330 ohm, qualsiasi LED, diciamo AL307B. Un circuito del genere non richiede alimentazione, tutto si illuminerà comunque. Ho portato tutti i segnali a me stesso, tutto è immediatamente visibile. In generale, consiglio vivamente di scaricare il programma LPT 3D HARD Analyzer su valery-us4leh.narod.ru/dlpt.html. Scritto da Valery Kovtun. Con l'aiuto di questo programma ... in generale, vedrai di persona. Montiamo un generatore di impulsi rettangolare su un chip K561LA7. Generatore di corrente + 5V. Il fatto è che è più conveniente assemblare tutti i dispositivi, ad esempio, su serie 155, 555, in modo che i segnali abbiano un livello TTL. Logica "zero" 0-0,8V e log "uno" 2,4-4,2V. La comodità della serie 561 risiede nella versatilità dell'alimentatore: funziona altrettanto bene da + 3V a + 12V. Pertanto, la scelta dei microcircuiti rimane di tuo gusto, l'unica domanda è ottenere impulsi rettangolari con un'ampiezza non superiore a + 5V. Un diagramma di un semplice generatore di impulsi è mostrato in Figura 3.
Il generatore stesso è assemblato sugli elementi D1.1-D1.3, e ho semplicemente usato l'elemento D1.4 per fronti più "belli" degli impulsi di uscita. R1, R2, C1 - elementi di impostazione della frequenza. Con questi parametri degli elementi, la frequenza di generazione è di circa 5-7 Hz. Per chiarezza, il funzionamento del generatore può essere rappresentato nella forma del seguente grafico:
L'uscita D1.4 dell'inverter è collegata al pin 2 del connettore LPT (bus D0). Prima di utilizzare il generatore, è necessario mettere il bus D0-D7 in modalità di ricezione dati. Per fare ciò, inviamo 37 a &H43A.
Successivamente, iniziamo il polling della porta e H378.
Переменная A assumerà il valore 254 o 255. Perché?
Il fatto è che dopo che i bus D0-D7 sono passati alla modalità di ricezione dei dati, vengono impostati al livello di un'unità logica (riga gialla). Quando il livello D0 appare sul bus D0, il registro "0" (riga blu) - il primo bit assume il valore zero, che significa 2 + XNUMX1+22+23+24+25+26+27 = 254. Pertanto, possiamo tenere traccia della variazione del segnale sul bus D0, ma se contiamo il numero di modifiche in 1 secondo, otterremo ... giusto: un frequenzimetro digitale. Conoscere numero impulsi in arrivo al secondo si può dire frequenza in hertz. Quindi, il programma del contatore di frequenza. Il modulo dovrebbe avere 3 pulsanti e un'etichetta. Pulsante 1 start frequenzimetro, Pulsante 2 stop, Pulsante 3 - uscita, Etichetta - indica la frequenza. ******************************************* Per coloro che utilizzano inpout32.dll Opzione esplicita 'dichiarazione di libreria per lavorare con gli indirizzi di porta Funzione di dichiarazione privata 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) 'dichiarazione di libreria per il conteggio dei millisecondi Funzione di dichiarazione privata GetTickCount Lib "kernel32" () As Long Dim FTV As Long ' valore iniziale dell'ora di sistema Dim STV As Long ' valore finale dell'ora di sistema Dim FV As Integer 'FV è lo stato iniziale della porta Dim SV As Integer 'Stato porta SV-comparabile Dim cntr 'contaimpulsi Dim J As Integer 'J=1 conteggio consentito, J=0 conteggio non consentito Sottocomando privato1_Click () Fuori &H37A, 43' mettiamo le gomme D0-D7 in modalità lettura FTV = GetTickCount 'tempo di sistema memorizzato in millisecondi J = 1 'conta - permetti FV = Inp(&H378) 'legge lo stato della porta SV = FV 'SV è uguale allo stato della porta cntr = 0 'contatore a zero Fai mentre J <> 0 FaiEventi STV = GetTickCount 'ricorda l'ora corrente del sistema If STV > FTV + 1000 Then FrequencyShow 'se è passato un secondo, mostra il risultato FV = Inp(&H378) 'interroga costantemente l'indirizzo &H378 If FV <> SV Allora 'se lo stato della porta è cambiato SV = FV 'SV è uguale allo stato della porta cntr = cntr + 0.5 ' contatore + 0.5 End If Se J = 0 Allora Esci Fa' se l'utente ha premuto Stop Ciclo continuo End Sub Sottocomando privato2_Click () 'fermare il ciclo 'se l'utente ha premuto Stop J=0 End Sub Sottocomando privato3_Click () J = 0 'conteggio - stop Out &H37A, 0 'ripristina lo stato del bus D0-D7 Scaricami' esci dal programma End Sub 'Routine di visualizzazione della frequenza SubFrequencyShow pubblico() Label1.Caption = Int(cntr) & " Hz" 'visualizza il risultato cntr = 0 'contatore a zero Pausa (0.2) 'ritardo. Necessario per misurare le basse frequenze FTV = GetTickCount 'tempo di sistema memorizzato in millisecondi End Sub 'Routine di ritardo. Formato chiamata: Pausa (numero di secondi) Sottopausa pubblica (valore come singolo) Inizio debole, fine Inizio = Timer Tempo durante il tempo < Inizio + Valore FaiEventi Ciclo continuo Fine=Timer End Sub ******************************************* Per coloro che usano dlportio.dll Opzione esplicita 'dichiarazione di libreria per lavorare con gli indirizzi di porta Funzione di dichiarazione privata DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte Private Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (Porta ByVal As Long, ByVal Value As Byte) 'dichiarazione di libreria per il conteggio dei millisecondi Funzione di dichiarazione privata GetTickCount Lib "kernel32" () As Long Dim FTV As Long ' valore iniziale dell'ora di sistema Dim STV As Long ' valore finale dell'ora di sistema Dim FV As Integer 'FV è lo stato iniziale della porta Dim SV As Integer 'Stato porta SV-comparabile Dim cntr 'contaimpulsi Dim J As Integer 'J=1 conteggio consentito, J=0 conteggio non consentito Sottocomando privato1_Click () DlPortWritePortUchar & H37A, 43 'mette i bus D0-D7 in modalità di lettura FTV = GetTickCount 'tempo di sistema memorizzato in millisecondi J = 1 'conta - consenti FV = DlPortReadPortUchar (&H378) 'legge lo stato della porta SV = FV 'SV è uguale allo stato della porta cntr = 0 'contatore a zero Fai mentre J <> 0 FaiEventi STV = GetTickCount 'ricorda l'ora corrente del sistema If STV > FTV + 1000 Then FrequencyShow 'se è passato un secondo, mostra il risultato FV = DlPortReadPortUchar (&H378) 'interroga costantemente l'indirizzo &H378 If FV <> SV Allora 'se lo stato della porta è cambiato SV = FV 'SV è uguale allo stato della porta cntr = cntr + 0.5 ' contatore + 0.5 End If Se J = 0 Allora Esci Fa' se l'utente ha premuto Stop Ciclo continuo End Sub Sottocomando privato2_Click () 'fermare il ciclo 'se l'utente ha premuto Stop J=0 End Sub Sottocomando privato3_Click () J = 0 'conteggio - stop DlPortWritePortUchar &H37A, 0 'ripristina lo stato del bus D0-D7 Scaricami' esci dal programma End Sub 'Routine di visualizzazione della frequenza SubFrequencyShow pubblico() Label6.Caption = Int(cntr) & " Hz" 'visualizza il risultato cntr = 0 'contatore a zero Pausa (0.2) 'ritardo. Necessario per misurare le basse frequenze FTV = GetTickCount 'tempo di sistema memorizzato in millisecondi End Sub 'Routine di ritardo. Formato chiamata: Pausa (numero di secondi) Sottopausa pubblica (valore come singolo) Inizio debole, fine Inizio = Timer Tempo durante il tempo < Inizio + Valore FaiEventi Ciclo continuo Fine=Timer End Sub ******************************************* E tutto? Tu chiedi. Sì, questo è tutto. Questo è l'intero programma, che per qualche motivo funziona. Ø Come puoi vedere, il codice è pressoché lo stesso per librerie diverse, quindi, negli esempi seguenti, considereremo il codice solo con la libreria dlportio.dll Se analizzi attentamente il codice del programma del frequenzimetro, noterai che al contatore viene aggiunto 0.5, ctr = ctr + 0.5, e non 1. Il fatto è che questo codice di programma considera la transizione dello stato della porta sia da 1 a 0, sia viceversa da 0 a 1, quindi, per contare la frequenza, è necessario aggiungere 0.5 e quindi emettere Label1.Caption = Int(cntr) & "hz" Oppure aggiungi 1 ctr = ctr + 1, E poi uscita Label1.Caption = Int(cntr/2) & "hz" Ecco la matematica. A proposito, hai provato a mettere una specie di sensore sull'albero rotante di qualche motore. Probabilmente, con l'aiuto di questo programma otterrai un meraviglioso tachimetro J Bene, andiamo avanti. Prendiamo lo stesso generatore di impulsi e invece del resistore R2 o R1 saldiamo il termistore (l'autore dell'articolo è andato in un'officina e ha acquistato un sensore di temperatura da un VAZ-30 per 2101 rubli). Questo sensore termico cambia la sua resistenza in funzione della temperatura (3200 ohm a +140C e 143 Ohm a una temperatura di +1000C.) Poiché cambiamo la resistenza, cambia anche la frequenza del generatore, il che significa che otteniamo un convertitore temperatura-frequenza, cioè. termometro digitale. Voglio attirare la tua attenzione sul fatto che il cambiamento di resistenza in funzione della temperatura non avviene in modo lineare, come si può vedere nel grafico seguente,
pertanto, "spiegare" al computer che 100 impulsi sono 20 gradi e 110 impulsi sono 21 gradi non sarà molto facile, ma comunque possibile. La domanda è solo nella dimensione del codice e dell'algoritmo. Se invece di un resistore mettiamo un sensore del carburante dal serbatoio del gas, otteniamo un indicatore del livello del liquido. È più conveniente costruire un tale indicatore come segue: 1. Misuriamo la frequenza degli impulsi con un serbatoio vuoto 2. Aggiungiamo un po' di volume (a seconda della gradazione - precisione che vogliamo ottenere) e misuriamo nuovamente la frequenza 3. E così via fino in cima al tuo contenitore. E puoi costruire un indicatore di livello del liquido secondo un principio diverso, se assembli la struttura nella figura sottostante.
Se il livello del liquido cambia, cambia anche la posizione del galleggiante con il magnete, quindi gli interruttori reed corrispondenti si chiudono (si aprono). È meglio usare un tubo di plastica a parete sottile. Lo schema di questo dispositivo è il seguente:
È possibile elaborare le informazioni da tale dispositivo in base al seguente algoritmo.
Ø Alcuni potrebbero obiettarmi che non è necessario mettere i bus D0-D7 in modalità lettura, e questo funzionerà. A questo posso solo rispondere a quanto segue: chi vuole, non traduca. Non tratterò questo argomento. Se la porta &H378 non è in modalità di ricezione dati e il pin utilizzato (nel nostro caso 2 - D0 ) ha un "1" logico, allora il generatore non funzionerà. La corrente di uscita del bus D0-D7 in modalità di trasferimento dati è maggiore della corrente di uscita del chip CMOS (561LA7), quindi non ci sarà generazione. Ovviamente, se cortocircuiti il contatto a terra con una pinzetta, la corrente non sarà sufficiente. Ma mi sembra che non sia difficile digitare una riga di codice in più e fare come consigliano gli sviluppatori dell'hardware del computer. Consideriamo ora il processo inverso, cioè il processo di trasferimento dei dati da un computer al dispositivo. Prendiamo ad esempio lo stesso generatore di impulsi, basta cambiarne un po' il circuito.
Dopo aver applicato l'alimentazione al generatore, scopriamo improvvisamente che il generatore non funziona. E funzionerà solo quando il livello logico "2" appare all'ingresso 1.1 dell'elemento D1. DlPortWritePortUchar &H378, 1 E tutto ha funzionato immediatamente. Ecco un generatore controllato da computer. Ebbene, il generatore è tutto piccolo, anche se dobbiamo rendere omaggio a questo dispositivo: in così tanti circuiti elettronici, è il generatore di impulsi che viene preso come base. Perché non colleghiamo qualcosa di più serio al computer. Ecco un tale schema
Colleghiamo l'ingresso di questo dispositivo a qualsiasi uscita che ci piace, ad esempio, a D3, colleghiamo l'ingresso GND al filo comune del connettore, ma + 12V dovrà essere prelevato da una fonte di alimentazione separata. Il relè può essere preso in automobile. In generale, tutti i parametri degli elementi possono essere completamente diversi (ho preso ciò che era a portata di mano) DlPortWritePortUchar &H378, 8 o DlPortWritePortUchar &H378, 9 o DlPortWritePortUchar &H378, 10 La cosa principale è che dovrebbe esserci un registro "3" sul bus D1. Il relè funzionerà, ma ciò che raccogli sono affari tuoi. In generale, quando si commutano dispositivi ad alta tensione, è necessario (per ogni evenienza) proteggersi dai cortocircuiti, dai guasti al caso, in generale, per farlo. In modo che in caso di incidente la tua meravigliosa porta LPT non si bruci. Pertanto, per tali connessioni è conveniente utilizzare l'isolamento galvanico della porta e del dispositivo, ad esempio tramite un accoppiatore ottico.
Se tutto nel tuo dispositivo "si esaurisce", allora attraverso la luce - ahimè, la corrente non passerà, non hanno ancora escogitato una cosa del genere. Finisce qui la seconda parte. Ci sarà una terza parte - penso che lo farà, ma ecco di cosa parlerà ... Autore: Alexey Klyushnikov, Ivanovo; Pubblicazione: cxem.net Vedi altri articoli sezione Компьютеры. Leggere e scrivere utile commenti su questo articolo. Ultime notizie di scienza e tecnologia, nuova elettronica: Un nuovo modo di controllare e manipolare i segnali ottici
05.05.2024 Tastiera Seneca Premium
05.05.2024 Inaugurato l'osservatorio astronomico più alto del mondo
04.05.2024
Altre notizie interessanti: ▪ Non ci saranno processori NVIDIA ▪ Un fegato sano viene coltivato da un donatore malato ▪ La luce solare aumenta l'attività sessuale degli uomini News feed di scienza e tecnologia, nuova elettronica
Materiali interessanti della Biblioteca Tecnica Libera: ▪ sezione del sito Chiamate e simulatori audio. Selezione dell'articolo ▪ articolo Sette piedi sotto la chiglia. Espressione popolare ▪ articolo In che modo i salari inglesi sono legati al sale? Risposta dettagliata ▪ articolo Capo dell'ufficio contabilità. Descrizione del lavoro ▪ articolo Blocco telefono parallelo. Enciclopedia dell'elettronica radio e dell'ingegneria elettrica
Lascia il tuo commento su questo articolo: Tutte le lingue di questa pagina Homepage | Biblioteca | Articoli | Mappa del sito | Recensioni del sito www.diagram.com.ua |