Fare una scala digitale

Dall'avvento dell'ingegneria radiofonica e dell'elettronica Feedback un dispositivo elettronico e una persona erano accompagnati da varie luci di segnalazione, pulsanti, interruttori a levetta, campanelli (segnale di disponibilità del microonde - ding!). Alcuni dispositivi elettronici forniscono un minimo di informazioni, perché di più sarebbero ridondanti. Ad esempio, un LED acceso sul caricabatterie del tuo telefono cinese indica che il caricabatterie è collegato alla rete e che viene fornita tensione. Ma ci sono anche parametri per i quali sarebbe più conveniente fornire informazioni oggettive. Ad esempio, la temperatura dell'aria esterna o l'ora della sveglia. Sì, tutto questo potrebbe essere fatto anche con lampadine luminose o LED. Un grado: un diodo acceso o una lampadina. Quanti gradi - tanti indicatori di combustione. Contare queste lucciole è una cosa comune, ma ancora una volta, quante di queste luci saranno necessarie per mostrare la temperatura al decimo di grado più vicino? E in generale, quale area occuperanno questi LED e lampadine su un dispositivo elettronico?

E all'inizio del ventesimo secolo, con l'avvento dei tubi elettronici, apparvero i primi indicatori di scarica di gas.

Con l'aiuto di tali indicatori, è stato possibile visualizzare informazioni digitali in numeri arabi. In precedenza, era su queste lampade che venivano fatte varie indicazioni per strumenti e altri dispositivi elettronici. Al momento, gli elementi di scarico del gas non vengono quasi mai utilizzati da nessuna parte. Ma il retrò è sempre di moda, tanti radioamatori raccolgono per sé e per i propri cari meravigliosi orologi sugli scaricatori di gas.



Svantaggi delle lampade a scarica di gas: mangiano molto. La durata è discutibile. Nella nostra università, i frequenzimetri sugli scaricatori di gas sono ancora utilizzati nelle sale di laboratorio.

Con l'avvento dei LED, la situazione è cambiata radicalmente. I LED assorbono poca corrente da soli. Se li metti dentro posizione desiderata, quindi puoi visualizzare assolutamente qualsiasi informazione. Per mettere in risalto tutti i numeri arabi bastava poco Sette (da qui il nome indicatore a sette segmenti) strisce LED luminose, esposte in un certo modo:

a quasi tutti questi indicatori a sette segmenti viene aggiunto anche un ottavo segmento, un punto, per poter mostrare il valore intero e frazionario di qualsiasi parametro

in teoria si ottiene un indicatore a otto segmenti, ma alla vecchia maniera è anche chiamato indicatore a sette segmenti, e non c'è errore in questo.

In breve, un indicatore a sette segmenti è costituito da LED disposti l'uno rispetto all'altro in un certo ordine e racchiusi in un alloggiamento.

Se consideriamo lo schema di un singolo indicatore a sette segmenti, allora assomiglia a questo:



Come possiamo vedere, un indicatore a sette segmenti può essere con anodo comune (OA), quindi con catodo comune (OK). In parole povere, se abbiamo un sette segmenti con un anodo comune (OA), allora nel circuito dobbiamo appendere un "più" su questa uscita, e se con un catodo comune (OK), allora un "meno" o terra . A quale uscita applichiamo la tensione, un tale LED si illuminerà con noi. Dimostriamo tutto questo in pratica.

Abbiamo i seguenti indicatori LED disponibili:



Come possiamo vedere, i sette segmenti possono essere a una o più cifre, ovvero due, tre, quattro sette segmenti in un unico pacchetto. Per controllare un moderno sette segmenti, ci basta un multimetro con funzione di continuità del diodo. Stiamo cercando una conclusione generale - può essere OA o OK - digitando e quindi esaminiamo già le prestazioni di tutti i segmenti dell'indicatore. Controlliamo i sette segmenti a tre cifre:



Opanki, abbiamo un segmento in fiamme, allo stesso modo controlliamo altri segmenti.

A volte la tensione sul cartone non è sufficiente per controllare i segmenti dell'indicatore. Pertanto, prendiamo l'alimentatore, lo impostiamo a 5 Volt, ci aggrappiamo a un terminale dell'alimentatore resistenza 1-2 kiloOhm e inizia a controllare i sette segmenti.



Perché abbiamo bisogno di un resistore? Quando la tensione viene applicata al LED, inizia a consumare bruscamente corrente quando è acceso. Pertanto, in questo momento può esaurirsi. Per limitare la corrente, un resistore è collegato in serie al LED. Maggiori dettagli possono essere trovati in questo articolo.

Allo stesso modo, controlliamo un sette segmenti a quattro cifre da una radio cinese



Non credo che ci dovrebbe essere un grosso problema con questo. Nei circuiti, sette segmenti si aggrappano ai resistori a ciascuna uscita. Ciò è dovuto anche al fatto che i LED, quando viene applicata loro tensione, consumano freneticamente corrente e si bruciano.

Nel nostro mondo moderno, i sette segmenti vengono già sostituiti da indicatori LCD in grado di visualizzare informazioni completamente diverse.

ma per usarli sono necessarie determinate abilità nei circuiti di tali dispositivi. Finora, non c'è niente di più semplice ed economico degli indicatori LED a sette segmenti.

