Un exemplu de conectare a butoanelor. Pornirea microcontrolerului (resetarea la starea inițială) Conectarea butonului ceasului la microcontroler

Există două tipuri principale de microcontrolere AVR. Primul dintre ele este conceput pentru a obține performanțe maxime la frecvențe înalte, al doilea este pentru funcționare economică la frecvențe joase de ceas. Marcarea celui de-al doilea tip de microcircuit diferă de primul prin faptul că litera „L” este adăugată la sfârșit. De exemplu, și , și .

Microcontrolerele din primul grup permit alimentarea cu energie în intervalul de la 4,5 la 5,5 volți la o frecvență de ceas de 0...16 MHz (pentru unele modele - până la 20 MHz, de exemplu sau ), al doilea - 2,7...5,5 , respectiv volți la o frecvență de 0...8 MHz (pentru majoritatea modelelor, unele modele pot avea o gamă mai restrânsă). Consumul lor de curent diferă și el: microcontrolerele cu indicele „L” consumă mai puțină energie electrică.

Există, de asemenea, microcontrolere cu capacitatea de a reduce sursa de alimentare la 1,8 V, care sunt de obicei marcate cu litera „V”, de exemplu. Când puterea este redusă, frecvența ceasului trebuie redusă corespunzător. Pentru ATtiny2313V, cu o sursă de alimentare de 1,8...5,5 V, frecvența ar trebui să fie în intervalul 0...4 MHz, cu o sursă de alimentare de 2,7...5,5 V - în intervalul 0... 10 MHz.

Această abordare poate fi aplicabilă pentru prototipuri experimentale și produse de casă amatori, dar în automatizarea industrială poate duce la defecțiuni din cauza interferențelor sursei de alimentare. În condiții de zgomot extern puternic, rezistența acestui rezistor (100-500 kOhm) se dovedește a fi prea mare, iar dacă nu există un semnal de nivel înalt pe linia RESET, microcontrolerul se poate reseta aleatoriu.

Există mai multe modalități de a reduce riscul eliberării neintenționate. Una dintre cele mai simple este conectarea unui rezistor extern de tragere cu o valoare recomandată a rezistenței de 4,7 până la 10 kOhm la linia RESET.

Pentru a proteja în continuare linia RESET de interferențele externe, se recomandă, de asemenea, să o ocoliți la masă folosind un condensator extern cu o capacitate de aproximativ 0,1 μF. Dar trebuie reținut că intrarea de resetare externă RESET poate fi utilizată de interfața debugWIRE cu un singur fir atunci când depanați software-ul microcontrolerului. Prezența unui condensator conectat în paralel cu intrarea RESET va duce la defecțiuni ale acestei interfețe. Prin urmare, dacă intenționați să depanați microcontrolerul de pe placa țintă folosind debugWIRE, trebuie să furnizați un jumper pentru a dezactiva acest condensator în timp ce depanați software-ul aplicației.


Pentru a suporta modul de programare de înaltă tensiune, microcontrolerele AVR nu au o diodă internă standard pentru a proteja împotriva tensiunii în exces la intrarea RESET. Prin urmare, dacă nu se utilizează programarea de înaltă tensiune, se recomandă conectarea unei diode externe, de exemplu 1N4148, între linia RESET și magistrala de alimentare a microcontrolerului pentru a proteja împotriva interferențelor. Astfel, o diagramă tipică de „conducte” externă pentru linia RESET va arăta astfel.

Dacă linia de resetare nu este utilizată și nu este necesară programarea în circuit, atunci în dispozitivul finit pinul RESET poate fi conectat direct la magistrala de alimentare a microcontrolerului.

O măsură suplimentară poate fi derivarea fiecărui contact al motorului electric la corpul său sau la masă.

Capacitatea condensatoarelor ceramice C2 și C3 în acest caz poate fi, de asemenea, în intervalul 0,01...0,1 μF


Când instalați microcontrolerul în imediata apropiere a motoarelor, trebuie avut grijă pentru a reduce riscul unei posibile interferențe cu circuitele externe ale AVR. Astfel, un circuit de ceas extern poate servi ca cale de tranzit pentru interferențe. Pentru a elimina eventualele defecțiuni, se recomandă instalarea condensatoarelor C1 și C2 cât mai aproape de pinii XT1 și XT2 și conectarea plăcilor lor de masă direct la pinul GND al microcontrolerului cu conductori scurti. În plus, se recomandă lipirea corpului rezonatorului de cuarț Q1 cu un fir scurt la circuitul GND. O siguranță și mai mare poate fi asigurată printr-un circuit de ecranare pe placa de circuit imprimat în jurul rezonatorului și condensatorilor de cuarț.

