Realizarea unui cantar digital

De la apariția ingineriei radio și a electronicii feedback dispozitivul electronic și persoana a fost însoțită de diverse lumini de semnalizare, butoane, întrerupătoare, clopote (semnal gata cu microunde - ding!). Unele dispozitive electronice oferă un minim de informații, pentru că mai multe ar fi inutil. De exemplu, un LED strălucitor în dvs Încărcare chineză pentru un telefon, înseamnă că încărcătorul este conectat și primește alimentare. Există însă și parametri pentru care ar fi mai convenabil să se furnizeze informații obiective. De exemplu, temperatura aerului de afară sau ora de pe ceasul cu alarmă. Da, toate acestea s-ar putea face și cu becuri luminoase sau LED-uri. Un grad - o diodă aprinsă sau un bec. Câte grade sunt, atât de mulți indicatori sunt aprinși. Numărarea acestor licurici poate fi un lucru obișnuit, dar din nou, de câte dintre aceste lumini vor fi necesare pentru a afișa temperatura cu o precizie de o zecime de grad? Și în general, ce zonă vor ocupa aceste LED-uri și becuri pe un dispozitiv electronic?

Iar la începutul secolului al XX-lea, odată cu apariția tuburilor electronice, au apărut primii indicatori de descărcare în gaz.

Cu ajutorul unor astfel de indicatori a fost posibilă afișarea informațiilor digitale în cifre arabe. Anterior, pe aceste lămpi se făceau diverse indicații pentru dispozitive și altele dispozitive electronice. În prezent, elementele de descărcare în gaz nu sunt aproape niciodată folosite nicăieri. Dar retro este întotdeauna la modă, motiv pentru care mulți radioamatori adună ceasuri minunate cu descărcare în gaz pentru ei și cei dragi.



Dezavantajele lămpilor cu descărcare în gaz - mănâncă mult. Se poate discuta despre durabilitate. La universitatea noastră, folosim în continuare frecvențemetre pe descărcătoarele de gaz din birourile noastre de laborator.

Odată cu apariția LED-urilor, situația s-a schimbat dramatic. LED-urile în sine consumă o cantitate mică de curent. Dacă le aranjați în pozitia dorita, atunci puteți afișa absolut orice informație. Pentru a evidenția toate cifrele arabe, a fost suficient doar ceva Șapte (de aici și numele indicator cu șapte segmente) benzi LED strălucitoare dispuse într-un anumit fel:

Aproape toți astfel de indicatori cu șapte segmente adaugă și un al optulea segment - un punct, astfel încât este posibil să se arate valoarea întreagă și fracțională a oricărui parametru

În teorie, se dovedește a fi un indicator cu opt segmente, dar în mod vechi se mai numește și indicator cu șapte segmente și nu există nicio greșeală în asta.

Pe scurt, un indicator cu șapte segmente sunt LED-uri situate unul față de celălalt într-o anumită ordine și închise într-o singură carcasă.

Dacă luăm în considerare diagrama unui singur indicator cu șapte segmente, arată astfel:



După cum vedem, indicatorul cu șapte segmente poate fi fie cu anod comun (CA), asa cu catod comun (OC). Aproximativ vorbind, dacă avem șapte segmente cu un anod comun (OA), atunci în circuit ar trebui să atârnăm un „plus” pe acest pin, iar dacă avem un catod comun (OC), atunci un „minus” sau masă. . Cărui pin îi aplicăm tensiune, acest LED se va aprinde. Să demonstrăm toate acestea în practică.

Avem in stoc urmatoarele indicatoare LED:



După cum vedem, dispozitivele cu șapte segmente pot fi unic și multi-biți, adică două, trei, patru dispozitive cu șapte segmente într-un singur caz. Pentru a verifica un dispozitiv modern cu șapte segmente, avem nevoie doar de un multimetru cu funcție de testare a diodelor. Căutăm o concluzie generală - poate fi fie OA, fie OK - la întâmplare și apoi ne uităm la performanța tuturor segmentelor indicatorului. Verificăm segmentul pe trei biți și șapte:



Hopa, un segment a luat foc, așa că verificăm celelalte segmente în același mod.

Uneori, tensiunea de pe desene animate nu este suficientă pentru a verifica segmentele indicatoare. Prin urmare, luăm sursa de alimentare, o setăm la 5 volți, o conectăm la un terminal al sursei de alimentare rezistența 1-2 kiloOhm și începeți să verificați unitatea cu șapte segmente.



De ce avem nevoie de un rezistor? Când se aplică tensiune la LED, acesta începe să consume intens curent atunci când este pornit. Prin urmare, în acest moment se poate arde. Pentru a limita curentul, un rezistor este conectat în serie cu LED-ul. Puteți citi mai multe în acest articol.

În același mod, verificăm segmentul de patru cifre și șapte de la un radio chinezesc



Cred că nu ar trebui să existe dificultăți deosebite cu asta. În circuite, circuitele cu șapte segmente sunt conectate la rezistențe la fiecare pin. Acest lucru se datorează și faptului că LED-urile, atunci când li se aplică tensiune, consumă frenetic curent și se ard.

În nostru lumea modernă Dispozitivele cu șapte segmente sunt deja înlocuite cu indicatoare LCD care pot afișa informații complet diferite

dar pentru a le folosi, aveți nevoie de anumite abilități în proiectarea circuitelor unor astfel de dispozitive. Până acum, nu există nimic mai simplu sau mai ieftin decât indicatoarele LED cu șapte segmente.