Un LED (o Light Emitting Diode) è un diodo ottico che emette energia luminosa sotto forma di "fotoni" quando è polarizzato in avanti. In elettronica, chiamiamo questo processo elettroluminescenza. Il colore della luce visibile emessa dai LED va dal blu al rosso ed è determinato dall'emissione spettrale della luce, che a sua volta dipende dalle varie impurità che vengono aggiunte ai materiali semiconduttori durante la loro fabbricazione.

I LED hanno molti vantaggi rispetto alle lampade e agli apparecchi tradizionali, e forse il più importante è la loro piccola dimensione, durata, vari colori, basso costo e facile disponibilità, la capacità di interfacciarsi facilmente con vari altri componenti elettronici nei circuiti digitali.

Ma il vantaggio principale dei LED è che, a causa delle loro dimensioni ridotte, alcuni di essi possono essere concentrati in un pacchetto compatto, formando il cosiddetto indicatore a sette segmenti.

Il display a sette segmenti è composto da sette LED (da cui il nome) disposti in un rettangolo, come mostrato in figura. Ciascuno dei sette LED è chiamato segmento perché, quando è acceso, il segmento fa parte di una cifra (decimale o esadecimale). 8° aggiuntivo Diodo ad emissione luminosa. Serve a visualizzare il punto decimale (DP), permettendone così la visualizzazione nel caso in cui due o più display a 7 segmenti siano collegati tra loro per rappresentare numeri maggiori di dieci.

Ciascuno dei sette segmenti LED del display è collegato al corrispondente pad della fila di contatti, situato direttamente sulla custodia rettangolare in plastica dell'indicatore. I pin LED sono contrassegnati con etichette da a a g che rappresentano ogni singolo segmento. Gli altri contatti dei segmenti LED sono interconnessi e formano un'uscita comune.

Quindi, una polarizzazione in avanti applicata ai pin corrispondenti dei segmenti LED in un certo ordine farà illuminare alcuni segmenti e l'oscuramento degli altri, il che consente di evidenziare il carattere desiderato del modello numerico che verrà visualizzato sul Schermo. Questo ci permette di rappresentare ciascuna delle dieci cifre decimali da 0 a 9 su un display a 7 segmenti.

Il pin comune viene generalmente utilizzato per determinare il tipo di display a 7 segmenti. Ogni LED del display ha due cavi di collegamento, uno dei quali è chiamato "anodo" e l'altro, rispettivamente, è chiamato "catodo". Pertanto, un indicatore LED a sette segmenti può avere due tipi di progettazione del circuito: con un catodo comune (OK) e con un anodo comune (OA).

La differenza tra questi due tipi di display è che nel progetto OK, i catodi di tutti e 7 i segmenti sono collegati direttamente tra loro, mentre nel progetto dell'anodo comune (OA), gli anodi di tutti e 7 i segmenti sono collegati tra loro. Entrambi gli schemi funzionano come segue.

  • Catodo comune (OK) - i catodi interconnessi di tutti i segmenti LED hanno un livello logico di "0" o sono collegati a filo comune. I singoli segmenti vengono illuminati applicando un livello logico "alto" o un segnale logico "1" alla loro uscita anodica attraverso un resistore limitatore per creare una polarizzazione diretta dei singoli LED.
  • Anodo comune (OA): gli anodi di tutti i segmenti LED sono combinati e hanno un livello logico "1". I singoli segmenti dell'indicatore si accendono quando ogni particolare catodo è collegato a terra, "0" logico o un segnale a basso potenziale attraverso l'appropriato resistore di limitazione.

In generale, gli indicatori di anodo comune a sette segmenti sono più popolari, poiché molti circuiti logici potrebbero richiedere più attuale di quanto l'alimentatore possa fornire. Si noti inoltre che il display a catodo comune non sostituisce direttamente nel circuito il display ad anodo comune. E viceversa: ciò equivale ad accendere i LED nella direzione opposta e quindi non si verificherà alcuna emissione di luce.

Sebbene l'indicatore a 7 segmenti possa essere considerato come un singolo display, è comunque costituito da sette singoli LED all'interno di un singolo pacchetto e, pertanto, questi LED devono essere protetti da sovracorrente. I LED emettono luce solo quando sono polarizzati in avanti e la quantità di luce che emettono è proporzionale alla corrente diretta. Ciò significa solo che l'intensità del LED aumenta in modo approssimativamente lineare con l'aumentare della corrente. Quindi, per evitare di danneggiare il LED, questa corrente diretta deve essere controllata e limitata a un valore sicuro da un resistore di limitazione esterno.

Tali indicatori a sette segmenti sono chiamati statici. Il loro principale svantaggio è un gran numero di uscite nel pacchetto. Per eliminare questa lacuna, vengono utilizzati schemi di controllo dinamico per indicatori a sette segmenti.

L'indicatore a sette segmenti è diventato molto popolare tra i radioamatori perché è facile da usare e facile da leggere.

Autore Belov A.V.

Questo articolo illustra vari modi per collegare gli indicatori LED a sette segmenti al microcontrollore.

Affinché il dispositivo a microprocessore sia in grado di visualizzare informazioni sotto forma di numeri e caratteri, è conveniente utilizzare indicatori LED a sette segmenti. C'è una grande varietà vari modelli Indicatori LED, diverse dimensioni, colori luminosi. Ci sono sia indicatori che rappresentano una singola cifra separata, per la visualizzazione di una sola cifra, sia pannelli indicatori a più cifre. A seconda del modello e dello schema di connessione potrebbe essere diverso. Inoltre, tutti gli indicatori sono divisi in due grandi gruppi. Questi sono indicatori con un anodo comune e indicatori con un catodo comune. Lo schema di collegamento di un singolo indicatore con un anodo comune è mostrato in Figura 1.