Am emulat circuitul din programul Proteus, am clipit LED-ul și am învățat cum să flashăm microcontrolerul nostru virtual. Cu siguranță mulți dintre cititori au venit cu gândul: „Este posibil să clipești un LED folosind un buton conectat la MK?

Da, desigur că este posibil. Destul de ușor de implementat. Mai mult, puteți emula un buton cu sau fără fixare. Mai mult, în programul Proteus, puteți utiliza ambele tipuri de butoane folosind aceeași macrocomandă de butoane identice. În ce cazuri ar putea fi util acest lucru? De exemplu, trebuie să selectăm modurile de funcționare ale dispozitivului. Să aruncăm o privire mai atentă la cum să implementăm acest lucru folosind un microcontroler și să realizăm emularea în programul Proteus.


Pentru a avea o idee clară că avem de ales între două moduri, vom asambla un circuit simplu cu 4 LED-uri cu un singur buton de control. În prima opțiune, primul până la al patrulea LED-uri se aprind alternativ. Cu a doua opțiune, același lucru, dar în ordine inversă, adică de la a patra la prima. Singurul lucru pe care vreau să-l clarific este că butonul nostru este interogat pentru apăsare sau eliberare numai înainte de a începe efectul. Până când efectul își termină activitatea, programul nu răspunde la apăsarea sau eliberarea butonului.

Deci la obiect. Iată cum arată diagrama noastră în programul Proteus (click pentru a mări):

În această schemă vedem deja diferențe față de cea pe care am colectat-o ​​în articolul precedent. În partea stângă a diagramei vedem denumirea butonului și a sursei de alimentare de +5 volți.

După cum am discutat deja, luăm puterea și aterizăm în fila „Terminal”. Le desemnăm Putere și, respectiv, Pământ.

Notăm alimentarea circuitului printr-un triunghi cu o linie care o împarte în înălțime. În apropiere, în figură, se află desemnarea butonului. În dreapta butonului vedem un cerc roșu umplut cu o săgeată cu două capete. Dacă dați clic pe el în timpul emulării, butonul va fi fixat și va fi apăsat constant. După ce îl apăsați din nou, fixarea este îndepărtată.


Înainte de utilizare, trebuie să selectăm un buton din bibliotecă în același mod ca și celelalte părți. Pentru a face acest lucru, tastați cuvântul „dar” în câmpul „Mască”. Apoi în câmpul „Rezultate” cuvântul „BUTON”:


După aceasta, butonul va apărea în lista noastră, împreună cu piesele selectate utilizate în proiect.

Ce porturi folosim în proiect? Mai jos în figură vedem linii de ieșire de la porturile PA0, PB0, PB1, PB2 și PB3. Avem LED-uri conectate la portul B și un buton la portul A.

Deci, atunci când apăsăm, închidem circuitul care conectează +5 volți la portul PA0 și terminalul superior al rezistenței. De ce avem chiar și un rezistor instalat aici? Faptul este că circuitul butonului trebuie să fie închis. După ce am instalat rezistența, curentul curge de la sursa de alimentare pozitivă prin buton, rezistor și mai departe către pământ.

Este suficient să luați valoarea rezistenței egală cu 200 ohmi. Deci, atunci când apăsăm butonul, conectăm portul PA0 la +5 volți de putere, iar dacă interogăm pinul PA0 pentru prezența sau absența tensiunii, putem influența execuția programului nostru.

Am furnizat mai jos capturi de ecran cu textul programului nostru:


Deci, diferențele față de proiectul anterior sunt că configurăm toți cei 8 pini ai portului RA ca intrare, configurăm pinii portului PB0 - PB3 ca ieșire și PB4 - PB7 ca intrare.


Apoi folosim un test de condiție în programul nostru „ dacă"