Un LED (sau dioda emițătoare de lumină) este o diodă optică care emite energie luminoasă sub formă de „fotoni” atunci când este polarizat direct. În electronică numim acest proces electroluminiscență. Culoarea luminii vizibile emise de LED-uri variază de la albastru la roșu și este determinată de spectrul spectral al luminii emise, care, la rândul său, depinde de diferitele impurități care sunt adăugate materialelor semiconductoare în timpul procesului lor de fabricație.

LED-urile au multe avantaje față de lămpile și corpurile de iluminat tradiționale, și poate cel mai important dintre ele este lor dimensiuni mici, durabilitate, culori diverse, cost redus și disponibilitate ușoară, capacitatea de a interfața ușor cu diverse alte componente electronice din circuitele digitale.

Dar principalul avantaj al LED-urilor este că, datorită dimensiunilor lor mici, unele dintre ele pot fi concentrate într-o singură carcasă compactă, formând un așa-numit indicator cu șapte segmente.

Indicatorul cu șapte segmente este format din șapte LED-uri (de unde și numele), dispuse într-un dreptunghi, așa cum se arată în figură. Fiecare dintre cele șapte LED-uri se numește segment deoarece atunci când este aprins, segmentul face parte dintr-o cifră (zecimală sau de 12 cifre) Uneori, în cadrul aceluiași pachet este utilizat Al 8-lea suplimentar LED. Acesta servește la afișarea punctului zecimal (DP), permițând astfel afișarea acestuia dacă doi sau mai mulți indicatori cu 7 segmente sunt conectați împreună pentru a reprezenta numere mai mari de zece.

Fiecare dintre cele șapte segmente de afișaj cu LED-uri este conectat la un pad corespunzător al unui rând de contacte situat direct pe carcasa dreptunghiulară din plastic a indicatorului. Pinii LED sunt etichetați de la a la g, reprezentând fiecare segment individual. Alte contacte ale segmentelor LED sunt interconectate și formează o ieșire comună.

Deci, polarizarea directă aplicată pinilor corespunzători ai segmentelor LED într-o anumită ordine va face ca unele segmente să se aprindă în timp ce restul rămân întunecate, permițând ca simbolul dorit al modelului numeric să fie iluminat să fie afișat pe afișaj. Acest lucru ne permite să reprezentăm fiecare dintre cele zece cifre zecimale de la 0 la 9 pe un afișaj cu 7 segmente.

Pinul comun este de obicei folosit pentru a determina tipul de afișaj cu 7 segmente. Fiecare LED de afișare are două terminale de conectare, dintre care unul se numește „anod”, iar celălalt, în consecință, se numește „catod”. Prin urmare, un indicator LED cu șapte segmente poate avea două tipuri de design de circuit - cu un catod comun (OC) și cu un anod comun (OA).

Diferența dintre aceste două tipuri de afișaje este că, în designul OK, catozii tuturor celor 7 segmente sunt conectați direct unul la altul, iar în proiectarea anodului comun (CA), anozii tuturor celor 7 segmente sunt conectați unul la altul. Ambele scheme funcționează după cum urmează.

  • Catod comun (OC) - catozii interconectați ai tuturor segmentelor LED au un nivel logic „0” sau sunt conectați la fir comun. Segmentele individuale sunt iluminate prin aplicarea unui semnal logic înalt sau logic 1 la pinul lor anod printr-un rezistor de limitare pentru a polariza LED-urile individuale.
  • Anod comun (CA) - anozii tuturor segmentelor LED sunt combinați și au un nivel logic de „1”. Segmente individuale ale indicatorului luminos atunci când fiecare catod specific este conectat la masă, „0” logic sau un semnal cu potențial scăzut prin rezistența de limitare corespunzătoare.

În general, indicatorii anodici comuni cu șapte segmente sunt mai populari, deoarece multe circuite logice pot necesita mai actuale, decât este capabilă să furnizeze sursa de alimentare. De asemenea, rețineți că un afișaj cu catod comun nu este o înlocuire directă într-un circuit pentru un afișaj cu anod comun. Și invers - aceasta este echivalentă cu aprinderea LED-urilor în direcția opusă și, prin urmare, nu va fi emisă nicio lumină.

Deși un contor cu 7 segmente poate fi gândit ca un singur afișaj, acesta constă în continuare din șapte LED-uri individuale într-un singur pachet și, ca atare, aceste LED-uri necesită protecție la supracurent. LED-urile emit lumină numai atunci când sunt polarizate direct, iar cantitatea de lumină pe care o emit este proporțională cu curentul direct. Aceasta înseamnă doar că intensitatea LED-ului crește aproximativ liniar odată cu creșterea curentului. Deci, pentru a evita deteriorarea LED-ului, acest curent direct trebuie monitorizat și limitat la o valoare sigură de un rezistor de limitare extern.

Astfel de indicatori cu șapte segmente sunt numiți statici. Dezavantajul lor semnificativ este număr mare ace din pachet. Pentru a elimina acest dezavantaj, se folosesc scheme de control dinamic pentru indicatorii cu șapte segmente.

Indicatorul cu șapte segmente a câștigat o mare popularitate în rândul amatorilor de radio, deoarece este convenabil de utilizat și ușor de înțeles.

Autorul Belov A.V.

Acest articol discută diverse moduri conectarea indicatoarelor LED cu șapte segmente la microcontroler.