Riso. 1. Collegamento di un indicatore

I segmenti dell'indicatore sono collegati direttamente ciascuno alla sua uscita della porta PB del microcontrollore. L'anodo comune di tutti i segmenti è collegato a una fonte di alimentazione. Lo schema mostra la possibilità di alimentare l'indicatore dalla stessa sorgente +5V da cui è alimentato il microcontrollore stesso. Per ridurre il carico sullo stabilizzatore di tensione, è possibile alimentare l'indicatore prima dello stabilizzatore. Per evidenziare questa o quella cifra sull'indicatore, il microcontrollore programma semplicemente tutti i pin della porta PB sull'uscita e quindi, se necessario, invia alla porta il codice corrispondente al carattere selezionato. In questo caso, ogni bit della porta è responsabile del proprio segmento dell'indicatore. Se nel bit corrispondente viene emessa un'unità logica, il segmento rimane disattivato. Se al bit viene emesso uno zero logico, il segmento corrispondente è acceso. Resta da selezionare i codici in modo tale che le cifre illuminate evidenzino il simbolo di cui abbiamo bisogno.

Nella maggior parte dei casi, una cifra dell'indicatore chiaramente non è sufficiente. Collegare diversi scarichi, ciascuno alle proprie conclusioni, ovviamente non funzionerà. Anche il più grande microcontrollore AVR ha solo quattro porte I/O complete. Pertanto, l'unico modo per collegare indicatori a sette segmenti a più cifre al microcontrollore è il metodo a matrice. Questo metodo è molto simile alla connessione a matrice dei pulsanti della tastiera, descritta in dettaglio nell'articolo "Collegamento dei pulsanti". La Figura 2 mostra una delle opzioni per collegare un display di due indicatori a sette segmenti.


Riso. 2. Visualizzare la connessione

Lo schema sopra è progettato per indicatori luminosi a sette segmenti di bassa potenza con un consumo di corrente non superiore a 40 mA. Per indicatori più potenti, è necessario utilizzare interruttori a transistor. Si noti che ciascuna delle uscite della porta PB del microcontrollore è collegata ai segmenti con lo stesso nome su entrambi gli indicatori. Quindi l'uscita PB0 attraverso il resistore R1 è collegata all'uscita del segmento A dell'indicatore HL1 e dell'indicatore HL2. L'uscita di PB1 attraverso il resistore R2 è collegata ai segmenti B di entrambi gli indicatori e così via. La scelta di uno degli indicatori viene effettuata tramite i due bit più significativi della porta PD. L'anodo comune dell'indicatore HL1 è collegato all'uscita PD6 e l'anodo comune dell'indicatore HL2 è collegato all'uscita PD5. Tale schema di inclusione è chiamato matrice. I pin della porta PB possono essere visualizzati come otto linee orizzontali ei due pin della porta PD come linee verticali della matrice. Nei punti di intersezione di ciascuna linea, si accende un segmento LED.

Tale schema per l'accensione dell'indicatore funziona sempre nella modalità di indicazione dinamica. L'indicazione dinamica consiste nel fatto che il microprocessore visualizza costantemente un simbolo ad una frequenza sufficientemente elevata, prima nella prima e poi nella seconda cifra dell'indicatore. A una frequenza di commutazione superiore a 24 hertz, l'occhio non nota lo sfarfallio e percepisce l'immagine su entrambi gli indicatori come un'immagine statica. La maggior parte dei display a sette segmenti in un'ampia varietà di dispositivi elettronici funziona da tempo secondo questo principio.

Per implementare la modalità di indicazione dinamica, il processore deve organizzare un ciclo costante. Di solito, per questo viene utilizzato un timer integrato. Il timer è configurato in modo tale da emettere un interrupt ad una certa frequenza selezionata per l'indicazione dinamica. Ogni volta che viene chiamato un interrupt, il controller emette un'immagine di carattere su un nuovo bit dell'indicatore. Per fare ciò, il controller imposta il codice corrispondente al carattere desiderato sulla porta PB e imposta un'unità logica sul bit corrispondente della porta PD (PD5 o PD6). Al bit da spegnere viene applicato uno zero logico. Questo completa l'elaborazione dell'interrupt, il controller procede all'esecuzione del programma principale e i segnali impostati sui pin della porta rimangono fino all'interrupt successivo. E per tutto questo tempo, il simbolo desiderato viene visualizzato nella cifra corrispondente. Quando si verifica l'interruzione successiva, i segnali vengono inviati alle porte che visualizzano l'immagine di un altro bit dell'indicatore.

La figura 2 mostra un circuito contenente solo due bit di indicazione. Allo stesso modo, puoi collegare tre, quattro o più cifre. Nel caso di utilizzo del microcontrollore ATtiny2313, il numero massimo di bit è 7. Poiché la porta PD di questo controller ha solo sette pin. In questo caso, durante il processo di segnalazione, solo uno dei bit della porta PD viene fornito con un'unità logica, e tutti gli altri sono zero logici.

Si noti che in questo circuito le uscite PD5 e PD6, alle quali sono collegati gli anodi comuni degli indicatori, sono quelle maggiormente sollecitate. La corrente che scorre attraverso ciascuno di essi dipende dal simbolo visualizzato e, nel caso in cui tutti i segmenti siano accesi contemporaneamente, otto volte più della corrente di un segmento. Tale corrente può facilmente superare la corrente massima consentita per una singola uscita. Tuttavia, in primo luogo, questa corrente è di natura pulsata e il valore medio della corrente è molto inferiore. E in secondo luogo, la pratica dimostra che i microcontrollori AVR hanno una riserva di carica significativa e possono sopportare facilmente tali carichi.

