Kako učitati program na atmega8 proteus. Simulacija uređaja

10.09.2021

U ovome kurs obuke by avr Pokušao sam opisati sve najosnovnije stvari za početnike u programiranju mikrokontrolera avr. Svi primjeri su izgrađeni na mikrokontroleru atmega8. To znači da će vam za ponavljanje svih lekcija biti potreban samo jedan MK. Kao emulator elektronska kola Proteus se koristi - po mom mišljenju - najbolja opcija za početnike. Programi u svim primjerima su napisani u C kompajleru za avr CodeVision AVR. Zašto ne u nekom asembleru? Zato što je početnik već napunjen informacijama, a program koji množi dva broja traje oko stotinu redaka u asembleru, au složenim, podebljanim projektima koriste C. CodeVision AVR kompajler je skrojen za atmel mikrokontroleri, ima zgodan generator koda, dobro sučelje i možete flešovati mikrokontroler direktno iz njega.

Ovaj kurs obuke će objasniti i pokazati na jednostavnim primjerima kako:

  • Počnite sa programiranjem mikrokontrolera, odakle početi, šta vam je potrebno za ovo.
  • Koje programe koristiti za pisanje firmvera za avr, za simulaciju i otklanjanje grešaka koda na računaru,
  • Koji se periferni uređaji nalaze unutar MK-a, kako ih kontrolirati pomoću vašeg programa
  • Kako napisati gotov firmver u mikrokontroler i kako ga otkloniti
  • Kako napraviti PCB za svoj uređaj
Da biste napravili prve korake ka programiranju MK-a, trebat će vam samo dva programa:
  • Proteus je program za emulator (u njemu možete razviti krug bez pribjegavanja pravom lemljenju, a zatim testirati naš program na ovom kolu). Prvo ćemo pokrenuti sve projekte u Proteusu, a onda možemo lemiti pravi uređaj.
  • CodeVisionAVR je kompajler C programskog jezika za AVR. U njemu ćemo razviti programe za mikrokontroler, a direktno iz njega će biti moguće flešovati pravi MK.
Nakon što instalirate Proteus, pokrenite ga
Poziva nas da pogledamo projekte koji dolaze s njim, mi ljubazno odbijamo. Sada kreirajmo najviše jednostavan dijagram. Da biste to učinili, kliknite na ikonu i vizualno se ništa ne događa. Sada morate kliknuti na malo slovo P (odaberite iz biblioteke) u panelu liste komponenti, otvoriće se prozor za odabir komponente
u polje maske upisujemo naziv komponente koju želimo pronaći u biblioteci. Na primjer, trebamo dodati mega8 mikrokontroler
u listi rezultata pokažite na mega8 i pritisnite dugme OK. Mega8 mikrokontroler se pojavljuje na našoj listi komponenti
Tako dodajemo još jedan otpornik na listu komponenti unosom riječi maske u polje res i LED vodio

Da biste postavili dijelove na dijagram, kliknite na dio, zatim kliknite na polje dijagrama, odaberite lokaciju komponente i kliknite ponovo. Da dodate uzemljenje ili opći negativ na dijagram s lijeve strane, kliknite na “Terminal” i odaberite Uzemljenje. Tako, dodavanjem svih komponenti i njihovim povezivanjem, dobijamo ovo jednostavno kolo
To je to, sada je naša prva šema spremna! Ali možete se pitati, šta ona može učiniti? Ništa. Ništa, jer da bi mikrokontroler radio, potrebno je napisati program za njega. Program je lista naredbi koje će mikrokontroler izvršiti. Potreban nam je mikrokontroler da se montira na nogu PC0 logička 0 (0 volti) i logička 1 (5 volti).

Pisanje programa za mikrokontroler

