Programe simple pentru microcontrolere. Lumină de trafic
În prima parte a articolului am făcut un simulator pentru viitorul nostru proiect, acum vom compila firmware-ul. Și pentru aceasta vom folosi programul Flowcode AVR v4.3.6.61. De ce folosim o versiune depășită? Da, deoarece programul în sine costă bani, dar pe versiuni mai vechi este posibil să se găsească ușor și keygens.
Ei bine, în general, hai să mergem.
Scriem programul de control cu ajutorul Flowcode AVR v4.3.6.61
Executați codul de bare AVR v4.3.6.61. Selectați "creați un nou diagram de flux", selectați tipul de microcontroler din meniul apărut, avem nevoie de "Attiny13" (fig.18,19,20). Apoi, apare o fereastră de program cu panouri. În meniul derulant "fișier" alegeți "salvați ca" și specificați calea spre dosarul pe care l-am creat în directorul rădăcină al unității "myproject", apelați fișierul numele său pe layout-ul tastaturii engleză "svetofor". Și suntem gata să scriem algoritmul programului.
Descrierea codului fluxului
Prima bara de instrumente este bara de comenzi
Mai jos este a doua bara de instrumente.
Există o mulțime de dispozitive pe care se conectează la porturile microcontrolerului (Fig.22).
În general, mă angajez la articolul "help" în limba rusă cu privire la lucrul cu acest program, dacă asta ar trebui să te uiți acolo (deși traducerea este amuzantă, dar puteți înțelege).
În continuare, să definim algoritmul luminii de semafor și să îl descriem cu cuvintele:
1. Lumina roșie este aprinsă și aprinsă, de exemplu - 5 secunde (nu râdeți, încă nu avem o lumină de seară reală de la intersecție);
2. Lumina galbenă se aprinde timp de 2 secunde (roșu nu se stinge);
3. Roșu și galben se vor opri;
4. Se aprinde verde timp de 5 secunde;
5. Blițuri verde de 3 ori;
6. Verdele se transformă în verde;
7. Chihlimbarul devine galben timp de 2 secunde;
8. Galbenul va ieși;
9. Repetați pasul 1 (sau sfârșitul ciclului).
Acum acest algoritm trebuie programat în microcontrolerul nostru.
Vom configura ieșirile microcontrolerului, pentru aceasta selectăm "ieșiri" și "LED" pe a doua bară de instrumente, LED-ul nostru este adăugat la panou (fig.23, 24).
Faceți clic dreapta pe LED. selectați proprietățile ext, selectați culoarea, mărimea și nivelul activ (reamintește modelul nostru în proteus, LED-urile sunt conectate cu un catod comun, deci nivelul activ este selectat înalt) (fig.25-26). Acum, din nou, faceți clic dreapta pe el și selectați "conexiuni" (amintiți-vă modelul din Proteus, avem un port roșu - B0, galben - B1, verde - B2.) (Fig.27,28).
Astfel conectăm toate cele trei LED-uri (Fig.29).
Acum avem ceva de gestionat programatic.
Pe fundalul carouri vedem două elemente legate de algoritm, ele sunt întotdeauna prezente întotdeauna. Fără acestea, nu puteți face acest lucru "BEGIN" și "END", adică începutul și sfârșitul programului. Deoarece microcontrolerele AVR execută programul de la început până la sfârșit, atunci executând "corpul programului" se va ajunge la "END" și se va opri. Nu avem nevoie de acest lucru, lumina de trafic ar trebui să funcționeze tot timpul până când este deconectată.
Pentru a face acest lucru, vom stabili un ciclu infinit de execuție a viitorului nostru program. Pentru aceasta, în prima bara de instrumente, găsiți pictograma "Buclă", care înseamnă un ciclu, și trageți această pictogramă în poziție, între "BEGIN" și "END" (Figura 30).
Acum, în corpul acestui ciclu, vom implementa algoritmul nostru. Primul punct pe care îl avem este să activați pe roșu timp de 5 secunde. Strangeti prea tare pictograma „macro componentă“, ceea ce înseamnă componenta macro și componentă avem este de LED-ne roșu (de modul în care aceasta are un nume, el este un LED0, este posibil pentru a vedea dacă faceți clic și pentru a vizualiza panoul de proprietăți - „proprietatea“ (Fig. 31,32).
Apoi, făcând dublu clic pe pictograma "macro a componentei" selectați LED0 și ON, ceea ce înseamnă - pentru a activa LED-ul 0 (Fig.33).
Roșul ar trebui să fie aprins timp de 5 secunde, există o pictogramă "DELAY", ceea ce înseamnă o întârziere (pauză), trageți-o și în proprietățile sale indicăm unitatea de timp și numărul (5) (Fig.
Punctul 2 avem galben pe 2 secunde, în timp ce roșu nu iese. Din nou: macro-ul componentei LED1 (este galben), selectați LED1, ON, apoi DELAY. setul 2 și unitățile de măsură - secunde (figura 36).
Următorul pas 3, roșu și galben vor ieși. Și punctul 4, se aprinde verde timp de 5 secunde. Dragging: macro-ul componentei. LED0, OFF (oprit roșu), macrocomandă componentă, LED1, OFF (oprit galben), din nou macrocomandă a componentei. LED2, ON (pornit verde). Apoi trageți DELAY, 5 sec. (Figura 37).
Punctul 5, avem un verde clipește de 3 ori, adică, apoi se oprește, apoi se aprinde, se oprește și apoi iese din nou. Aici vom gândi puțin, dacă este necesar să rescrieți aceleași acțiuni de 3 ori? Bineînțeles că nu. Utilizăm un ciclu, trageți-l și faceți clic de două ori. Bifați pe ciclul de redare (ceea ce înseamnă că numărul de cicluri), ne-a pus în valoare dreapta - 3 cicluri (Figura 38). Pentru claritate, faceți o pauză între oprirea și dezactivarea verde pe 0,5 secunde (sau 500 ms). Acum corpul strangeti prea tare de triplu ciclu component macro LED2 nostru, OFF, apoi DELAY, 500 ms, LED2, ON și DELAY, 500ms. (Figura 39).
Următorul pas 6, opriți cel verde. Punctul 7 porni galben timp de 2 secunde. Punctul 8 - opriți galbenul. (LED2, OFF, LED1, ON, DELAY, 2 sec., LED1, OFF). Cred că acest record va fi de înțeles pentru dvs., deoarece aceste acțiuni au fost efectuate în mod repetat (figura 40).
Ei bine, asta e tot. Am scris algoritmul programului de control al luminii semaforului. Să verificăm ce avem. Pentru a face acest lucru, selectați opțiunea "proiect" din meniul derulant "vizualizare", se va deschide fereastra opțiunilor proiectului. Setați frecvența de ceas a microcontrolerului 4800000 Hz. (acest lucru este necesar pentru calculul corect al pauzelor) și viteza de simulare, în acest caz "cât mai rapid posibil" (Fig.41,42).
Să începem acum să compilam proiectul. În meniul drop-down "chip", selectați "compilați la hex". Se afișează o fereastră de compilator și o indicație a funcționării acesteia (Fig.43).
Ar trebui să arate imaginea, dacă "Return code = 1", verificăm calea spre fișierul proiectului. Permiteți-mi să vă reamintesc că numele tuturor folderelor din calea din directorul rădăcină și fișierul ar trebui să conțină numai caractere latine. În caz contrar, compilatorul va produce o eroare (Fig.44).
Deschideți dosarul cu proiectul și consultați fișierul firmware-ului HEX (Fig.45,46).
Și aici este fișierul nostru C (Fig.47, 48).
Și acest algoritm al programului
Actualul firmware pe care l-am primit (codul).
Și programul pentru SI (este în arhivă de mai jos).
Acum, înapoi la proiectul nostru în Proteus professional. Trebuie să verificăm dacă codul pe care lucrăm funcționează în modelul dispozitivului pe care l-am creat sau nu. Pentru a face acest lucru, deschide fișierul nostru svetofor.DSN (acesta se află în dosarul nostru myproject), apoi faceți dublu clic pe microcontroler, se va deschide fereastra Properties (Fig.50), așa-numitul loc Fyuz, cum ar fi în figură (WDTON = 1; CLKDIV8 = 1; RSTDISBL = 1, CKSEL = 10, SUT = 10).
Alegeți calea către "Fișierul programului" făcând clic pe butonul cu dosarul (specificați calea spre fișierul nostru HEX) (Fig.51).
Apăsați butonul triunghi în jos (redare) și bucurați-vă de funcționarea circuitului.