Tutto quanto sopra si applica all'indicatore con un anodo comune. Per illuminare tali indicatori, è necessario applicare un plus della fonte di alimentazione al filo comune e meno alle uscite del segmento (collegare al filo comune). Ma ci sono altri indicatori costruiti secondo lo schema con un catodo comune. Consideriamo come utilizzare questo tipo di indicatori. Il circuito in Figura 1 dovrà essere leggermente rifatto. L'alterazione si ridurrà solo al fatto che l'anodo comune dell'indicatore deve essere scollegato dalla sorgente + 5V e collegato a un filo comune. Anche l'algoritmo di lavoro cambierà leggermente. Ora, per illuminare un segmento, devi applicargli un'unità logica e spegnerlo: uno zero logico. Lo schema in fig. 2 non deve essere modificato. Solo l'algoritmo cambierà. È solo che la fase di tutti i segnali dovrebbe cambiare. Dove prima davamo zero, ora dobbiamo dare uno e viceversa.

Controllo degli indicatori ZhKI (LCD).

Autore Belov A.V.

Questo articolo discute un esempio di collegamento di un display a cristalli liquidi (LCD o LCD in breve) a un microcontrollore.

Oggi nel mercato dei componenti elettronici puoi trovare un numero enorme di indicatori di diverse aziende e modifiche. Ogni indicatore ha le proprie caratteristiche, la propria architettura interna e la propria interfaccia per il collegamento al microcontrollore. Tuttavia principi generali le connessioni sono più o meno le stesse. Notiamo subito che tutti gli LCD possono essere suddivisi in indicatori con controller integrato e indicatori semplici senza microcontrollore. Gli indicatori con un microcontrollore sono più preferibili per l'uso indipendente. Il microcontrollore integrato contiene già programmi complessi che eseguono la maggior parte delle operazioni per visualizzare un'immagine sull'indicatore e tenendo conto di tutte le caratteristiche specifiche di questo particolare pannello indicatore. E l'interfaccia di comunicazione del controller integrato di solito non è affatto complicata e ne semplifica il collegamento a qualsiasi controller universale. Prendiamo ad esempio un microcontrollore di fabbricazione russa MT-10T7-7. Questo è un semplice indicatore, il cui display è una riga di dieci caratteri a sette segmenti. La tensione di alimentazione di un tale indicatore è compresa tra 3 e 5 volt. Consumo di corrente 30 uA. Dimensioni 66 X 31,5 X 9,5 mm. Lo schema di collegamento di tale indicatore al microcontrollore è mostrato in Figura 1.

Riso. 1. Collegamento del display LCD al microcontrollore

La porta PB viene utilizzata per controllare l'indicatore. Le linee PB0...PB3 formano il bus dati/indirizzi. E la linea PB4 viene utilizzata per trasmettere un segnale di registrazione all'indicatore. L'uscita PB6 viene utilizzata per la selezione dell'indirizzo/dati. I comandi di controllo vengono trasmessi all'indicatore come segue. Per prima cosa bisogna passare l'indirizzo del bit dove vogliamo scrivere il codice del prossimo carattere di output. L'indirizzo è costituito da un numero binario a quattro bit. Le cifre sono numerate da sinistra a destra. La cifra più a sinistra (la più significativa) ha l'indirizzo 0 (00002). La cifra successiva ha l'indirizzo 1 (00012). L'ultima cifra, all'estrema destra, ha l'indirizzo 9 (10012). Per poter scrivere l'indirizzo al controller dell'indicatore è necessario che sul suo A0 sia presente un segnale di zero logico. Il valore dell'indirizzo è impostato sulle uscite PB0...PB3. E poi un singolo segnale viene brevemente applicato all'uscita PB4, che viene alimentata all'ingresso WR1 dell'indicatore. Al limite di questo impulso, l'indirizzo viene scritto sull'indicatore e memorizzato nella sua memoria interna. Ora, se un byte di dati viene scritto sull'indicatore, arriverà esattamente a questo indirizzo.

Il byte di dati determina l'immagine del carattere che verrà visualizzata nel bit corrispondente dell'indicatore. Ogni bit di questo byte è responsabile del proprio segmento in un campo a sette segmenti. L'ottavo bit è responsabile dell'evidenziazione del punto decimale. Per trasferire un byte di dati deve essere presente un segnale logico uno all'ingresso A0, e quindi all'uscita PB6. Il byte di dati viene trasferito all'indicatore in due fasi. Innanzitutto, il nibble basso viene impostato sui pin PB0...PB3. Su un segnale a WR1, viene scritto nella memoria dell'indicatore. Quindi, sulle stesse uscite (PB0...PB3), viene impostato il nibble più alto e viene scritto anche su WR1 da un segnale. Dopo aver scritto il secondo bocconcino (il più alto), l'immagine appare nella cifra corrispondente dell'indicatore e l'indirizzo nella memoria interna dell'indicatore viene automaticamente aumentato di uno. Pertanto, per scrivere dati sulla cifra successiva dell'indicatore, non è più necessario trasferirvi un indirizzo. L'intero processo di scrittura dell'indirizzo e dei dati sull'indicatore è mostrato nella Figura 2.


Riso. 2. Schema del funzionamento dell'interfaccia dell'indicatore