Program ćemo napisati u jeziku C koristeći CodeVisionAVR kompajler. Nakon pokretanja CV-a, on nas pita šta želimo da kreiramo: izvor ili projekat Odaberemo ovo drugo i kliknemo OK. Zatim ćemo biti zamoljeni da pokrenemo čarobnjak CVAVR CodeWizard (ovo je neprocjenjiv alat za početnike, jer može generirati glavni kostur programa) izabrati Da
Čarobnjak počinje sa aktivnom karticom Chip, ovdje možemo odabrati model našeg MK-a - ovo je mega8, i frekvenciju na kojoj će MK raditi (podrazumevano, mega8 je podešen na frekvenciju od 1 megaherca), pa postavljamo sve kao što je prikazano na slici iznad.
Idite na karticu Portovi
  • Atmega8 mikrokontroler ima 3 porta: Port C, Port D, Port B. Svaki port ima 8 pinova. Noge luka mogu biti u dva stanja:
Izađi
  • Koristeći DDRx.y registar možemo postaviti pin da bude ulaz ili izlaz. Ako u DDRx.y = 0 - izlaz radi kao
  • ULAZ DDRx.y = 1 pin radi
IZLAZ

Kada je pin konfiguriran kao izlaz, možemo ga postaviti na logičku 1 (+5 volti) i logičku 0 (0 volti). Ovo se radi upisivanjem u registar PORTx.y. Zatim ćemo detaljno govoriti o I/O portovima. Sada postavljamo sve kako je prikazano na snimku ekrana i kliknemo File->Generate, Save and Exit. Zatim, CodeWizard će od nas zatražiti da spremimo projekat, mi ga spremimo i pogledamo kod: //biblioteka za kreiranje vremenskih kašnjenja void main(void) ( PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x01; // napravi PC0 pin na izlaz PORTD=0x00; DDRD=0x00; // Tajmer/brojač 0 inicijalizacija TCCR0=0x00 // Tajmer/brojač TCCR1A=0x00 OCR1BL=0x00 TCCR2=0x00; inicijalizacija TIMSK=0x00 // Inicijalizacija analognog komparatora ACSR=0x80;


Ovdje vam sve može izgledati zastrašujuće i nepoznato, ali u stvarnosti sve nije tako. Kod se može pojednostaviti eliminacijom inicijalizacije MK perifernih uređaja koje ne koristimo. Nakon pojednostavljenja to izgleda ovako:

Kada je pin konfiguriran kao izlaz, možemo ga postaviti na logičku 1 (+5 volti) i logičku 0 (0 volti). Ovo se radi upisivanjem u registar PORTx.y. Zatim ćemo detaljno govoriti o I/O portovima. Sada postavljamo sve kako je prikazano na snimku ekrana i kliknemo File->Generate, Save and Exit. Zatim, CodeWizard će od nas zatražiti da spremimo projekat, mi ga spremimo i pogledamo kod: //biblioteka za rad sa mega8 mikrokontrolerom #include //biblioteka za kreiranje vremenskih kašnjenja void main(void) ( DDRC=0x01; /* napravi PC0 pin na izlazu Unos 0x01 vam može izgledati nepoznat, a ovo je samo broj 1 u heksadecimalnom obliku, ovaj red će biti ekvivalentan do 0b00000001 u binarnom obliku, onda ću pisati ovako.*/ dok (1) ( )


Sve je u redu. Ali da bi LED dioda treperila, moramo promijeniti logički nivo na PC0 pinu. Da biste to učinili, morate dodati nekoliko linija u glavnu petlju:

Kada je pin konfiguriran kao izlaz, možemo ga postaviti na logičku 1 (+5 volti) i logičku 0 (0 volti). Ovo se radi upisivanjem u registar PORTx.y. Zatim ćemo detaljno govoriti o I/O portovima. Sada postavljamo sve kako je prikazano na snimku ekrana i kliknemo File->Generate, Save and Exit. Zatim, CodeWizard će od nas zatražiti da spremimo projekat, mi ga spremimo i pogledamo kod: //biblioteka za rad sa mega8 mikrokontrolerom #include //biblioteka za kreiranje vremenskih kašnjenja void main(void) ( DDRC=0x01; /* napravi PC0 pin na izlazu Unos 0x01 vam može izgledati nepoznat, a ovo je samo broj 1 u heksadecimalnom obliku, ovaj red će biti ekvivalentan na 0b00000001 u binarnom obliku, onda ću to napisati upravo ovako.*/ dok (1) // glavna petlja programa (// otvara operatorsku zagradu glavne petlje programa PORTC.0=1; / / postavi pin 0 porta C 1 na delay_ms(500) // napravi kašnjenje od 500 milisekundi; ;//zatvara operatorski zagrada glavne programske petlje)