Pentru ca un dispozitiv cu microprocesor să poată afișa informații sub formă de numere și simboluri, este convenabil să folosiți indicatori LED cu șapte segmente. Există o mare varietate diverse modele Indicatoare LED, diferite dimensiuni, culori strălucitoare. Există ambii indicatori care sunt o singură cifră separată, pentru afișarea unei singure cifre, și panouri cu mai multe cifre. În funcție de model, schema de conectare poate fi diferită. În plus, toți indicatorii sunt împărțiți în două grupuri mari. Acestea sunt indicatoare cu un anod comun și indicatoare cu un catod comun. Schema de conectare pentru un singur indicator cu un anod comun este prezentată în Figura 1.

Orez. 1. Conectarea unui indicator

Segmentele indicator sunt fiecare conectate direct la propria sa ieșire a portului PB al microcontrolerului. Anodul comun al tuturor segmentelor este conectat la sursa de alimentare. Diagrama prezintă opțiunea de alimentare a indicatorului de la aceeași sursă de +5V de la care este alimentat microcontrolerul în sine. Pentru a reduce sarcina stabilizatorului de tensiune, puteți alimenta indicatorul înaintea stabilizatorului. Pentru a evidenția o anumită cifră pe indicator, microcontrolerul pur și simplu programează toți pinii portului PB la ieșire și apoi, după caz, scoate codul corespunzător simbolului selectat către port. În acest caz, fiecare bit al portului este responsabil pentru propriul său segment indicator. Dacă unul logic este scos la bitul corespunzător, atunci segmentul rămâne stins. Dacă un zero logic este scos la bit, atunci segmentul corespunzător se aprinde. Rămâne să selectăm codurile în așa fel încât cifrele iluminate să evidențieze simbolul de care avem nevoie.

În majoritatea cazurilor, o cifră a indicatorului nu este în mod clar suficientă. Conectarea mai multor descărcări, fiecare la propriile terminale, evident nu va funcționa. Chiar și cel mai mare microcontroler AVR are doar patru porturi I/O complete. Prin urmare, singura modalitate de a conecta indicatorii cu mai multe cifre și șapte segmente la un microcontroler este metoda matricei. Această metodă este foarte asemănătoare cu conexiunea matriceală a butoanelor de la tastatură, care este descrisă în detaliu în articolul „Conectarea butoanelor”. Figura 2 prezintă una dintre opțiunile pentru conectarea unui afișaj cu două indicatoare cu șapte segmente.


Orez. 2. Afișare conexiune

Circuitul de mai sus este proiectat pentru indicatoare luminoase cu șapte segmente de putere scăzută, cu un consum de curent de cel mult 40 mA. Pentru mai mult indicatori puternici trebuie să folosiți comutatoare cu tranzistori. Vă rugăm să rețineți că fiecare dintre ieșirile portului PB al microcontrolerului este conectată la aceleași segmente ale ambilor indicatori. Deci, pinul PB0 este conectat prin rezistorul R1 la pinul segmentului A al indicatorului HL1 și al indicatorului HL2. Ieșirea lui PB1 este conectată prin rezistorul R2 la segmentele B ale ambilor indicatori și așa mai departe. Selectarea unuia dintre indicatori se realizează folosind cele mai semnificative două cifre ale portului PD. Anodul comun al indicatorului HL1 este conectat la pinul PD6, iar anodul comun al indicatorului HL2 este conectat la pinul PD5. Această schemă de comutare se numește matrice. Pinii portului PB pot fi considerați opt linii orizontale, iar cele două ieșiri ale portului PD sunt ca linii verticale ale matricei. În punctele de intersecție ale fiecărei linii, un segment LED este aprins.

Acest circuit de comutare a indicatorului funcționează întotdeauna în modul de indicare dinamică. Indicația dinamică constă în faptul că microprocesorul aprinde constant un simbol la o frecvență destul de mare, mai întâi în prima și apoi în a doua cifră a indicatorului. La frecvențele de comutare peste 24 de herți, ochiul nu observă pâlpâirea și percepe imaginea de pe ambii indicatori ca o singură imagine statică. Cele mai multe afișaje cu șapte segmente dintr-o mare varietate de dispozitive electronice funcționează pe acest principiu de mult timp.

Pentru a implementa modul de indicare dinamică, procesorul trebuie să organizeze o buclă constantă. De obicei, pentru aceasta se folosește un temporizator încorporat. Cronometrul este configurat astfel încât să emită o întrerupere la o anumită frecvență selectată pentru indicarea dinamică. De fiecare dată când este apelată o întrerupere, controlerul transmite o imagine simbol către o nouă cifră a indicatorului. Pentru a face acest lucru, controlerul setează codul corespunzător simbolului dorit la portul PB și setează unul logic la bitul corespunzător al portului PD (PD5 sau PD6). Un zero logic este aplicat bitului care trebuie stins. În acest moment, procesarea întreruperilor se termină, controlerul continuă să execute programul principal, iar semnalele expuse la pinii portului rămân până la următoarea întrerupere. Și în tot acest timp, simbolul necesar este afișat în cifra corespunzătoare. Când apare următoarea întrerupere, semnalele sunt transmise către porturi, care afișează o imagine a unei alte cifre a indicatorului.

Figura 2 prezintă o diagramă care conține doar două cifre de indicație. În același mod, puteți conecta trei, patru sau mai multe cifre. În cazul utilizării microcontrolerului ATtiny2313, numărul maxim de biți este de 7. Deoarece portul PD al acestui controler are doar șapte pini. În acest caz, în timpul procesului de indicare, doar unul dintre biții portului PD este alimentat cu unul logic, iar toți ceilalți sunt alimentați cu un zero logic.

