Sunt des întâlnite cazurile în care dorim să conectăm un display la un sistem cu microcontroler şi avem la dispoziţie doar doi sau trei pini; în ajutorul celor care s-au confruntat cu această mică problemă vă prezint două variante pe care le-am testat cu succes.
Schema din figura 1 este indicată în cazul folosirii unui display LED 7 segmente -anod comun; după cum se observă se foloseşte pentru fiecare cifră un latch octal legat astfel încât să se obţină un registru de deplasare. Circuitele pot fi 74xx374 caz în care desenul de cablaj poate fi mai complicat sau 74xx574. Am folosit patru bucăţi 74HC574 [varianta SMD care încape lejer sub afişor] şi, în condiţiile în care am renunţat la rezistenţele de limitare a curentului (anozii afişoarelor se leagă la +5V prin intermediul a patru diode din seria 1N400x) cablajul a rezultat foarte compact şi comod de utilizat având doar patru conexiuni VCC, GND, DataIN şi CLK. Există şi un dezavantaj: pe timpul încărcării registrului afişorul este aprins astfel încât un ochi atent observă o uşoară clipire a segmentelor care sunt stinse. Per ansamblu la aplicaţii industriale sau pentru testări în sistemele cu microcontroler ce nu au integrat în varianta finală un display este foarte potrivit mai ales în cazul în care prin dulap există circuitele şi afişorul.
Pentru cei mai pretenţioşi există schema din figura 2 care foloseşte un registru de deplasare specializat, care are inclus şi un latch tampon, astfel încât nu mai apare acel efect de clipire la încărcarea registrului, acest circuit putând fi folosit şi în alte cazuri în care dorim să conectăm periferice cu intrare paralelă şi nu avem disponibili pini la controler. Ideea am găsit-o pe internet şi am testat-o cu succes pe un display LCD nemultiplexat cu patru cifre (de genul celor folosite pentru 7106) care ar fi necesitat aprox. 32 de pini – în final folosind doar trei pini de controler. Schema se pretează foarte bine pentru aplicaţiile alimentate din baterie, consumul fiind foarte mic (evident în cazul folosirii unui display LCD).
La final prezint un exemplu de aplicaţie ce reprezintă o adaptare a exemplului avr410.asm de pe site-ul ATMEL pentru un controler ATTiny12 care afişează codul comenzii corespunzătoare tastei apăsate pe o telecomandă uzuală TV. În principiu sunt mai multe modele de telecomenzi cu frecvenţa de modulare uşor diferită – variind între 30 şi 56KHz cele mai întâlnite fiind cele pe 36KHz; în funcţie de aceasta se va alege receptorul corespunzător – în cazul de faţă am avut disponibil un receptor de tipul TK19 931. În mod uzual un astfel de circuit conţine un amplificator, filtrul pe frecvenţa centrală şi demodulatorul astfel încât ieşirea este direct interfaţabilă cu microcontrolerul; în mod tipic ieşirea este open colector. Am folosit un microcontroler ATTiny12L de la ATMEL; prezentat anterior în paginile revistei am optat pentru acesta pentru că oferă 1K Flash, timer, întreruperi etc. în capsulă cu opt pini, la un preţ bun, suportă programare în circuit, pe scurt este mezinul familiei AVR (există şi tiny11 dar nu suportă programare in circuit) familie care, pe măsura interesului manifestat de cititori va fi prezentată ulterior la această rubrică. Personal vin din zona hardware, în domeniul soft randamentul nu este foarte bun – mă descurc cum s-ar zice, însă, împreună cu dvs., voiniceşte, am pornit la drum. Aplicaţia de faţă are un scop oarecum didactic, poate fi folosită pentru a testa telecomenzi compatibilităţi de coduri etc., se mai pot imagina şi dezvoltări cum ar fi un variator de lumină, sau un amplificator audio “de casă” modernă – să poată fi acţionat cu telecomanda; dar despre acestea în numerele viitoare.
Prezentare structură hardware
Schema este foarte simplă practic avem un receptor infraroşu, controler-ul, doi conectori unul către programator şi unul către blocul de afişare – care poate fi oricare din cele prezentate anterior (l-am folosit pe cel din figura 1 pe motiv că-l aveam deja), iar pentru afişor în funcţie de ce dispunem (am folosit Kingbright model DA56-11 GWA). Rezultă cablajul care a fost realizat separat; unde pot fi doi sau mai mulţi digiţi. În cazul în care se folosesc mai mulţi digiţi datorită vitezei mici la care rulează controlerul (oscilatorul intern de aprox 1,2MHz pentru a nu mai folosi un cuarţ extern) fenomenul de clipire caracteristic schemei din figura 1 este mai evident, de aceea recomand varianta din figura 2 care poate fi extinsă fără nici o problemă la un număr mare de cifre.
În ideea economisirii de timp şi materiale nu folosesc rezistenţele pe fiecare segment ci am înseriat patru diode pe alimentarea cifrelor. În cazul în care sunt mai mult de patru cifre este mai bine ca cifrele să fie alimentate eventual dintr-o sursă separată de aproximativ 2V în funcţie de model (se alege prin tatonări). Atenţie la decuplări, receptorul infraroşu folosit (TK19) la o alimentare zgomotoasă (dar care în mod normal nu face probleme) dă semnal pe ieşire, eventual se introduce un filtru RC pe alimentarea lui (un 1K + 0.1 Micro este suficient).
Prezentare software
La orice început sunt iniţializările, se declară stiva (aici nu e cazul neavând memorie RAM inclusă în cip), direcţia pe port-uri, modul timer-ului (-lor), întreruperile, variabilele etc.
În bucla principală folosec rutina “detect” exact aşa cum este în avr410.asm, singura modificare fiind introducerea unei întârzieri după ce se face afişarea şi direcţionarea codului comenzii tastate către afişorul serial. Atenţie la stivă! La acest model de controler (ca şi la 1200 de altfel) stiva este hardware şi are doar trei nivele. Pentru afişor folosesc o rutină de serializare a opt biţi care este apelată de mai multe ori în funcţie de câte cifre avem, un “send” putând avea lungimea de 16 biţi pentru două cifre, 24 biţi pentru 3 cifre etc. Pentru schema din figura 2 la sfârşitul pachetului se dă impuls de transfer (sau load). Codurile de trimis se obţin dintr-un tabel caracteristic fiecărei realizări practice a legăturilor la afişor, de exemplu pentru a afişa cifra 4 apelez rutina de conversie care-mi va returna codul 0x63 corespunzător cifrei 4 pentru desenul de cablaj folosit, pe care-l trimit serial către afişor.
Succes!
Nicu Ştefan
sweet@home.ro