To je to, kod je sada spreman. Kliknite na ikonu Build all Project files da kompajlirate (prevedete u uputstva za MK procesor) naš program. U fascikli Exe, koja se nalazi u našem projektu, trebala bi se pojaviti datoteka sa heksadecimalnom ekstenzijom, ovo je naša datoteka firmvera za MK. Da bismo naš firmware ubacili u virtuelni mikrokontroler u Proteusu, potrebno je dvaput kliknuti na sliku mikrokontrolera u Proteusu. Pojavit će se ovakav prozor
Kliknite na ikonu fascikle u polju Program File, izaberite heksadecimalni fajl našeg firmvera i kliknite na OK.

Sada možemo pokrenuti simulaciju našeg kola. Da biste to uradili, kliknite na dugme "Play" u donjem levom uglu prozora Proteus.Dizajniranje električnih šema pomoću mikrokontrolera u softverskom okruženju

Proteus 8.1. dio 2 Implementirano u Proteusu veliki broj funkcije za profesionalni dizajn mikroelektronskih uređaja fokusiranih na najviše savremenim sredstvima

modeliranje. Jedna od ovih funkcija je simulacija rada mikrokontrolera.

U ovom članku se razmatra proces modeliranja kola pomoću mikrokontrolera na primjeru mikrokontrolera 80C51.

Simulacija kola uključujući mikrokontroler i prevod programskog koda.

Da bismo jasno demonstrirali rad programa za inicijalizaciju mikrokontrolera, koristićemo sonde u boji logičkih nivoa 0 i 1. Da biste dodali sondu u radni prostor projekta, potrebno je pozvati prozor Pick Devices (slika 1) i U polju Category izaberite biblioteku alata za otklanjanje grešaka sa liste, u polju Potkategorija izaberite liniju Logic Probes, a u polju Rezultati izaberite liniju LOGICPROBE, a zatim kliknite na OK.

Rice. 1. Odabir sonde logičkog nivoa u prozoru Pick Devices.

Kao rezultat toga, prozor Pick Devices će biti zatvoren, a simbol sonde će biti pričvršćen za kursor miša, uz pomoć kojeg trebate postaviti simbol na željeno mjesto na dijagramu - kliknite na željeno mjesto na dijagram lijevom tipkom miša onoliko puta koliko je potrebno postaviti sonde.

Dodajmo mikrokontroler 80C51 u radni prostor projekta (proces kreiranja novog projekta pomoću mikrokontrolera u Proteusu detaljno je razmotren u prvom dijelu članka) i spojimo sonde na linije porta mikrokontrolera koji se proučavaju. Kao rezultat toga, kada se na izlazu linije porta pojavi logička vrijednost jedan, sonda će biti označena crvenom bojom, a kada se pojavi logička nulta vrijednost, sonda će biti istaknuta plavom bojom. Vrijednosti 0 i 1 su također vizualno prikazane na sondama.

Nakon što je dijagram sastavljen u radnom prostoru projekta (slika 2), a programski kod je unet na kartici Source Code (slika 3), možete započeti simulaciju.

Rice. 2. Demonstracijski sklop koji koristi mikrokontroler i sonde logičkog nivoa u boji.

Proces simulacije se pokreće pomoću dugmeta Pokreni simulaciju, koje se nalazi u donjem levom uglu prozora programa. Da biste privremeno pauzirali proces simulacije, koristite dugme Pauziraj simulaciju ili pokreni u trenutku 0 ako je zaustavljen (dugme se nalazi u donjem levom uglu prozora programa). Simulaciju možete zaustaviti pomoću dugmeta Zaustavi simulaciju.