Trebuie remarcat faptul că în acest circuit, bornele PD5 și PD6, la care sunt conectați anozii comuni ai indicatoarelor, se află sub cea mai mare sarcină. Curentul care curge prin fiecare dintre ele depinde de simbolul afișat și în cazul în care toate segmentele se aprind simultan, este de opt ori mai mare decât curentul unui segment. Acest curent poate depăși cu ușurință curentul maxim admisibil pentru o singură ieșire. Cu toate acestea, în primul rând, acest curent este pulsat în natură, iar valoarea medie a curentului este mult mai mică. Și în al doilea rând, practica arată asta Microcontrolere AVR au o rezervă de putere semnificativă și pot rezista cu ușurință la astfel de sarcini.

Toate cele de mai sus se aplică unui indicator cu un anod comun. Pentru a aprinde astfel de indicatoare, pozitivul sursei de alimentare trebuie aplicat firului comun, iar negativul trebuie aplicat la bornele segmentului (conectate la firul comun). Dar există și alți indicatori construiti conform unui circuit cu un catod comun. Să vedem cum să folosim acest tip de indicatori. Diagrama din fig. 1 va trebui refăcută puțin. Modificarea se va reduce doar la faptul că anodul comun al indicatorului trebuie deconectat de la sursa de +5V și conectat la firul comun. Algoritmul se va schimba, de asemenea, ușor. Acum, pentru a ilumina un segment, trebuie să-i aplicați unul logic, iar pentru a-l stinge, trebuie să aplicați un zero logic. Schema din fig. 2 nu trebuie refăcut. Doar algoritmul se va schimba. Doar că faza tuturor semnalelor trebuie să se schimbe. Acolo unde înainte dădeam zero, acum trebuie să dăm unul și invers.

Controlul indicatoarelor LCD

Autorul Belov A.V.

Acest articol discută un exemplu de conectare a unui afișaj cu cristale lichide (abreviat LCD sau LCD) la un microcontroler.

Pe piață astăzi componente electronice Puteți găsi un număr mare de indicatori de la diferite companii și modificări. Fiecare indicator are propriile caracteristici, propria arhitectură internă și propria interfață pentru conectarea la un microcontroler. Cu toate acestea principii generale conexiunile sunt aproximativ aceleași. Să observăm imediat că toate LCD-urile pot fi împărțite în indicatori cu un controler încorporat și indicatori simpli fara microcontroler. Indicatorii cu microcontroler sunt mai de preferat pentru autoutilizare. Microcontrolerul încorporat conține deja programe complexe care efectuează cele mai multe operațiuni pentru a afișa o imagine pe indicator și iau în considerare toate caracteristicile specifice ale acestui panou indicator. Iar interfața de comunicare a controlerului încorporat nu este, de obicei, deloc complicată și facilitează conectarea acestuia la orice controler universal. Să luăm, de exemplu, un microcontroler de fabricație rusă MT-10T7-7. Acesta este un indicator simplu, a cărui afișare este o linie de zece simboluri cu șapte segmente. Tensiunea de alimentare a unui astfel de indicator este de la 3 la 5 volți. Consumul de curent este de 30 µA. Dimensiuni 66 X 31,5 X 9,5 mm. Schema de conectare a unui astfel de indicator la microcontroler este prezentată în Figura 1.

Orez. 1. Conectarea LCD-ului la microcontroler

Portul PB este folosit pentru a controla indicatorul. Liniile PB0...PB3 formează magistrala de date/adresă. Și linia PB4 este folosită pentru a transmite un semnal de înregistrare către indicator. Ieșirea PB6 este utilizată pentru selectarea adresei/datelor. Comenzile de control sunt transmise indicatorului după cum urmează. Mai întâi trebuie să transmitem adresa bitului în care dorim să scriem codul următorului simbol care urmează să fie scos. O adresă constă dintr-un singur număr binar de patru biți. Cifrele sunt numerotate de la stânga la dreapta. Bitul din stânga (cel mai semnificativ) are adresa 0 (00002). Următorul bit are adresa 1 (00012). Ultima, cea mai dreaptă, a zecea cifră are adresa 9 (10012). Pentru a scrie o adresă la controlerul indicatorului, este necesar ca un semnal logic zero să fie prezent la A0 al acestuia. Valoarea adresei este setată la ieșirile PB0...PB3. Și apoi un singur semnal este furnizat pentru scurt timp la ieșirea PB4, care este furnizat la intrarea WR1 a indicatorului. La marginea acestui impuls, adresa este scrisă în indicator și stocată în memoria sa internă. Acum, dacă un octet de date este scris în indicator, acesta va merge exact la această adresă.

Octetul de date determină imaginea caracterului care va fi afișată în cifra corespunzătoare a indicatorului. Fiecare bit al acestui octet este responsabil pentru propriul său segment în câmpul cu șapte segmente. Al optulea bit este responsabil pentru evidențierea punctului zecimal. Pentru a transmite un octet de date, un semnal logic trebuie să fie prezent la intrarea A0 și, prin urmare, la ieșirea PB6. Un octet de date este transmis indicatorului în doi pași. În primul rând, ciugulirea cea mai puțin semnificativă este setată la pinii PB0...PB3. Pe baza semnalului de la WR1, acesta este înregistrat în memoria indicatorului. Apoi, la aceleași ieșiri (PB0...PB3), cel mai semnificativ nibble este setat și, de asemenea, scris la WR1 de către semnal. După scrierea celui de-al doilea (cel mai semnificativ) nibble, imaginea apare în bitul corespunzător al indicatorului, iar adresa din memoria internă a indicatorului crește automat cu unu. Astfel, pentru a scrie date în următorul bit al indicatorului, nu mai trebuie să transferați adresa acestuia. Întregul proces de scriere a adresei și a datelor în indicator este prezentat în Figura 2.