Așadar, vedem în rândul de după „dacă”, între paranteze, condiția de execuție. Codul de mai jos este executat dacă avem un zero logic, sau zero volți, pe portul PA0. Acest text între paranteze este deplasarea biților portului. O vom analiza într-unul din articolele următoare, dar deocamdată este suficient să credem că, făcând acest lucru, sondam butonul de pe împinge. Apoi, între acolade apare textul programului care este executat dacă condiția este adevărată. Dacă condiția nu este adevărată, programul continuă să se execute, sărind peste textul dintre acolade.

În mod similar, folosind condiția „dacă”, interogăm butonul activat presare. Vă rugăm să rețineți că textul din paranteze s-a schimbat. Aceasta înseamnă că dacă avem o unitate logică pe piciorul PA0, îndeplinim condiția, adică textul dintre paranteze. Adică, la apăsarea butonului, LED-urile de la primul până la al patrulea se aprind și se sting unul câte unul, iar când sunt apăsate și menținute, LED-urile de la al patrulea până la primul se aprind și se sting. Astfel, putem influența execuția programului prin apăsarea unui buton, interogând prezența unui zero logic sau a unuia logic pe acesta

De asemenea, care conține fișierul „Sishnik”, HEX și fișierul Proteus.

Și aici este videoclipul

În prima lecție, am învățat cum să aplicăm tensiune folosind piciorul microcontrolerului. Acum trebuie să învățați cum să controlați microcontrolerul fără a-l aprinde.

De ce este necesar acest lucru? De exemplu, ați făcut un ceas pe un microcontroler, trebuie să setați ora, dar este foarte incomod să-l refacă de fiecare dată când ora este greșită. Este mult mai convenabil să folosești butoane, de exemplu, unul pentru a schimba orele, celălalt minute.

Amintiți-vă că în prima lecție am configurat piciorul ca ieșire, adică. i-am putea furniza tensiune. Deci, piciorul poate fi configurat ca intrare. În acest mod, puteți verifica dacă există tensiune pe el sau nu.

Exemplu: crearea unui proiect folosind Expertul de proiect. Configuram primul pas ca o iesire, al doilea ca o intrare. Când creăm proiecte cu vrăjitorul, indicăm că pinul PB1 va fi intrarea și pornim rezistorul de pull-up pe acesta, acest lucru este implementat astfel:

După crearea proiectului, să aducem codul în acest formular:

#include #include void main(void ) ( PORTB= 0x02 ; DDRB= 0x01 ; în timp ce (1 ) ( dacă (PINB.1== 0 ) ( PORTB.0= 1 ; delay_ms(100 ) ; PORTB.0= 0 ; delay_ms(100 ) ;));

#include #include void main(void) ( PORTB=0x02; DDRB=0x01; while (1) ( if(PINB.1==0) ( PORTB.0=1; delay_ms(100); PORTB.0=0; delay_ms(100) ;))

După cum putem vedea, setările portului s-au schimbat în comparație cu prima lecție

dacă(PINB.1==0) ()

Această linie ar trebui citită astfel - dacă pământul este conectat la pinul 1 al portului B (potențial 0), atunci executați codul între paranteze. În exemplul nostru, acesta este codul din prima lecție. Dacă butonul nu este închis, nu faceți nimic. Îl poți modela în Proteuse.

În loc de buton, poți pune un senzor, un releu etc., în loc de un LED - un buzzer, primești o alarmă.

Arhiva cu firmware și fișierul proteus este disponibilă

Update1: De ce este necesară strângerea porturilor?
Intrarea microcontrolerului are o rezistență ridicată, dacă chiar și microcurenți cauzați de fluxul de interferență, atunci conform legii lui Ohm U=R*I acest lucru poate duce la apariția logului 1 la intrare Pentru a evita astfel de probleme în microcontrolerele AVR, vă puteți conecta piciorul la sursa de alimentare plus , printr-un rezistor pull-up. În acest caz, chiar și logica de funcționare se schimbă invers - dar dacă apar interferențe, nu contează pentru noi, deoarece avem deja o unitate logică la intrare.

De ce conectarea printr-un rezistor? Să presupunem că am conectat intrarea la pozitiv direct fără un rezistor. Când butonul este declanșat, acesta va trage intrarea la masă, astfel încât va exista un scurtcircuit între + și masă la intrare. Dacă există o rezistență, atunci când butonul este închis pe o parte va rămâne conectat la +, iar pe cealaltă parte va apărea pământul de la buton. Curentul va curge prin rezistor, dar magnitudinea acestuia nu va fi atât de mare.