Questa figura mostra due opzioni per lavorare con l'indicatore. Registrare una familiarità e registrare diverse familiarità di seguito. Il resistore variabile R1 (vedi diagramma in Fig. 1) è progettato per regolare il contrasto del display. Affinché l'immagine sull'indicatore sia chiaramente visibile, è necessario impostare il contrasto più appropriato osservando l'immagine sullo schermo dell'indicatore. Per illuminazione diversa e diversi angoli di visuale, la manopola dovrà essere impostata su posizioni diverse. Un'immagine ben visibile negli altri, al variare delle condizioni di osservazione, può diventare completamente invisibile. Per vederlo, devi girare la manopola del regolatore in diverse direzioni.

In conclusione, voglio sottolineare che sono questi pin di porta per il controllo dell'indicatore che sono stati scelti in modo assolutamente arbitrario. In questo caso, l'autore è stato guidato dalla praticità del cablaggio scheda a circuito stampato. Puoi scegliere qualsiasi altro pin e persino una diversa porta I/O del microcontrollore.

Ultimo aggiornamento (05/01/2008)

Collegamento dell'encoder

Autore Belov A.V.

In questo articolo imparerai cos'è un encoder, come si differenzia da un resistore variabile e come aiuta a inserire informazioni nel microcontrollore con un semplice giro di una manopola.

In connessione con il passaggio totale al controllo a microprocessore di dispositivi elettronici domestici e di altro tipo, sono cambiati anche i corpi di regolazione utilizzati in questi dispositivi. Se prima per regolare il volume della radio o della TV dovevi semplicemente ruotare la manopola corrispondente, ora sei spesso costretto a utilizzare due pulsanti: "Volume +" e "Volume -". E se hai bisogno di regolare non solo il volume? Per molti utenti, questo semplicemente non è conveniente. Inoltre, l'efficienza dell'adeguamento ne risente. Premendo il pulsante di riduzione del volume, è comunque necessario attendere un po' finché il volume non raggiunge il livello desiderato. E per tutto questo tempo devi soffrire di un suono forte. Per unire i vantaggi dei regolatori tradizionali e allo stesso tempo non perdere le nuove opportunità che ci offrono i microcontrollori, viene chiamato un nuovo dispositivo di input delle informazioni, che si chiama encoder. Nell'aspetto e nelle dimensioni di installazione, l'encoder è molto simile a un encoder convenzionale. resistenza variabile, utilizzato nei dispositivi analogici tradizionali. Ma avanti dispositivo internoè drasticamente diverso. L'encoder, come il resistore, ha un asse sporgente sul quale si può mettere la stessa maniglia che solitamente si mette sul resistore. La rotazione della maniglia dell'encoder porta alla generazione di una sequenza di impulsi, che poi vanno al microcontrollore e gli danno informazioni su quanto ridurre o aumentare questo o quel valore. Ad esempio, quanto è necessario aumentare o diminuire il volume del segnale, ecc. Inoltre, il dispositivo encoder è tale che il microcontrollore può distinguere non solo la quantità di cui il parametro deve essere modificato, ma anche la direzione di questo cambiamento. Ciò consente, ad esempio, di ruotare l'asse dell'encoder in una direzione per aumentare il volume e di ruotarlo nell'altra direzione per diminuirlo.

Riso. 1. Come funziona l'encoder

Considera come funziona il codificatore. La Figura 1 mostra il progetto di un semplice encoder meccanico. Come si vede dalla figura, la base dell'encoder è un disco di materiale isolante, fissato sull'asse, sul quale è montata la maniglia per la sua rotazione. Le fessure speciali sono uniformemente distanziate attorno al perimetro del disco. Le fessure dividono l'intera circonferenza in più settori uguali (di solito 6-8). Inoltre, la larghezza delle fessure è uguale alla larghezza degli spazi tra di loro. Inoltre, ci sono due gruppi di contatti installati in modo tale che quando il disco ruota, si chiudono quando cadono nello slot o si aprono nello spazio tra gli slot. La posizione di queste coppie di contatti rispetto alle fessure è molto importante. I contatti sono disposti in modo tale che nel momento in cui una coppia si trova sul bordo di un'asola, la seconda coppia di contatti si trovi esattamente al centro tra due asole adiacenti. Questa disposizione è mostrata in figura. Di conseguenza, viene implementato il seguente ordine di chiusura/apertura dei contatti:

Il primo gruppo di contatti si chiude

Chiude il secondo gruppo di contatti

Si apre il primo gruppo di contatti

Si apre il secondo gruppo di contatti

5. Tutto si ripete dall'inizio.

Riso. 2. Schema encoder 3. Schema di lavoro

La figura 2 mostra l'interno schema elettrico encoder meccanico semplice. Un encoder ha solo tre pin (il che lo rende ancora più simile a un resistore variabile). L'uscita inferiore secondo lo schema è comune per entrambe le coppie di contatti. Di conseguenza, quando la maniglia dell'encoder viene ruotata, riceveremo due sequenze di impulsi in uscita. Con una rotazione uniforme in una direzione, questi saranno due meandri sfasati di 90 gradi. Per chiarezza, questo processo è mostrato nella Figura 3. Spero sia chiaro come il microcontrollore determina l'angolo di rotazione dell'asse dell'encoder. Conta semplicemente il numero di impulsi. Inoltre, è possibile contare gli impulsi provenienti da qualsiasi gruppo di contatti. L'obiettivo principale è come determinare la direzione di rotazione. È qui che aiuta la sequenza di chiusura e apertura dei contatti. Quando l'asse dell'encoder ruota su uno dei lati, ogni volta che il primo gruppo di contatti passa da chiuso ad aperto, il secondo gruppo di contatti viene chiuso. Inoltre, il momento di transizione del primo gruppo cade proprio a metà dell'intervallo di tempo in cui il secondo gruppo è chiuso. Cioè, il rimbalzo è già terminato e tutti i processi transitori si sono attenuati. Quando si ruota nella direzione opposta, l'ordine delle aperture e delle chiusure è invertito. Pertanto, nel momento in cui il primo gruppo di contatti passa da chiuso ad aperto, il secondo gruppo è sempre aperto. È per questo fatto che il microcontrollore determina il senso di rotazione.