Orez. 2. Diagrama de funcționare a interfeței indicatorului

Această figură prezintă două opțiuni pentru lucrul cu indicatorul. Înregistrați o familiaritate și înregistrați mai multe familiarități la rând. Rezistorul variabil R1 (vezi diagrama din Fig. 1) este proiectat pentru a regla contrastul afișajului. Pentru ca imaginea de pe indicator să fie clar vizibilă, trebuie să setați cel mai potrivit contrast în timp ce observați imaginea de pe ecranul indicatorului. Pentru iluminare diferită și unghiuri de vizualizare diferite, butonul de reglare va trebui setat în poziții diferite. O imagine clar vizibilă în alții poate deveni complet invizibilă în condițiile de vizualizare modificate. Pentru a-l vedea, trebuie să rotiți butonul de reglare în direcții diferite.

În concluzie, aș dori să notez că acești pini de porturi special pentru controlul indicatorului au fost aleși absolut arbitrar. În acest caz, autorul a fost ghidat de comoditatea cablajului placa de circuit imprimat. Puteți alege orice alți pini și chiar un alt port de intrare/ieșire al microcontrolerului.

Ultima actualizare (05/01/2008)

Conexiune codificator

Autorul Belov A.V.

În acest articol, veți afla ce este un encoder, cum diferă de un rezistor variabil și cum vă ajută să introduceți informații într-un microcontroler prin simpla rotire a unui buton.

În legătură cu trecerea totală la controlul cu microprocesor al dispozitivelor de uz casnic și al altor dispozitive electronice, s-au schimbat și elementele de control utilizate în aceste dispozitive. Dacă mai devreme, pentru a regla volumul unui radio sau televizor, trebuia pur și simplu să rotiți butonul corespunzător, acum sunteți adesea forțat să utilizați două butoane: „Volum +” și „Volum -”. Ce se întâmplă dacă trebuie să reglați mai mult decât volumul? Pentru mulți utilizatori acest lucru pur și simplu nu este convenabil. În plus, eficiența ajustării are de suferit. Apăsând butonul de reducere a volumului, mai trebuie să așteptați un timp până când volumul ajunge la nivelul dorit. Și în tot acest timp trebuie să suferi de sunet puternic. Pentru a combina avantajele regulatoarelor tradiționale și, în același timp, pentru a nu pierde noile oportunități pe care ni le oferă microcontrolerele, este proiectat un nou dispozitiv de introducere a informațiilor numit encoder. De aspectși dimensiunile de instalare, encoderul este foarte asemănător cu unul obișnuit rezistor variabil, care a fost folosit în dispozitivele analogice tradiționale. Dar conform structura internă este radical diferit. Codificatorul, la fel ca și rezistența, are o axă proeminentă, pe care puteți pune același mâner care se pune de obicei pe rezistor. Rotirea mânerului codificatorului face ca acesta să genereze o secvență de impulsuri, care sunt apoi trimise la microcontroler și îi oferă informații despre cât de mult să scadă sau să crească o anumită valoare. De exemplu, cât de mult ar trebui să crești sau să scazi volumul semnalului etc. Mai mult, designul codificatorului este astfel încât microcontrolerul poate distinge nu numai cantitatea cu care trebuie schimbat parametrul, ci și direcția acestei modificări. Acest lucru permite, de exemplu, la rotirea axei codificatorului într-o direcție, creșterea volumului, iar la rotirea în cealaltă, reducerea acestuia.

Orez. 1. Principiul de funcționare al codificatorului

Să vedem cum funcționează codificatorul. Figura 1 prezintă proiectarea unui codificator mecanic simplu. După cum se poate observa din figură, baza codificatorului este un disc din material izolator montat pe o axă, pe care este montat mânerul pentru a-l roti. Fantele speciale sunt distanțate uniform în jurul perimetrului discului. Sloturile împart întregul cerc în mai multe (de obicei 6-8) sectoare egale. Mai mult, lățimea fantelor este egală cu lățimea spațiilor dintre ele. În plus, există două grupuri de contacte care sunt instalate în așa fel încât atunci când discul se rotește, fie se închid când cad în slot, fie se deschid în spațiul dintre sloturi. Locația acestor perechi de contacte în raport cu sloturile este foarte importantă. Contactele sunt amplasate în așa fel încât în ​​momentul în care o pereche se află pe marginea unui slot, a doua pereche de contacte se află exact la mijloc între două sloturi adiacente. Acesta este exact aranjamentul prezentat în figură. Ca urmare, este implementată următoarea ordine de închidere/deschidere a contactelor:

Primul grup de contacte se închide

Al doilea grup de contacte se închide

Se deschide primul grup de contacte

Se deschide al doilea grup de contacte

5. Totul se repetă de la început.

Orez. 2. Circuitul codificatorului Fig. 3. Schema de funcționare

