8.4. Encoder de prioritate
8.4. Encoder de prioritate
Encoderele digitale iau toate intrările de date una câte una și le transformă într-un cod binar echivalent la ieșirea lor.
Spre deosebire de un multiplexor care selectează o linie individuală de introducere a datelor și apoi trimite acele date la o singură linie de ieșire sau comutator, Encoderul digital, denumit mai frecvent encoder binar, ia toate intrările de date una câte una și le transformă într-o ieșire codificată. Așadar, putem spune că un encoder binar este un circuit logic combinațional cu mai multe intrări care convertește datele de nivel logic "1" la intrările sale într-un cod binar echivalent la ieșirea lui.
În general, encoderele digitale produc ieșiri de coduri pe 2 biți, 3 biți sau 4 biți, în funcție de numărul de linii de intrare a datelor. Un encoder binar de n-biți are 2n linii de intrare și linii de ieșire pe n-biți cu tipuri comune care includ configurații 4-la-2, 8-la-3 și 16-la-4.
Liniile de ieșire ale unui encoder digital generează echivalentul binar al liniei de intrare a cărui valoare este egală cu "1" și sunt disponibile pentru a codifica fie un model de intrare zecimal sau hexazecimal la un cod de ieșire binar sau BCD (zecimal codat binar).
Encoder binar 4-la-2 biți
Unul dintre principalele dezavantaje ale encoderelor digitale standard este acela că pot genera un cod de ieșire greșit atunci când există mai mult de o intrare prezentă la nivel logic "1". De exemplu, dacă facem intrările D1 și D2 HIGH la "1" logic, ambele în același timp, ieșirea rezultată nu este nici la "01", nici la "10", dar va fi la "11" care este un număr binar de ieșire care diferă de intrarea reală prezentă. De asemenea, un cod de ieșire "0" logic toate poate fi generat când toate intrările sale sunt la "0" SAU când intrarea D0 este egală cu 1.
O modalitate simplă de depășire a acestei probleme este de a "prioritiza" nivelul fiecărui pin de intrare și dacă există mai mult de o intrare la nivelul logic "1", codul de ieșire real va corespunde doar intrării cu prioritatea cea mai mare desemnată. Atunci, acest tip de encoder digital este cunoscut ca un encoder de prioritate sau encoder-P, pe scurt.
Encoder de prioritate
Encoderul de prioritate rezolvă problemele menționate mai sus prin alocarea unui nivel de prioritate pentru fiecare intrare. Ieșirea encoderului de prioritate corespunde la intrarea activă curentă, care are cea mai mare prioritate. Deci, când o intrare cu o prioritate mai mare este prezentă, toate celelalte intrări cu o prioritate mai mică vor fi ignorate.
Encoderul de prioritate vine în mai multe forme diferite, cu un exemplu de codificator de prioritate cu 8 intrări, împreună cu tabelul său de adevăr prezentat mai jos.
Encoder de prioritate 8-la-3 biți
Encoderele de prioritate sunt disponibile în formatul IC standard, iar TTL 74LS148 este un encoder de prioritate 8-la-3 biți care are opt intrări active LOW ("0" logic) și oferă un cod de 3 biți intrării cu cea mai mare cotă la ieșirea sa.
Encoderele de prioritate scot întâi intrarea cu cel mai înalt rang, de exemplu, dacă sunt aplicate simultan liniile de intrare "D2", "D3" și "D5", codul de ieșire va fi pentru intrarea "D5" (101), deoarece are cel mai înalt rang din cele 3 intrări. Odată ce intrarea "D5" a fost eliminată, următorul cod de ieșire cel mai mare ar fi pentru intrarea "D3" (011) și așa mai departe.
Tabelul de adevăr pentru un encoder de prioritate 8-la-3 de biți este dat de:
unde X este egal cu "dont care = nu contează", acesta este "0" logic sau "1" logic.
Din acest tabel de adevăr, expresia Booleană a encoderului de mai sus cu intrările de date D0 până la D7 și ieșirile Q0, Q1, Q2 este dată de:
Ieșire Q0
Ieșire Q1
Ieșire Q2
Atunci, expresia Booleană finală pentru encoderul de prioritate, inclusiv intrările zero, este definită de:
În practică, aceste intrări zero ar fi ignorate, permițând implementarea expresiei Booleene finale pentru ieșirile encoderului de prioritate 8-la-3. Putem construi un encoder simplu din expresia de mai sus utilizând porți OR individuale după cum urmează.
Encoder digital folosind porți logice
Aplicații digitale pentru encoder
Encoder de tastatură
Encoderele de prioritare pot fi utilizate pentru a reduce numărul de fire necesare într-un anumit circuit sau aplicație care are mai multe intrări. De exemplu, presupuneți că un microcomputer trebuie să citească cele 104 taste ale unei tastaturi QWERTY standard în care o singură tastă să fie apăsată oricând fie "HIGH", fie "LOW".
O modalitate ar fi să conectați toate cele 104 fire de la tastele individuale de pe tastatură direct la intrarea computerelor, dar acest lucru ar fi impracticabil pentru un mic PC de acasă. O altă alternativă și mai bună ar fi aceea de a interfața tastatura cu PC-ul folosind un encoder de prioritate.
Cele 104 butoane sau taste individuale ar putea fi codificate într-un cod ASCII standard de numai 7 biți (0 la 127 zecimal) pentru a reprezenta fiecare cheie sau caracter al tastaturii și apoi introduceți ca un cod BCD de 7 biți, mult mai mic, direct în computer. Encoderele de tastatură, cum ar fi 74C923 cu 20 de taste, sunt disponibile pentru a face acest lucru.
Encodere de poziție
O altă aplicație mai obișnuită este controlul pozițional magnetic, așa cum este utilizat pentru navigarea navelor sau pentru poziționarea brațelor robotice etc. Aici, de exemplu, poziția unghiulară sau rotativă a unui busole este convertită într-un cod digital, de un encoder de prioritate 74LS148 8-la-3 linii, și introduse la calculatorul sistemelor pentru a furniza date de navigație. Un exemplu de codificare a busolei cu 8 poziții la ieșire de 3 biți este prezentat mai jos. Magneți și comutatoare reed ar putea fi folosite la fiecare punct al busolei pentru a indica poziția unghiulară a acelor.
Navigare cu encoder de prioritate
Cereri de întrerupere
Alte aplicații, în special pentru encoderele de prioritate, pot include detectarea întreruperilor în aplicațiile cu microprocesor. Aici microprocesorul folosește întreruperi pentru a permite dispozitivelor periferice, cum ar fi unitatea de disc, scanerul, mouse-ul sau imprimanta etc., să comunice cu el, dar microprocesorul poate "vorbi" doar la un dispozitiv periferic la un moment dat, astfel că este necesar să cunoaștem când un dispozitiv periferic particular dorește să comunice cu el.
Procesorul face acest lucru prin folosirea semnalelor "Interrupt Requests" sau "IRQ" pentru a acorda prioritate tuturor dispozitivelor periferice pentru a se asigura că cel mai important dispozitiv periferic este servit mai întâi. Ordinea importanței dispozitivelor va depinde de conectarea acestora la encoderul de prioritate.
Deoarece implementarea unui astfel de sistem utilizând encodere de prioritate, cum ar fi IC encoder de prioritate standard 74LS148, implică circuite logice suplimentare, sunt disponibile circuite integrate destinate scopului cum ar fi controlerul programabil de întrerupere prioritară 8259.
Rezumat Encoder digital
Deci, encoderul digital este un circuit combinațional care generează un cod specific la ieșirile sale, cum ar fi binar sau BCD, ca răspuns la una sau mai multe intrări active. Există două tipuri principale de encoder digital: Encoder binar și encoder de prioritate.
Am văzut că encoderul binar convertește una din 2n intrări într-o ieșire n-biți. Atunci, un codificator binar are mai puțini biți de ieșire decât codul de intrare. Encoderele binare sunt utile pentru comprimarea datelor și pot fi construite din porți simple AND sau OR. Unul dintre principalele dezavantaje ale unui codificator binar standard este că ar produce o eroare la ieșirile sale dacă mai multe intrări ar fi active simultan. Pentru a depăși această problemă, s-au dezvoltat encodere de prioritate.
Encoderul de prioritate este un alt tip de circuit combinațional similar cu un encoder binar, cu excepția faptului că el generează un cod de ieșire bazat pe intrarea cu cea mai înaltă prioritate. Encoderele de prioritate sunt utilizate în mod extensiv în sistemele digitale și informatice ca și controlere a întreruperilor de microprocesor, unde detectează intrarea cu cea mai mare prioritate.
În următorul tutorial despre dispozitivele logice combinaționale, ne vom uita la funcția complementară a encoderului numită Decodor care convertește un cod de intrare pe n-biți la una din cele 2n linii de ieșire.