Riso. 4. Schema di collegamento dell'encoder al microcontrollore

La Figura 4 mostra lo schema di collegamento dell'encoder al microcontrollore. I contatti dell'encoder sono collegati allo stesso modo di un semplice pulsante separato(vedi l'articolo "Collegamento dei pulsanti"). Le linee di porta PD2 e PD3 devono essere configurate come ingressi e la resistenza di terminazione interna su entrambi gli ingressi deve essere abilitata. Per ulteriori informazioni sull'impostazione delle linee di porta e dei resistori di terminazione interni, vedere l'articolo "Cablaggio dei pulsanti" sopra menzionato. L'uscita comune dell'encoder, come si può vedere dallo schema, è collegata al filo comune dell'intero dispositivo.

Il programma di elaborazione del segnale dell'encoder è estremamente semplice. Si noti che nello schema (Fig. 4) sono selezionate le linee PD2 e PD3 per il collegamento dell'encoder. E questa non è una coincidenza. Sul microcontrollore ATtiny2313, questi pin funzionano alternativamente come ingressi di interrupt esterni INT0 e INT1. Per lavorare con il codificatore, viene utilizzato uno di questi interrupt. Ad esempio, è possibile utilizzare un interrupt sull'ingresso esterno INT0. Cioè, all'ingresso PD2 (pin 6). In cosa consiste il programma? Bene, prima di tutto, devi prima abilitare l'interrupt su INT0. Inoltre, è necessario selezionare tale modalità quando l'interruzione avviene lungo il fronte (o declino) dell'impulso a questo ingresso. Bene, allora hai ancora bisogno della subroutine più semplice per elaborare questo interrupt. Questa subroutine dovrebbe semplicemente controllare il valore della linea di porta PD3 e, a seconda che sia zero o uno, ridurre o aumentare il valore regolabile.

Consideriamo questo in modo più dettagliato. Diciamo che abbiamo scelto la modalità di interruzione sul bordo dell'impulso. Immagina che il controller stia eseguendo un programma principale che non è correlato all'encoder. Ad un certo punto, l'utente ruota la manopola dell'encoder, ad esempio, verso sinistra. I contatti iniziano a chiudersi e ad aprirsi. Sul fronte dell'impulso all'ingresso INT0 nel microcontrollore, viene chiamato un interrupt. Ciò significa che il lavoro del programma principale viene temporaneamente interrotto e il controller passa alla routine di servizio di interruzione. Questa subroutine legge le informazioni dalla porta PD e valuta il contenuto del bit PD3. Poiché la maniglia dell'encoder è stata girata (abbiamo concordato) a destra, il microcontrollore rileverà un'unità logica in questo bit. Dopo aver trovato un'unità, il gestore di interrupt incrementa il valore di una cella speciale in cui è memorizzato il codice corrispondente al volume corrente. Il codice è aumentato di uno. Successivamente, la subroutine termina il suo lavoro. Il microcontrollore torna ad eseguire il suo programma principale. Se la rotazione nella stessa direzione continua, verrà nuovamente attivato un interrupt al fronte dell'impulso successivo su INT0 e il valore del volume aumenterà nuovamente di uno. E così via finché la rotazione della maniglia dell'encoder non si arresta o il valore del volume supera il limite. La subroutine dovrebbe controllare questo valore e non aumentare il volume se ha raggiunto il massimo.

Se il rotore dell'encoder viene ruotato in senso contrario, allora la stessa procedura di gestione dell'interrupt, richiamata sul fronte del segnale all'ingresso NT0, rileverà un valore logico zero all'ingresso PD3. Trovato questo zero, la subroutine dovrebbe diminuire di uno il valore del codice nella cella del volume. Se la rotazione continua, sul fronte di ogni impulso all'ingresso INT0 verrà chiamato questo interrupt e ogni volta il valore del volume diminuirà. E in questo caso, il programma dovrebbe ora controllare il valore minimo del volume. E una volta raggiunto lo zero, il programma non dovrebbe più eseguire la procedura di sottrazione.

Finora abbiamo parlato di un semplice encoder meccanico. Ma la presenza di contatti meccanici è sempre associata a fenomeni come il chatter, così come le interferenze causate da uno scarso contatto dovuto ad intasamento o usura. Tutto ciò comporta una scarsa affidabilità dell'encoder meccanico. Pertanto, gli encoder optoelettrici sono diventati sempre più popolari ultimamente. In un encoder optoelettrico, invece dei contatti meccanici, vengono utilizzati optoaccoppiatori: LED-fotodiodo. Tale codificatore richiede ulteriori Alimentazione esterna, quindi ha un altro pin: il pin di alimentazione. Questi encoder sono solitamente alimentati da una sorgente stabilizzata a +5V e in uscita segnali vicini a quelli standard. livelli logici. A questo proposito, non è necessario includere resistori di carico interni per quegli ingressi del microcontrollore a cui è collegato un tale encoder. Altrimenti, lavorare con encoder optoelettronici è simile a lavorare con semplici modelli meccanici. Sfortunatamente, l'uso di encoder optoelettronici è limitato dal loro costo elevato.

Ultimo aggiornamento (05/04/2008)

Esempi pratici Applicazioni USB-AVR

Il progetto USB-AVR ha fatto appello a molti designer dilettanti di più paesi diversi pace. La società di sviluppo Objective sul suo sito Web incoraggia tutti coloro che hanno sviluppato il proprio design utilizzando la propria tecnologia a inviare la propria descrizione o un collegamento a un sito con tale descrizione e inserisce volentieri tutti questi collegamenti sul proprio sito.

POI. che il progetto ha coinvolto rappresentanti di diversi paesi, ha portato al fatto che vengono fornite descrizioni diverse lingue differenti. Principalmente in inglese, tedesco, italiano. Sfortunatamente, non ci sono ancora progetti in russo. Tuttavia, il nostro sito prevede di tradurre le descrizioni dei progetti più interessanti.

Qualcosa per molto tempo non ci sono state recensioni sulle piccole cose di Arduino.
Oggi ho messo le mani su questi dettagli e ho deciso di "sondarli".

Coloro che hanno paura delle parole terribili dell'ingegneria radiofonica, per favore non guardare sotto il taglio. per non sprecare invano il tuo tempo prezioso.

Per le piccole imbarcazioni con controller a forma di Arduino e altri, esistono molte soluzioni per la visualizzazione delle informazioni.


È possibile installare dai LED più semplici a display complessi e pannelli touch.
Personalmente, mi sono piaciuti gli indicatori LED a sette segmenti della profondità di bit richiesta.
Sono abbastanza luminosi, possono essere visti bene a lunga distanza e sono abbastanza facili da lavorare.

Se colleghi un tale indicatore direttamente al microcontrollore, molte uscite discrete vengono sprecate. Per il collegamento di indicatori a sette segmenti e a matrice tramite 3 fili MAXIM ha sviluppato i controller MAX7219/MAX7221. Questo link sarà la mia recensione.

Devo dire subito che per chi non ama saldare, si vendono



Ho usato anche questo in, ma non mi sono piaciute le grandi dimensioni del display (soprattutto in altezza).

Gli indicatori sono arrivati ​​​​a Perm in 33 giorni. Sono stati confezionati in un semplice pacchetto morbido. Le gambe sono bloccate in un pezzo di schiuma. Russian Post li ha risparmiati:


Dimensioni 40x16. Dimensione delle cifre circa 10 mm










Numero di gambe - 12: 7 segmenti / anodi + punto-anodo + 4 catodi comuni in base al numero di scariche
Passo tra le gambe 2,54 mm

Piedinatura delle gambe dell'indicatore


I driver MAX7219 sono arrivati ​​in 35 giorni, anche in un piccolo pacchetto, appuntato alla schiuma.


Ho intenzione di acquistare +47 Aggiungi ai preferiti La recensione è piaciuta +37 +97

Su richiesta dei lavoratori, ho deciso di parlare di una cosa meravigliosa chiamata 7 segmenti indicatore LED. Per cominciare, che cos'è. Ecco una cosa del genere. Questa è una cifra, ci sono anche due cifre, tre e quattro cifre. Ho visto altre sei cifre. Ogni cifra è seguita da un punto decimale. Se ci sono quattro cifre, molto spesso dopo la seconda cifra puoi trovare i due punti per indicare i secondi, quando visualizzi l'ora. Dopo aver affrontato i pezzi di ferro, passiamo allo studio del circuito. Cos'è un display dinamico e perché è necessario. Poiché l'indicatore è a 7 segmenti, vengono utilizzati solo 7 segmenti per visualizzare il numero. Sono sempre indicati da lettere latine. A, B, C, D, E, F, G e DP Guardiamo l'immagine. Sotto ogni segmento c'è un LED. Tutti i LED sono collegati a un'estremità. O anodi o catodi, e le estremità opposte vengono messe in evidenza. È facile vedere che per visualizzare un numero devono essere utilizzati 8 pin. Uno comune e sette per i segmenti. Se questo riguarda uno scarico, allora non c'è nulla a cui pensare, appendiamo semplicemente tutto su una porta. E se ci sono quattro cifre? Otto per quattro fa trentadue. Oh ... Sì, 32 mega saranno gli unici a studiare attentamente un tale indicatore. Non è così che funzioneranno le cose. Ci sono due soluzioni. Il nostro con voi indicazione dinamica o statica. Per capire meglio, diamo un'occhiata allo schema di commutazione degli indicatori.


Questo schema implica un'indicazione dinamica. Sì, sono tutto dinamico e statico. Qual è la differenza?. L'indicazione statica è quando impostiamo ogni cifra sulla propria cifra ed è costantemente attiva, e dinamica è quando visualizziamo la cifra nella prima cifra, quindi la spegniamo e la trasmettiamo alla seconda cifra, quindi la spegniamo e la visualizziamo nella terza cifra, e così via fino ad esaurimento dei ranghi. Dopo l'ultima scarica, torniamo alla prima e così via in cerchio. Se questo viene fatto lentamente, sarà possibile vedere una linea di corsa digitale e se aumenti la velocità, ad esempio, a 50 Hz, non vedrai il battito delle palpebre. Ecco come funziona la visualizzazione dinamica. Diamo ora un'occhiata al diagramma. A sinistra dell'ATmega8 MK, dietro di esso, il chip 74ALS373 è appeso alla porta D. Perché è necessaria? Il fatto è che l'indicatore è solo 8 LED assemblati in una certa matrice. Cioè, l'indicatore può essere rappresentato come una linea di 8 LED. E come sai, i LED mangiano molto rispetto a MK. Certo, non è vietato connettersi direttamente, ma è meglio mettere una sorta di ripetitore tra l'MK e l'indicatore. Per questi scopi, ho deciso di utilizzare un latch buffer a 8 bit. Perché lui. Tenendo conto del fatto che utilizzo l'indicatore con un anodo comune, ovvero per l'attività digit, il livello attivo è 0, quindi si potrebbe tranquillamente utilizzare il chip ULN2003A (7 gruppi di transistor secondo il circuito Darlington) e non preoccuparsi con il buffer, ma ... Ma il fatto è che a bordo ha solo ULN2003A Transistor NPN e posso usare l'indicatore solo con anodo comune, ma se devo metterlo con catodo comune? È qui che il buffer aiuterà, poiché quello che scrivo sarà l'output. Vuoi 0, vuoi 1. Le gambe di controllo sono collegate in modalità traduttore. Cioè, il buffer emette lo stesso output dell'input. Ala isolamento pseudo galvanico. Il buffer è seguito da resistori di limitazione della corrente. Ricorda, questi sono LED e si bruceranno senza resistori. Il valore dei resistori deve essere selezionato leggermente inferiore a quello accettabile. Il fatto è che l'indicazione dinamica mostra caratteri con una certa frequenza ed è correlata al PWM, cioè maggiore è la frequenza, maggiore è il contrasto, per così dire. E con il contrasto più confortevole, i numeri brilleranno un po' meno. Pertanto, i resistori devono essere presi un valore leggermente inferiore. Ho usato 360 ohm solo perché li avevo in magazzino. Subito dopo i resistori c'è il nostro indicatore. D'altra parte, dove sono gli anodi, ho collegato i primi quattro bit della porta C. Quindi, abbiamo in qualche modo capito il circuito. Ora discutiamo l'algoritmo del programma. Per attivare a turno le cifre dell'indicatore, scriveremo una funzione separata e la chiameremo all'infinito nel corpo principale del programma. Più specificamente, la funzione prenderà un numero compreso tra 0 e 9999, lo analizzerà in cifre e quindi produrrà ogni cifra al suo posto. Se il numero ha meno di 4 cifre, gli spazi vuoti a sinistra saranno riempiti con zeri. Ci allineiamo sul bordo destro. Percorreremo i ranghi da sinistra a destra. Per vedere eventuali azioni, quindi utilizzando gli interrupt dal contatore, una volta al secondo aumenteremo di uno il numero visualizzato. Quindi il compito è fissato, combattere. #define F_CPU 7372800UL // Frequenza al quarzo #includere #includere #includere volatile unsigned int test = 9980; // Variabile per l'output sull'indicatore PVR(TIMER1_COMPA_vetto) // Gestore di interruzioni alla corrispondenza del timer 1 (prova++; // Aumenta il numero di output if(test > 9999) test = 0; // Se su quattro cifre, reimposta TCNT1H=0x00; // Reimposta il registro TCNT1L=0x00; // account ) void dig_out(int num); // Dichiarazione di una funzione per la visualizzazione di un indicatore int main(void) ( DDRC = 0x0F; // Imposta le porte DDR=0xFF; // per lavorare con l'indicatore Porta C per cifre, Porta D per numeri TCCR1A=0x00; // Impostazione del timer TCCR1B=0x04; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x70; OCR1AL=0x80; TIMSK=0x10; sei(); // Abilita gli interrupt while(1) ( dig_out(prova); //Chiama costantemente la funzione per visualizzare il numero corrente ) ) void dig_out(int num) // Funzione a cui inviare l'output indicatore 4 scarichi ( carattere senza segno i = 0; // contatore variabile charraz senza segno = 1; // Digita il numero unsigned char dig_num = (0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10); // Codici numerici per l'indicatore con un anodo comune char senza segno dig = (0, 0, 0, 0); // Array per il valore del bit se (num ( dig =0; dig =0; dig =0; ) if(num // Per riempire le cifre a sinistra con zeri ( dig =0; dig =0; ) if(num // Per riempire le cifre a sinistra con zeri ( dig =0; ) while(num > 999) // Ottieni il numero di migliaia ( dig++; num -= 1000; ) while(num > 99) // Ottieni il numero di centinaia ( dig++; num -= 100; ) while(num > 9) // Ottieni il numero di decine ( dig++; num -= 10; ) dig = num; // Ottieni il numero di unità mentre (raz // Gira fino a riempire tutti e 4 i bit (PORTC=raz; // Seleziona un po' PORTD = dig_num]; // Produce un numero raz = raz// Passa alla cifra successiva io++; // Incrementa l'indice della cifra successiva _ritardo_ms(1); // Ritardo 1 ms } } Questo è tutto il codice. Non lo dipingerò perché ha commenti su ogni riga. Di seguito puoi scaricare l'archivio con il progetto sotto AtmelStudio6.2 Se hai ancora domande, sei il benvenuto nel forum. Ebbene, per i più esigenti, di seguito è riportato il video di tutta questa balalaika))).