Figura 2 prezintă interiorul schema electrica un simplu encoder mecanic. Codificatorul are doar trei pini (ceea ce îl face și mai asemănător cu un rezistor variabil). Pinul de jos din diagramă este comun ambelor perechi de contacte. Ca rezultat, atunci când rotim mânerul codificatorului, vom primi două secvențe de impulsuri la ieșire. Cu rotație uniformă într-o direcție, acestea vor fi două meandre, defazate cu 90 de grade. Pentru claritate, acest proces este prezentat în Figura 3. Sper că este clar modul în care microcontrolerul determină unghiul de rotație al axei codificatorului. Pur și simplu numără numărul de impulsuri. Mai mult, este posibil să numărați impulsurile care provin de la oricare dintre grupurile de contacte. Accentul principal este modul de a determina direcțiile de rotație. Aici ajută succesiunea de închidere și deschidere a contactelor. Când axa codificatorului se rotește într-o parte, de fiecare dată când primul grup de contacte trece de la o stare închisă la una deschisă, al doilea grup de contacte devine închis. Mai mult, momentul tranziției primului grup are loc tocmai la mijlocul perioadei de timp în care al doilea grup este închis. Adică, discuția s-a încheiat deja și toate procesele trecătoare s-au diminuat. La rotirea în cealaltă direcție, ordinea deschiderii și închiderii este inversată. Prin urmare, în momentul în care primul grup de contacte trece de la o stare închisă la o stare deschisă, al doilea grup este întotdeauna deschis. Prin acest fapt, microcontrolerul determină direcția de rotație.

Orez. 4. Schema de conectare a encoderului la microcontroler

Figura 4 prezintă o diagramă de conectare a codificatorului la microcontroler. Contactele codificatorului sunt conectate în același mod ca un simplu buton separat(vezi articolul „Butoanele de conectare”). Liniile de porturi PD2 și PD3 trebuie configurate ca intrări, iar rezistența internă de tragere de pe ambele intrări trebuie să fie activată. Pentru mai multe informații despre configurarea liniilor de porturi și a rezistențelor interne de sarcină, consultați articolul „Butoane de conectare” menționat mai sus. Ieșirea comună a codificatorului, așa cum se poate vedea din diagramă, este conectată la firul comun al întregului dispozitiv.

Programul de procesare a semnalului de la encoder este extrem de simplu. Vă rugăm să rețineți că în diagramă (Fig. 4) liniile PD2 și PD3 sunt selectate pentru conectarea encoderului. Și asta nu este o coincidență. În microcontrolerul ATtiny2313, o funcție alternativă a acestor pini este funcția intrărilor externe de întrerupere INT0 și INT1. Pentru a lucra cu codificatorul, se folosește una dintre aceste întreruperi. De exemplu, puteți utiliza o întrerupere pe intrarea externă INT0. Adică la intrarea PD2 (pin 6). În ce constă programul? Ei bine, în primul rând, trebuie mai întâi să activați întreruperea INT0. Mai mult, este necesar să se selecteze un mod atunci când întreruperea are loc la marginea (sau căderea) pulsului la această intrare. Ei bine, atunci avem nevoie și de o subrutină simplă pentru procesarea acestei întreruperi. Această subrutină ar trebui să verifice pur și simplu valoarea liniei portului PD3 și, în funcție de zero sau unu, să scadă sau să crească valoarea reglabilă.

Să ne uităm la asta mai detaliat. Să presupunem că am ales modul de întrerupere a marginii pulsului. Să ne imaginăm că controlerul execută un program principal care nu este asociat cu codificatorul. La un moment dat, utilizatorul rotește mânerul codificatorului, de exemplu, spre stânga. Contactele încep să se închidă și să se deschidă. La marginea pulsului la intrarea INT0 din microcontroler, este apelată o întrerupere. Aceasta înseamnă că programul principal este întrerupt temporar și controlerul trece la rutina de gestionare a întreruperilor. Această rutină citește informații din portul PD și evaluează conținutul bitului PD3. Deoarece mânerul codificatorului a fost întors (am fost de acord) spre dreapta, microcontrolerul va detecta unul logic în acest bit. După ce a detectat o unitate, subrutina de procesare a întreruperii crește valoarea unei celule speciale în care este stocat codul corespunzător volumului curent. Codul este incrementat cu unu. După aceasta, subrutina își termină munca. Microcontrolerul revine la executarea programului său principal. Dacă rotația în aceeași direcție continuă, atunci la marginea următorului impuls va fi din nou cauzată o întrerupere la INT0 și valoarea volumului va crește din nou cu unu. Și așa mai departe până când rotirea mânerului codificatorului se oprește sau valoarea volumului depășește. Rutina ar trebui să verifice această valoare și să nu mărească volumul dacă a atins maximul.

Dacă rotorul codificatorului este rotit în cealaltă direcție, atunci aceeași procedură de procesare a întreruperii, numită la marginea semnalului la intrarea NT0, va detecta o valoare zero logică la intrarea PD3. După ce a detectat acest zero, subrutina trebuie să scadă valoarea codului din celula de volum cu unu. Dacă rotația continuă, atunci la marginea fiecărui impuls la intrarea INT0 va fi apelată această întrerupere și de fiecare dată valoarea volumului va scădea. Și în acest caz, programul trebuie să controleze acum valoarea minimă a volumului. Și când se atinge zero, programul nu ar mai trebui să efectueze procedura de scădere.

Până acum am vorbit despre un simplu encoder mecanic. Însă prezența contactelor mecanice este întotdeauna asociată cu fenomene precum zbârnâitul, precum și interferența cauzată de un contact slab din cauza înfundarii sau uzurii. Toate acestea conduc la o fiabilitate scăzută a codificatorului mecanic. Prin urmare, recent codificatoarele optoelectrice au devenit din ce în ce mai răspândite. Un encoder optoelectric folosește optocuple în loc de contacte mecanice: o fotodiodă LED. Un astfel de codificator necesită suplimentar alimentare externă, deci mai are un pin - pinul de alimentare. Astfel de codificatoare sunt de obicei alimentate de la o sursă stabilizată de +5V și produc semnale de ieșire apropiate de cele standard niveluri logice. În acest sens, nu este necesar să se includă rezistențe de sarcină interne pentru acele intrări ale microcontrolerului la care este conectat un astfel de encoder. În caz contrar, lucrul cu codificatoare optoelectronice este similar cu lucrul cu modele mecanice simple. Din păcate, utilizarea codificatoarelor optoelectronice este limitată de costul ridicat al acestora.

