Avr pas cu pas

Împărțim acest subiect în 3 părți. În prima, vom învăța cum să conectăm dispozitivul la un computer și să îl facem astfel încât să înțeleagă că computerul se transferă prin portul COM sau prin USB. În al doilea rând, vom scrie un program simplu pentru Delphi, pentru o mai mare ușurință în lucrul cu dispozitivul. Și în sfârșit, în al treilea rând, sudăm circuitul comutatorului pentru becul de 220V.

În primul rând, despre protocolul COM-port. Fără a intra în detalii tehnice inutile, voi spune că protocolul este foarte flexibil, cu multe "pixuri", "răsuciri" și alte setări specifice. De ce nu avem nevoie. Cele mai multe dintre ele sunt foarte specifice, așa că le omorâm doar cu garoafe și spunem - pentru a comunica cu computerul trebuie să o faci și nu altfel. Singura pedală pe care trebuie să o apăsați este rata de schimb. fără a intra în detalii - aici este formula prin care puteți calcula forța de apăsare a pedalei:

"Divider" = "frecvența cuarțului" / (16 * "viteza" -1)

Cu cât divizorul este mai aproape de întregul număr, cu atât mai bine.

"Viteza" de schimb. numerele 1200, 9600, 14400.57600 vă spun ceva? Nu? Nu există nici un arhaism în calculatorul dvs. cum ar fi portul COM? Ei bine, nu vom insista. Să luăm un simplu adaptor, cu un driver care creează un port COM virtual pe computer. Pentru a face acest lucru, citiți articolul pe acest adaptor. Acum conectați ieșirea Tx (9) a adaptorului la intrarea Rx (8). Conectați-vă la computer. Deschideți programul HyperTerminal. Să setăm rata de transfer a datelor să spună 19200 și să încercăm să apăsăm tastele. Dacă totuși am făcut toate drepturile, simbolurile pe care le-am introdus ar trebui afișate în fereastra programului.

Avr pas cu pas

"Frecvența cuarțului" - fie frecvența rezonatorului de cuarț, dacă îl utilizați, fie frecvența generatorului RC intern al microcircuitului. Cu toate acestea, există o nuanță. și pe ea se poticnește majoritatea noilor veniți. Cipul ATtiny2313 are un divizor de frecvență intern pentru cuarț. Este controlată de ambele siguranțe (biți de configurare) și registrele de control. Prin urmare, trebuie să luați în considerare împărțirea frecvenței cu 8 sau să opriți imediat divizorul.

Avr pas cu pas

Atenție, vă rog. acest lucru trebuie făcut în mod necesar! în caz contrar, un bummer.

Mai mult, scriem sau descarcăm aici un program atât de pretențios.

; ------------------------------------------------- ---------
, instalați o parte din picioarele cipului în starea "ieșire"
, și o parte din starea de "intrare"
; intrări - pinul 02,03,06,07,08,09,11
; ieșiri - pin 12,13,14,15,16,17,18,19

Init: ldi SlopReg, 0b11111111; trimitem semnul de ieșire
out DDRB, SlopReg; în registrul de control
; port "B"
ldi SlopReg, 0b00000010; încărcăm semnul intrării
din DDRD, SlopReg; în registrul de exerciții. port "D"

ldi SlopReg, 0b11111111; încărcăm semnul "activitate"
out PortD, SlopReg; în registrul de intrări

; ------------------------------------------------- ---------
; pregătirea emițătorului USART
; cu excepția faptului că dividerul nu trebuie să schimbe nimic, totul este configurat să funcționeze cu un computer.
; întreruperile nu sunt utilizate.
; intrare RXD-PD0 (pin2), ieșire TXD-PD1 (pin3)

ldi SlopReg, 0; 19200 baud pe partea de cuart 8 megahertzi
out UBRRh, SlopReg; USART divizor = 25
ldi SlopReg, 25; completați registrul UBRR
out UBRRl, SlopReg; fără a uita că dimensiunea sa este de 2 octeți

ldi SlopReg, 0b00000110; 8 biți. 1 oprire. fără paritate
out UCSRC, SlopReg; completați registrul de control al UCSRC

ldi SlopReg, 0b00011000; este permisă recepția și transmisia.
out UCSRB, SlopReg; completați registrul de control UCSRB

; ------------------------------------------------- ---------
; Citiți octetul de la portul COM și dacă acesta este primit fără erori
; afișați pe "monitor" și trimiteți-l la portul COM ca ecou.
ldi ViewReg, 0xff; formează starea inițială și
out PortB, ViewReg; afișați-o pe ecranul
; ----------------------------------------------
NoData: în SlopReg, UCSRA; Citiți registrul de stare USART
bst SlopReg, RXC; și să stocheze steagul de acceptare a octeților.
brtc NoData; dacă nu este setat stegul stocat
; apoi așteaptă din nou.
; ----------------------------------------------
; dacă caracterul este acceptat, atunci
bst SlopReg, FE; amintiți semnalul de eroare.
în ViewReg, UDR; și citiți octetul primit
br. NoData; dacă este setat stegul de eroare
; nu afișați simbolul, dar așteptați următorul
; ----------------------------------------------
; dacă nu este setat stegul de eroare -
out PortB, ViewReg; afișate pe ecranul
out UDR, ViewReg; și apoi reveniți sub forma unui ecou.
; ----------------------------------------------
rjmp NoData; și din nou este sănătos.
Sfârșit:
; ================================================= =========