Kao rezultat toga, ako kompajler ne otkrije greške u listi programa, sljedeće datoteke će se kreirati na disku vašeg računala u radnoj mapi projekta:

  • *.hex – fajl mašinskog koda (slika 4);
  • *.asm – datoteka sa asemblerskim kodom programa (slika 5);
  • *.sdi – datoteka za otklanjanje grešaka programa inicijalizacije, čiji sadržaj se takođe može videti na kartici 8051 CPU Source Code (slika 6).

Rice. 4. Nex datoteka strojnog koda.

Rice. 5. Fajl sa asemblerskim kodom programa.

Rice. 6. Kartica 8051 CPU Source Code.

Program za inicijalizaciju mikrokontrolera je napisan u programskom jeziku asm51. Ovo je asemblerski jezik koji je posebno dizajniran za pisanje programa za mikrokontrolere porodice x51. Ako su greške otkrivene tokom kompilacije programskog koda za inicijalizaciju mikrokontrolera, kompajler će ih označiti u *.lst datoteci. U ovom slučaju, hex datoteka neće biti generirana dok se greške ne riješe. U datoteci listinga, za svaku otkrivenu grešku, prevodilac ukazuje na uzrok greške i broj reda u kojem je otkrivena. Na slici 7 prikazan je fragment *.lst datoteke, u kojem debugger prijavljuje grešku broj 2 (Nedefinirani identifikator), a to je da je naziv ulaznog/izlaznog porta podataka pogrešno naveden u programskom kodu (mikrokontroler koji se koristi ne imaju port pod nazivom P6).

Rice. 7. Fragment datoteke liste *.lst.

Otklanjanje grešaka u programu za inicijalizaciju se vrši na kartici 8051 CPU Source Code, koja se prikazuje nakon pauziranja procesa simulacije. Da biste privremeno pauzirali simulaciju kola, koristite dugme Pauziraj simulaciju ili pokrenite u trenutku 0 ako je zaustavljeno (dugme se nalazi u donjem levom uglu prozora programa). Izveštaj o greškama primljenim kao rezultat prevođenja programskog koda je prikazan na dnu kartice Izvorni kod u VSM Studio Output panelu (slika 8).

Rice. 8. Izvještaj o greškama primljenim kao rezultat prijevoda programskog koda.

Stanje memorije i registara mikrokontrolera može se videti pomoću sledećih komandi u glavnom meniju programa:

  • Debug/8051 CPU registri (slika 9a);
  • Debug/8051 CPU SFR memorija (slika 9b);
  • Debug/8051 CPU interna (IDATA) memorija (slika 9c).

Rice. 9. Status: (a) registara, (b) SFR memorije, (c) interna memorija mikrokontroler.

Meni Debug (Slika 10) je dostupan kada je simulacija kola pauzirana.

Rice. 10. Meni za otklanjanje grešaka.

Analizirajmo rad demonstracionog kola prikazanog na slici 2. Na kartici main.asm (slika 3), koristeći komandu mov, date su instrukcije programu za inicijalizaciju mikrokontrolera da u port P2 upiše sljedeće vrijednosti portova P2.7-P2.0 - “00001111”, a na port P1 - vrijednosti portova P1.7-P1.0 - “01010101”. Nakon pokretanja simulacije pomoću sondi u boji, možemo provjeriti da li program radi ispravno. Kao što se može vidjeti sa slike 2, pinovi portova mikrokontrolera P1 i P2 su zaista kombinacija koju smo naveli u programskom kodu.

Uparivanje mikrokontrolera x51 sa 7-segmentnim indikatorskim čipovima Proteus.

Sistem koji koristi mikrokontroler može ne samo kontrolirati nešto, već i prikazati nešto. Najčešće se indikatori za sintetizaciju znakova koriste kao prikazni čvor u kolu. Ne postoje standardna pravila za uparivanje mikrokontrolera sa indikatorima, a u svakom konkretnom slučaju uparivanje se može izvesti drugačije.