Ultima actualizare (05/04/2008)

Exemple practice Aplicații USB-AVR

Proiectul USB-AVR a atras mulți designeri amatori dintre cei mai mulți diferite țări pace. Compania de dezvoltare Objective pe site-ul său îi încurajează pe toți cei care și-au dezvoltat propriul design folosind tehnologia lor să trimită o descriere a acestuia sau un link către un site cu o astfel de descriere și plasează de bunăvoie toate aceste link-uri pe site-ul său.

CĂ. faptul că proiectul implică reprezentanți din diferite țări a condus la prezentarea unor descrieri diferite limbi diferite. În principal în engleză, germană, italiană. Din păcate, nu există încă un singur proiect în limba rusă. Cu toate acestea, site-ul nostru web intenționează să traducă descrierile celor mai interesante proiecte.

Nu au existat recenzii despre lucrurile mici Arduino de mult timp.
Astăzi am pus mâna pe aceste detalii și am decis să le „revizuiesc”.

Pentru cei care sunt speriați de cuvintele înfricoșătoare din ingineria radio, vă rugăm să nu vă uitați sub tăietură. pentru a nu-ți pierde timpul prețios.

Pentru ambarcațiunile mici cu controlere bazate pe Arduino și alte controlere, există multe soluții pentru afișarea informațiilor.


Puteți instala de la cele mai simple LED-uri până la afișaje complexe și panouri tactile.
Personal, mi-au plăcut indicatoarele LED cu șapte segmente pentru adâncimea de biți necesară.
Sunt suficient de luminoase, se văd bine la distanță mare și sunt destul de ușor de utilizat.

Dacă conectați un astfel de indicator direct la un microcontroler, o mulțime de ieșiri discrete sunt irosite. Pentru conectarea indicatorilor cu șapte segmente și matrice prin 3 fire MAXIM a dezvoltat controlerele MAX7219/MAX7221. Despre asta va fi recenzia mea.

Voi spune imediat că pentru cei cărora nu le place lipirea, se vând



L-am folosit și pe acesta, dar nu mi-au plăcut dimensiunile mari ale afișajului (mai ales în înălțime).

Indicatorii au ajuns în Perm în 33 de zile. Au fost ambalate într-o pungă moale simplă. Picioarele sunt înfipte într-o bucată de spumă. Russian Post i-a cruțat:


Dimensiuni 40x16. Dimensiunea cifrelor este de aproximativ 10 mm










Număr de picioare - 12: 7 segmente/anozi + punct-anod + 4 catozi comuni în funcție de numărul de cifre
Pas între picioare 2,54 mm

Pinout-ul picioarelor indicatorului


Șoferii MAX7219 au ajuns în 35 de zile, tot într-un pachet mic, prinși pe parafină.


Plănuiesc să cumpăr +47 Adaugă la favorite Mi-a placut recenzia +37 +97

La cererea muncitorilor, am decis să vorbesc despre un lucru minunat numit 7-segment Indicator LED. În primul rând, ce este? Iată chestia. Aceasta este o cifră, există și două cifre, trei și patru cifre. Am văzut încă șase cifre. După fiecare cifră există un punct zecimal. Dacă există patru cifre, atunci cel mai adesea după a doua cifră puteți găsi două puncte pentru a indica secundele la afișarea orei. După ce ne-am ocupat de glandele, să trecem la studiul circuitului. Ce este afișarea dinamică în general și de ce este nevoie de el? Deoarece indicatorul are 7 segmente, doar 7 segmente sunt folosite pentru a afișa numărul. Ele sunt întotdeauna desemnate cu litere latine A, B, C, D, E, F, G și DP Să ne uităm la poză. Există un LED sub fiecare segment. Toate LED-urile sunt conectate la un capăt. Fie anozi, fie catozi, iar capetele opuse sunt scoase. Este ușor de observat că pentru a afișa un număr trebuie să folosiți 8 pini. Un general și șapte pentru segmente. Dacă aceasta se referă la o categorie, atunci nu este nimic de gândit, doar atârnăm totul într-un singur port. Ce se întâmplă dacă există patru cifre? Opt înmulțit cu patru este egal cu treizeci și doi. Oh... Da, un astfel de indicator de 32 de mega va fi unul pe care trebuie să-l studiezi. Nu va funcționa așa. Există două soluții. Al nostru este un afișaj dinamic sau static. Pentru a înțelege mai departe, să ne uităm la diagrama pentru pornirea indicatorului.