Apoi, un pic de shaga4 finalizarea schemei (agresiunii creatoare), care este conectat la adaptorul USB de master - COM (TTL), pe următorul principiu - am conectați adaptorul terenului (7), cu un circuit de la sol; ieșirea adaptorului Tx (9) cu intrarea RxD (2) a cipului; și intrarea adaptorului Rx (8) cu ieșirea cipului TxD (3).

Avr pas cu pas
Avr pas cu pas

Acum, conectați alimentarea, introduceți adaptorul în portul USB al calculatorului, deschideți programul terminalului. De exemplu, HyperTerminal din software-ul standard al Windows. Scriem ce fel de nonsens și vezi toate simbolurile pe care le-am introdus în formă binară: zero corespunde LED-ului de ardere și 1 dispărut.

Asta-i tot ce putem spune, ne-am făcut a noastră, acum vom sorta programul.

De fapt, acest program este procesarea programului din pasul anterior. Singurele comenzi noi pe care le utilizează sunt brts și brtc. Ambele comenzi oferă un salt condițional în starea steagului "T". Steagul "T" este un drapel special pentru depozitarea temporară a steagurilor. Destul de convenabil. Cu comanda bst, puteți copia orice bit în steagul "T" și introduceți steagul "T" în orice bit al registrului de lucru cu comanda bld. În funcție de starea steagului "T", putem efectua tranziții condiționate. Comanda brts efectuează o tranziție în cazul în care steagul este setat la (= 1), iar comanda brtc, dimpotrivă, când stegulețul este zero.

În plus, programul utilizează un dispozitiv UART. Acest dispozitiv poate transmite date la codul de serie, și este controlat prin intermediul registrelor UBRR ($ 02: $ 09), UCSRA ($ 0b), UCSRB ($ 0A), UCSRC ($ 03), UDR ($ 0 ° C). Sarcinile Procesorul UBRR Registrul - valoarea împărțitor (rețineți că acest registru are o lățime de doi octeți!), Apoi configurează UART scriind pentru a înregistra UCSRC anumite steaguri. (valoarea 0b00000110 este ceea ce trebuie să comunicați cu computerul). și „include“ înscrierea în registrul de dispozitiv biți UCSRC de transmisie și recepție permis (0b00011000). dispozitiv UART poate funcționa întrerupere, dar vom colecta un program simplu - întrerupere nu ne interesează. Din registrul UCSRA, putem citi informațiile despre starea dispozitivului.

Acum, să analizăm mai detaliat funcționarea programului. În prima secțiune, inițializarea microcircuitului este deja cunoscută. Portul B ca ieșire și portul D ca intrare. În secțiunea a doua, este inițializat un dispozitiv de transmisie de date serială. Parametrii stabiliți în program: 19200 baud, 8 biți, 1 stop bit, fără paritate. La sfârșitul secțiunii, dispozitivul pornește. Atenție, vă rog. de îndată ce aparatul este pornit - pinii pin2 și pin3 ai cipului sunt deconectați de la portul D și încep să utilizeze UART. Asta înseamnă că încercările de a citi din aceste concluzii ceva prin portul D vor arăta că aceste "picioare sunt atârnate în aer", adică nu sunt legate de nimic.

În bucla principală, programul verifică dacă un nou octet de la calculator a sosit, verificând pavilionul RXC din registrul de stare UCSRA. Dacă steagul este "ridicat", octetul a sosit și îl putem citi din registrul de date UDR. După citirea din registru, transferăm octetul recepționat în portul "B". Ca rezultat, acesta este afișat pe ecranul de 8 pixeli. În plus, pentru a oferi o "ecou" de la intrarea de la tastatură, vom transfera din nou simbolul primit pe computer. Pentru ca UART să transmită datele, trebuie doar să o scrieți în registrul de date UDR.

Aceasta este logica programului. De fapt, există încă multe capcane. De exemplu, viteza de transmisie pe un protocol serial este mult mai mică decât viteza procesorului și, în principiu, ar trebui să verificăm semnalul pregătit pentru transmițător înainte de a trimite fiecare simbol nou. Cu toate acestea, chiar logica programului (transmiterea nu începe mai des decât primirea) ne permite să facem fără ea.

În principiu, toate exemplele de mai sus demonstrează clar că, chiar și pentru aplicații grave cum ar fi lucrul cu un computer, ne putem limita de fapt la un set minim de cunoștințe. Mai multe comenzi, mai multe dispozitive "la bord", mai multe registre. Dar nu am atins astfel de concepte cum ar fi subrutina, întreruperea, lucrul cu RAM și memoria nevolatilă (și, în general, nu au luat în considerare alocarea memoriei). Nu am atins încă contoare, nici comparatoare, nici cele mai multe alte dispozitive "la bord". Din toate acestea, putem concluziona că, pentru a rezolva o anumită sarcină, nu trebuie nici măcar să cunoaștem AVR de la și la. Acesta este unul dintre avantajele acestei tehnologii.