Update2: S-a adăugat un test în care puteți verifica cât de bine ați învățat materialul lecției

Acest film necesită Flash Player 9

Următoarele articole vor include dispozitive care trebuie să controleze sarcinile externe. Prin sarcină externă mă refer la tot ce este atașat de picioarele microcontrolerului - LED-uri, becuri, relee, motoare, actuatoare... ei bine, ați înțeles ideea. Și oricât de îndrăzneață ar fi acest subiect, pentru a evita repetarea în articolele următoare, risc totuși să nu fiu original - mă veți ierta. Voi arăta pe scurt, sub formă de recomandare, cele mai comune modalități de conectare a încărcăturii (dacă doriți să adăugați ceva, mă voi bucura prea mult).
Să fim imediat de acord că vorbim despre un semnal digital (un microcontroler este încă un dispozitiv digital) și nu ne vom abate de la logica generală: 1 - inclus, 0 -oprit. Sa incepem.


Sarcinile de curent continuu includ: LED-uri, lămpi, relee, motoare de curent continuu, servomotoare, diverse actuatoare etc. O astfel de sarcină este cel mai simplu (și cel mai adesea) conectată la un microcontroler.

1.1 Conexiune încărcături printr-un rezistor.
Cea mai simplă și probabil cea mai des folosită metodă când vine vorba de LED-uri.

Este necesar un rezistor pentru a limita curentul care curge prin piciorul microcontrolerului la admisibil 20mA. Se numește balast sau amortizare. Puteți calcula aproximativ valoarea rezistenței cunoscând rezistența de sarcină Rн.

Rquenching =(5v / 0.02A) – Rн = 250 – Rн

După cum puteți vedea, chiar și în cel mai rău caz, când rezistența de sarcină este zero, 250 ohmi este suficient pentru a vă asigura că curentul nu depășește 20 mA. Asta înseamnă că, dacă nu vrei să numeri ceva acolo, pune 300 ohmiși veți proteja portul de suprasarcină. Avantajul metodei este evident - simplitatea.

1.2 Conexiune încărcături folosind un tranzistor bipolar.
Dacă se întâmplă așa că sarcina dvs. consumă mai mult de 20mA, atunci, desigur, un rezistor nu va ajuta aici. Trebuie să creșteți cumva (a citi să întăriți) curentul. Ce se folosește pentru a amplifica semnalul? Dreapta. Tranzistor!


Este mai convenabil de utilizat pentru întărire n-p-n tranzistor conectat conform circuitului OE. Cu această metodă, puteți conecta o sarcină cu o tensiune de alimentare mai mare decât sursa de alimentare la microcontroler. Rezistorul de pe bază este limitativ. Poate varia într-un interval larg (1-10 kOhm), în orice caz, tranzistorul va funcționa în modul de saturație. Tranzistorul poate fi orice n-p-n tranzistor. Câștigul este practic irelevant. Tranzistorul este selectat pe baza curentului colectorului (curentul de care avem nevoie) și a tensiunii colector-emițător (tensiunea care alimentează sarcina). Disiparea puterii contează și ea - pentru a nu supraîncălzi.

Dintre cele obișnuite și ușor accesibile, puteți folosi BC546, BC547, BC548, BC549 cu orice litere (100mA), și chiar și același KT315 va face (cei care au resturi din stocurile vechi).
BC547.pdf - Fișă tehnică pentru tranzistorul bipolar BC547

1.3 Conexiune încărcături folosind un tranzistor cu efect de câmp.
Ei bine, ce se întâmplă dacă curentul sarcinii noastre este în maximum zece amperi? Nu va fi posibilă utilizarea unui tranzistor bipolar, deoarece curenții de control ai unui astfel de tranzistor sunt mari și vor depăși cel mai probabil 20 mA. Ieșirea poate fi fie un tranzistor compozit (citiți mai jos), fie un tranzistor cu efect de câmp (aka MOS, alias MOSFET). Tranzistorul cu efect de câmp este pur și simplu un lucru minunat, deoarece este controlat nu de curent, ci de potențial de la poartă. Acest lucru face posibil ca curentul microscopic de poartă să controleze curenții mari de sarcină.