Slika 11 prikazuje primjer povezivanja 7-segmentnog indikatorskog čipa na mikrokontroler. Princip povezivanja mikrokontrolera sa elementima kola je isti kao i za ostale komponente kola.

Rice. 11. Interfejs 7-segmentnog indikatorskog čipa sa mikrokontrolerom.

Da biste prikazali broj, potrebno je da „osvijetlite“ određene segmente indikatora. Kada se koristi u krugu mikrokontrolera, to se može učiniti programski. Različite kombinacije svetlosnih indikatorskih elemenata, obezbeđene eksternim prekidačem, omogućavaju prikaz brojeva od 0 do 9 i decimalne tačke. U prikazanom primjeru elementi indikatora imaju zajedničku katodu.

Za kontrolu 7-segmentnog indikatora, sklop koristi binarno-decimalni dekoder 74HC4511 (domaći analogni 1564ID23). Čip dekodera pretvara binarni kod primljen od mikrokontrolera u cifren kod za dalji prikaz na 7-segmentnom indikatorskom čipu. Čip 74HC4511 je poseban dekoder dizajniran za pretvaranje binarnog koda u kod od sedam segmenata i kontrolu sedmosegmentnih i tečnih kristala ekrana. Ulazi A, B, C, D – informacioni ulazi. Izlazi QA-QG – izlazi na indikator od sedam segmenata. Binarni kodovi i njihove odgovarajuće decimalne cifre prikazani su u tabeli 1.

Tabela 1. Binarni kodovi i njihove odgovarajuće decimalne cifre.

Binarni kod

Decimalna cifra

Da biste dodali čip dekodera u radni prostor projekta, potrebno je da otvorite prozor Pick Devices (Sl. 12a) iu njegovom gornjem lijevom dijelu u polju Category izaberite biblioteku serije TTL 74HC sa liste. Ispod polja Kategorija nalazi se polje Potkategorija u kojem je potrebno odabrati stavku Dekoderi. U polju Rezultati izaberite 74HC4511 čip i kliknite na OK. Da bi se dodalo mikrokolo sedmosegmentni indikator With zajednička katoda, izaberite biblioteku Optoelectronics u prozoru Pick Devices (Slika 12b) u polju Category, 7-Segment Displays u polju Sub-category i 7SEG-MPX1-CC u polju Results.

Rice. 12. Odabir komponenti kola u prozoru Pick Devices: (a) dekoder, (b) indikator sa sedam segmenata.

U primeru prikazanom na slici 11, indikator prikazuje broj 3. Da bi se to uradilo, na kartici main.asm (slika 13), koristeći komandu mov, inicijalizacionom programu mikrokontrolera date su instrukcije da zapiše na port P2 sledeće vrijednosti portnih linija P2.7-P2.0 - “ 00000011".

Rice. 13. Upišite binarni kod broja 3 na port P2 mikrokontrolera.

Nakon pokretanja simulacije, možemo provjeriti da li program radi ispravno. Kao što se može vidjeti sa slike 11, pinovi porta mikrokontrolera P2 su zaista kombinacija koju smo naveli u programskom kodu, a indikator prikazuje broj 3.

Programiranje mikrokontrolera x51.

Kada pišete programski kod za x51 mikrokontroler, morate znati sintaksu programskog jezika asm51. Najčešće korišćene asm51 komande su predstavljene u tabeli 2.

Tabela 2. Komandni sistem x51 mikrokontrolera.

Ime tima

Mnemonički kod

Prijenos na akumulator iz registra

Prijenos u registar iz akumulatora

Zamjena akumulatora sa registrom

Dodavanje akumulatora u registar

Dodavanje akumulatora sa konstantom

Battery Increment

Registrirajte inkrement

Smanjenje baterije

Dekrement registra

Logički I akumulator i registar

Logički OR akumulatora i registra

Resetovanje baterije

Inverzija baterije

Prijelaz ako baterija jednaka nuli(mt je oznaka u programskom kodu)