Această schemă implică indicarea dinamică. Da, sunt dinamic și static. Care este diferența? Indicația statică este atunci când dăm fiecărei cifre propriul număr și este aprins constant, iar indicația dinamică este atunci când afișam numărul din prima cifră, apoi îl stingem și îl afișăm în a doua cifră, apoi îl stingem și îl afișăm în a treia cifră și așa mai departe până când descărcările nu se vor termina. Dupa ultima categorie mergem din nou la prima si tot asa in cerc. Dacă faceți acest lucru încet, veți putea vedea un ticker digital, dar dacă creșteți viteza, de exemplu, la 50 Hz, atunci ochii tăi nu vor mai vedea o pâlpâire. Acesta este modul în care funcționează afișajul dinamic. Să ne uităm acum la diagramă. În stânga este ATmega8 MK în spatele lui, pe portul D, există un cip 74ALS373. De ce este nevoie? Faptul este că indicatorul este pur și simplu 8 LED-uri asamblate într-un fel de matrice. Adică, indicatorul poate fi reprezentat ca o linie de 8 LED-uri. Și după cum știți, LED-urile mănâncă mult în raport cu MK. Desigur, conectarea directă nu este interzisă, dar este mai bine să plasați un fel de repetor între MK și indicator. În aceste scopuri, am decis să folosesc un tampon latch de 8 biți. De ce el? Ținând cont de faptul că folosesc indicatorul cu un anod comun, adică pentru sarcina cifrei nivelul activ este 0, atunci aș putea folosi în siguranță microcircuitul ULN2003A (7 ansambluri de tranzistori conform circuitului Darlington) și nu te deranjezi cu tamponul, dar... Dar adevărul este că ULN2003A are doar la bord tranzistoare NPNși pot folosi indicatorul doar cu un anod comun, dar ce se întâmplă dacă trebuie să-l folosesc cu un catod comun? Aici va ajuta tamponul, deoarece ceea ce scriu acolo va fi pe ieșire. Dacă vrei 0, vrei 1. Picioarele de control sunt conectate în modul translator. Adică, tamponul iese același lucru ca și intrarea. Aya pseudo izolare galvanică. Bufferul este urmat de rezistențe de limitare a curentului. Amintiți-vă, acestea sunt LED-uri și fără rezistențe se vor arde. Valoarea rezistorului trebuie selectată puțin mai mică decât este acceptabilă. Cert este că afișajul dinamic afișează caractere cu o anumită frecvență și este asemănător cu PWM, adică cu cât frecvența este mai mare, cu atât contrastul este mai mare, ca să spunem așa. Și cu cel mai confortabil contrast, numerele vor străluci puțin mai slab. Prin urmare, rezistențele trebuie luate cu o valoare nominală puțin mai mică. Am folosit 360 Ohm doar pentru ca aveam pe stoc. Următorul după rezistențe este indicatorul nostru. Pe de altă parte, unde sunt anozii, am conectat primele patru cifre ale portului C. Așadar, ne-am cam dat seama de circuit. Acum să discutăm despre algoritmul programului. Pentru a activa cifrele indicatoare una câte una, vom scrie o funcție separată și o vom apela la nesfârșit în corpul principal al programului. Mai precis, funcția va primi un număr de la 0 la 9999, îl va analiza în cifre și apoi va scoate fiecare cifră în locul ei. Dacă numărul are mai puțin de 4 cifre, spațiile libere din stânga vor fi umplute cu zerouri. Ne aliniem cu marginea dreaptă. Vom parcurge categoriile de la stânga la dreapta. Pentru a face vizibile orice acțiuni, vom folosi întreruperi de la contor pentru a crește numărul de ieșire cu unul o dată pe secundă. Deci sarcina este stabilită, pentru luptă. #define F_CPU 7372800UL // Frecvența cuarțului #include #include #include test int volatil nesemnat = 9980; // Variabilă de afișat pe indicator ISR(TIMER1_COMPA_vect) // Întreruperea handler-ului pentru timer 1 meci (test++; // Mărește numărul de ieșire if(test > 9999) test = 0; // Dacă depășește patru cifre, resetați-l la zero TCNT1H=0x00; //Resetează registrul TCNT1L=0x00; // conturi ) void dig_out(int num); // Declarația funcției de afișat pe indicator int main(void) ( DDRC = 0x0F; // Configurați porturile DDRD = 0xFF; // pentru lucrul cu indicatorul Port C pentru cifre, Port D pentru numere TCCR1A=0x00; // Setarea temporizatorului TCCR1B=0x04; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x70; OCR1AL=0x80; TIMSK=0x10; sei();// Activează întreruperile ( caracter nesemnat i = 0; // Variabila contor nesemnat char raz = 1; // Numărul cifrei caracter nesemnat dig_num = (0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10); // Codurile numerice pentru un indicator cu un anod comun unsigned char dig = (0, 0, 0, 0); // Matrice pentru valoarea cifrelor dacă (num ( dig =0; dig =0; dig =0; ) if(num // Pentru a umple biții din stânga cu zerouri ( dig =0; dig =0; ) if(num // Pentru a umple biții din stânga cu zerouri ( dig =0; ) while(num > 999) // Obțineți numărul de mii ( dig++; num -= 1000; ) while(num > 99) // Obține numărul de sute ( dig++; num -= 100; ) while(num > 9) // Obține numărul zecilor ( dig++; num -= 10; ) dig = num; // Obțineți numărul de unități în timp ce (raz // Rotiți până umplem toți cei 4 biți (PORTC = raz; // Selectați un rang PORTD = dig_num]; // Afișează numărul raz = raz // Trece la următoarea cifră i++; //Măriți indicele următoarei cifre _delay_ms(1); // Întârziere 1 ms } } Asta e tot codul. Nu o voi descrie pentru că are comentarii pentru fiecare rând. Mai jos puteți descărca arhiva cu proiectul pentru AtmelStudio6.2 Dacă mai aveți întrebări, sunteți binevenit pe forum. Ei bine, pentru cei mai pretențioși, mai jos este un videoclip cu toată această balalaika))).