Orice tranzistor cu efect de câmp cu canale n este potrivit pentru noi. Selectăm, ca și bipolar, după curent, tensiune și putere disipată.


Când porniți un tranzistor cu efect de câmp, trebuie să luați în considerare o serie de puncte:
– întrucât poarta este, de fapt, un condensator, atunci când tranzistorul comută, prin ea curg curenți mari (pe termen scurt). Pentru limitarea acestor curenți, în poartă este plasat un rezistor limitator.
– tranzistorul este controlat de curenți scăzuti și dacă ieșirea microcontrolerului la care este conectată poarta este într-o stare Z de impedanță mare, comutatorul de câmp va începe să se deschidă și să se închidă imprevizibil, captând interferențe. Pentru a elimina acest comportament, piciorul microcontrolerului trebuie „presat” la sol cu ​​un rezistor de aproximativ 10 kOhm.
Tranzistorul cu efect de câmp, pe fondul tuturor calităților sale pozitive, are un dezavantaj. Costul controlului curentului scăzut este încetineala tranzistorului. Desigur, va gestiona PWM, dar dacă frecvența admisă este depășită, vă va răspunde cu supraîncălzire.

Pentru utilizare, vă recomandăm tranzistori puternici IRF630, IRF640. Sunt folosite frecvent și, prin urmare, sunt ușor de obținut.
IRF640.pdf - Fișă tehnică pentru tranzistorul cu efect de câmp IRF640

1.4 Conexiune încărcături folosind un tranzistor Darlington compus.
O alternativă la utilizarea unui tranzistor cu efect de câmp pentru sarcini de curent ridicat este utilizarea unui tranzistor Darlington compozit. În exterior, este același tranzistor ca, de exemplu, unul bipolar, dar în interior este folosit un circuit de preamplificator pentru a controla tranzistorul puternic de ieșire. Acest lucru permite curenților mici să conducă o sarcină puternică. Utilizarea unui tranzistor Darlington nu este la fel de interesantă ca utilizarea unui ansamblu de astfel de tranzistori. Există un microcircuit atât de minunat ca ULN2003. Conține până la 7 tranzistoare Darlington, fiecare dintre acestea putând fi încărcat cu un curent de până la 500 mA și pot fi conectați în paralel pentru a crește curentul.


Microcircuitul este foarte ușor de conectat la microcontroler (doar pin la pin), are cablare convenabilă (intrare opusă ieșire) și nu necesită cablare suplimentară. Ca rezultat al acestui design de succes, ULN2003 este utilizat pe scară largă în practica radioamatorilor. În consecință, nu va fi dificil să-l obțineți.
ULN2003.pdf - Fișă de date pentru ansamblul Darlington ULN2003


2 AC sarcină.
Dacă trebuie să controlați dispozitivele AC (cel mai adesea 220v), atunci totul este mai complicat, dar nu mult.

2.1 Conexiune încărcături folosind un releu.
Cea mai simplă și probabil cea mai fiabilă conexiune este utilizarea unui releu. Bobina releului în sine este o sarcină de curent mare, așa că nu o puteți conecta direct la microcontroler. Releul poate fi conectat printr-un tranzistor cu efect de câmp sau bipolar, sau prin același ULN2003, dacă sunt necesare mai multe canale.

Avantajele acestei metode sunt curentul mare de comutare (în funcție de releul selectat), izolarea galvanică. Dezavantaje: viteza/frecvența de activare limitată și uzura mecanică a pieselor.

2.2 Conexiune încărcături folosind un triac (triac).
Dacă trebuie să controlați o sarcină puternică de curent alternativ și mai ales dacă trebuie să controlați puterea furnizată încărcăturii (dimeri), atunci pur și simplu nu puteți face fără a utiliza un triac (sau triac). Triac-ul este deschis printr-un impuls scurt de curent prin electrodul de control (atât pentru semi-undele de tensiune negative, cât și pentru cele pozitive). Triac-ul se închide singur când nu există tensiune pe el (când tensiunea trece prin zero). Aici încep dificultățile. Microcontrolerul trebuie să controleze momentul tranziției tensiunii prin zero și la un moment precis definit să trimită un impuls pentru a deschide triacul - acesta este un controler constant ocupat. O altă dificultate este lipsa izolației galvanice în triac. Trebuie să o faci pe elemente separate, complicând circuitul.