Skoči ako akumulator nije nula (mt je oznaka u programskom kodu)

Prazna operacija koja se može koristiti kao kašnjenje od 1µs

Izlazak iz potprograma

Proteus - Ovo univerzalni program, sa kojim možete kreirati razne virtuelne elektronskih uređaja i izvode njihovu simulaciju. Sadrži ogromnu biblioteku analognih i digitalni čipovi, senzori, diskretni elementi: otpornici, kondenzatori, diode, tranzistori, itd. Postoji i širok spektar optoelektronskih komponenti: displeji, LED diode, optokapleri, itd.

Glavna prednost i razlika između Proteusa i drugih sličnih programa za simulaciju rada električna kola, je sposobnost simulacije rada mikroprocesora i mikrokontrolera (MCU). Proteus biblioteka sadrži sljedeće glavne tipove mikrokontrolera: AVR, ARM, PIC, Cortex.

Kao i kod bilo kojeg drugog sličnog softvera dizajniranog da simulira rad električnih kola, ovaj softver ima niz virtuelnih merni instrumenti: ampermetri, voltmetri, vatmetar, osciloskop, logički analizator, brojač itd.

Proteus takođe ima ugrađene alate za automatizovani razvoj štampane ploče i da kreiraju svoje 3D modele.

Da bismo simulirali naš prvi program, potreban nam je samo ATmega8 mikrokontroler, otpornik i LED dioda iz biblioteke.

Postavke Proteus 8.4

Svako podešavanje počinje pokretanjem. U prozoru koji se pojavi kliknite na ikonu diode s kondenzatorom Schematic Capture(Dizajn kola).

Nakon toga će se otvoriti prozor sa praznim poljem.

Sada dodajmo ATmega8 mikrokontroler, otpornik i LED.

Zadani način rada je postavljen na odgovarajući način Component Mode stoga, da biste došli do menija za odabir elektronskih i drugih elemenata, samo kliknite na dugme P koje se nalazi na panelu UREĐAJ(uređaj). Nakon toga, otvorit će se prozor u kojem trebate odabrati iz menija Kategorija(Kategorije) Mikroprocesorske IC-ove(mikroprocesori), in Podkategorija(potkategorije) – AVR porodica. Sledeći u prozoru Rezultati pronađite i odaberite MK ATMEGA8. Kliknite na dugme OK.

Nakon toga će se pojaviti u meniju prozora UREĐAJ i već ga možete prevući mišem u radnu oblast.

Slično tome, dodajte otpornik i LED.

LED diode su u kategoriji Optoelektronika(Optoelektronika) i dalje u podkategoriji LED diode. IN u ovom primjeru odabrano je zeleno LED-ZELENA.

Sada sastavljamo krug, kao što je prikazano na donjoj slici. Otpornik R1 povezujemo na pin MK PC0, koji je spojen na anodu LED D1. Spajamo LED katodu na masu. Element "zemlja" nalazi se u meniju kartica Terminals Mode.

Da biste promijenili vrijednost otpora otpornika R1, potrebno je dvaput kliknuti na njega. U prozoru koji se otvori postavite 300 Ohma u liniji Otpor(otpor).

Imajte na umu da su pinovi mikrokontrolera u Proteuse-u grupirani u zasebne grupe prema portovima radi praktičnosti. Međutim, to ne odgovara njihovoj lokaciji u pravom MK-u. Osim toga, ne postoje terminali na koje se dovodi napon za napajanje MK. Ova funkcija je standardno instalirana.

Upisivanje programa u memoriju mikrokontrolera

Sada ostaje samo da upišemo naš kod u virtuelni MK. Dvaput kliknite na njega mišem i u novom koji se pojavi naznačite putanju do datoteke sa kodom. Pronađite lokaciju datoteke klikom na ikonu u obrascu otvori folder u redu Program File.

U fascikli projekta nalazimo fasciklu Otklanjanje grešaka i u njemu izaberite datoteku sa ekstenzijom HEX. Nakon toga pritisnite dugme Otvori.