Deși triacurile moderne sunt controlate de un curent destul de scăzut și pot fi conectate direct (prin intermediul unui rezistor de limitare) la microcontroler, din motive de siguranță trebuie pornite prin dispozitive optice de decuplare. Mai mult, acest lucru se aplică nu numai circuitelor de control triac, ci și circuitelor de control zero.


Un mod destul de ambiguu de a conecta sarcina. Deoarece, pe de o parte, necesită participarea activă a unui microcontroler și un design de circuit relativ complex. Pe de altă parte, vă permite să manipulați sarcina în mod foarte flexibil. Un alt dezavantaj al folosirii triac-urilor este cantitatea mare de zgomot digital creat în timpul funcționării lor;

Triacurile sunt destul de utilizate pe scară largă, iar în unele zone sunt pur și simplu de neînlocuit, așa că obținerea lor nu este o problemă. Triacurile de tip BT138 sunt foarte des folosite în radioamatori.
BT138.pdf

2.3 Conectarea sarcinii utilizând un releu cu stare solidă.
Recent, radioamatorii au dobândit un lucru foarte minunat - relee cu stare solidă. Sunt dispozitive optice (se mai numesc și optorelay-uri), pe de o parte, în cazul general, există un LED, iar pe de altă parte, un tranzistor cu efect de câmp cu obturator fotosensibil. Acest lucru este controlat de un curent mic, dar poate manipula o sarcină semnificativă.


Conectarea unui releu cu stare solidă la un microcontroler este foarte simplă - ca un LED - printr-un rezistor.
Avantajele sunt evidente: dimensiuni reduse, lipsa uzurii mecanice, capacitatea de a manipula curent și tensiune mare și, cel mai important, izolarea optică de tensiunea periculoasă. Sarcina poate fi fie în curent continuu, fie în curent alternativ, în funcție de designul releului. Dezavantajele includ încetineala relativă (cel mai adesea se folosește un comutator de câmp pentru comutare) și costul destul de semnificativ al releului.

Dacă nu urmăriți caracteristicile umflate, puteți alege un dispozitiv la un preț accesibil. De exemplu, releul CPC1030N este controlat de un curent de 2mA, în timp ce este capabil să comute sarcini AC și DC de 120mA și 350v (un lucru foarte util pentru radioamatorii!)
BT138.pdf - Fișă tehnică pentru triac BT138
CPC1030N.pdf - Fișă tehnică pentru releul cu stare solidă CPC1030N


Articolul va discuta despre conectarea LED-urilor la un microcontroler, lucrul cu porturile și scrierea unui program în SI. Articolul este destinat în primul rând începătorilor care tocmai s-au apucat de microcontrolere AVR.

Mai întâi trebuie să selectați un microcontroler. În cazul meu este ATmega8535. În acest caz, puteți lua orice microcontroler, deoarece această sarcină poate fi implementată cu ușurință sub orice microcontroler. Puteți scrie un program pentru un microcontroler în Assembly, SI, Pascal și Bascom. Am folosit limba SI, toate aceste limbi sunt diferite.
Diferența specifică dintre C și Pascal poate fi văzută mai jos.

//LED intermitent void main() ( ddrB = 0b11111111; //setează porturile B la portul de ieșire B = 0b11111111; //în mod implicit totul este oprit în timp ce (1) ( portB = ˜portB; // comută starea LED-ului pe invers delay_ms(100 ) //întârziere cu 100 milisecunde) )

Programul în primul rând; începe ddrB:= $FF; //setează portul B la portul B de ieșire:= $FF; //nimic nu este aprins implicit în timp ce(1) nu începe portB:= not(portB); // comuta starea LED-ului la invers delay_ms(100); //termină o scurtă întârziere; Sfârşit.

Lista radioelementelor

Desemnare Tip Denumirea Cantitate NotăMagazinBlocnotesul meu
U1 MK AVR pe 8 biți

ATmega8535

1 La blocnotes
R1-R8 Rezistor

220 Ohm - 1 kOhm

8 La blocnotes
R9-R11 Rezistor

10 kOhm

3 La blocnotes
V1-V8 Dioda electro luminiscenta 8 La blocnotes
Butonul de tact 3