Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Kako da Kod prebacite na mikrokontrolor



Predavanje 2 - Kako da Kod prebacite na mikrokontrolor

Sve delove lekcije možete dobiti ovde. Takođe vam preporučujemo da nabavite multimetar za “kontinuirana” podešavanja. Multimetar dobrog kvaliteta sa ovim podešavanjima kreće se oko ~$60 pa čak do $300 za stvarno jedan spektakularan. Mi volimo naš jeftini za $60.

Izvinite zbog konfuzije. Kada je ovo upustvo napisano i fotografisano, koristili smo ATmega8. Sada imamo noviji ATmega328. Pronaćićete sve ATmega328 informacije na sledećim stranicama, ali ova slika će vam pokazati jedan ATmega8.

Pretpostavljam da imate vaš 5V koji je snadbeven sa testovima i koji radi. Sledeće nam treba da ubacimo ATmega u sam nosač i da priključimo napajanje i uzemljenje.

ATmega8 (isto radi sa ATmega168, i 328) koji se nalazi u srednjem redu daske za hleb

Moraćete malo da savijete kolena DIP (dual inline package) da bi ste došli do ATmega koji se nalazi u centru daske za hleb. Budite oprezni! Ne savijajte špenadle previše unutra. Špenadle ATmega bi trebalo ubaciti u unutrašnja dva reda daske za hleb. Najbolje bi bilo da se ubaci jedna strana, a onda da se lagano gurne IC postrani dok se druga strana špenadle ne ubaci u drugi red iste daske za hleb. Veoma je zbunjujuće, znam.

Note: Taj 5V 'rail' je horizontalni niz rupa pored crvene linije. Trebalo bi da imate mrežnu konekciju vaseg 5V napajanja i regulator kruga na 5V nizu. To ce poboljsati sa energijom sve rupe pored crvene linije 5V. Isto je i sa plavom linijom. Sve horinzontalne rupe pored plave linije su takodje povezane. Jedna od ovih rupa bi trebalo da bude povezana sa uzemljenjem vaseg napajanja, regulatora i uzemljenjem vaseg stekera. Mozete povezati VCC pins na ATmega328 na bilo koju rupu duz 5V niza, a povezete GND pinove na ATmega328 bilo koje rupe duz plavog GND niza.

O, hej. Ako vam niko nikada nije rekao veoma je lako shvatiti gde se nalazi pin 1 na IC. Proizvodjaci svega polarizovanog (titanijumskih navlaka, elektronskih navlaka, LEDs, ICs, itd) uvek ce ostaviti neke markere da bi ukazali na indikaciju kako bi naprava trebalo biti organizovana. Za IC, postoji mala dimploma na kraju IC. Plava strelica na slici pokazuje na diplomu. Narandzasta strelica pokazuje pin1, a plava pokazuje kako se povecava broj pinova.

Pin etiketa na IC

Ako od pocetka brojimo, pin 1 je na levo, a povecava se po levoj strani IC. broj pina se povecava na desnoj strani i dalje se broji. Pogledajte sliku na ATmega328 listu malo nize.

ATmega328 bi trebalo da je na dasci za hleb, pin 7 (VCC) i pin 20 (AVCC) trebalo bi da budu povezani sa vasim 5V nizom i pins 8 i 22 (GND) bi trebalo da budu povezani sa GND na vasoj dasci za hleb. Ako ukljucite vase napajanje, onda ATmega328 nije pokrenut, ali nema ni sta da pokrene!

Zapravo to nije totalno tacno - postoji jos jedna konekcija koja mora biti odradjena pre nego sto ATmega328 pokrene kod. RESET pin na ATmega328 mora biti povezan sa VCC. Ili mozete poveyati zicama RESET pin direktno na 5V ili mozete 'tie it high' povezujuci RESET pin na VCC preko rezistora. To ce vam omoguciti da dodate trenutno dugme za reset. Sta je to? Reset linija kod ATmega328 je tacno ono sto i milsite da jeste - ona resetuje mikro kao sto i sve ostalo na vasem kompjuteru funkcionise. Ako pogledate ATmega328podatke videcete RESET etiketu oznacenu sa natpisom iznad nje. To je natpis koji ukazuje da je reset pin aktiviran nisko. Sta je to 'active low'? RESET pin je input. Niski nivo pina ce staviti mikro na reset - tj. pin je aktiviran sa niskim autputom. Tako da, jedino ako, zelite da vas ATmega328 ostane na reset, moracete da podignete taj pin visoko.

Sada vam treba dugme za resetovanje. Trenutni prekidac je prekidac koji je aktiviran (ili zatvoren) dok ga dodirujete, a otvoren je kada ga pustite. Ovo se obicno naziva 'tactile switches' jer urade 'klik' kada ih pritisnete pomocu dugmeta sa 'tactile' pozadinom.

Ovako izgleda sematski deo. Primetite pin 1 i pin 2 koji su povezani jedan sa drugim, zatim su 3 i 4 povezani zajedno. A onda pritisnete dugme, i privremeno se povezuju 1/2+3/4 zajedno.

ona nije ni sa cim povezana i moze biti odstranjena.

Da bi ste testirali ovo dugme, obrisite milimetar i podesite ga na kontinuirana podesavanja. Ovo je lepse podesavanje, srednji multimetri koji su od velike vaznosti kada je u pitanju problem sa radom ili neko istrazivanje. Spojite ove stavke - cucete zvuk koji ukazuje da postoji kontinuiranost ili mozda cak (nultu) otpornost izmedju proba. Ubacite dugme u dasku za hles i probajte dva pin na jednosj strani dugmeta. Ovi pinovi su onda zauvek povezani izmedju prekidaca, ako izaberete pinove 1/2 ili ¾. Ako odaberete 1/3 ili 2/4, necete cuti ton - vec onda pritisnite dugme. Tako sto cete pritisnuti dugme napravicete elektricnu konekciju izmedju pinova - i onda cete cuti zvuk. To znaci da imate elektricnu konekciju.

Sema pinova 1 i 2 reset dugmeta konektuje zajedno (sa uzemljenjem) i pinovi 3/4 povezni zajedno (povezani !RESET). U praksi, samo vam je potreban prekidac za rad. Igrajte se sa vasim multimetron i pronadjite dva pina koji ne prave buku kada se dodirne dugme, i ne pravi se buka kada se dugme podigne. Koristite ta dva pina.

Gore prikazana sema je to o cemu govorimo ovde. Taj 10K rezistor 'pulls' reset pin visoko za vreme normalne aktivnosti. Ali tako sto cete podici reset pin visoko, ATmega328 radi normalno. Kada stisnete reset dugme, (S2), reset pin ima kontinuiranu konekciju sa uzemljenjem. S obzirom da je otpornost pomocu dugmeta skoro nula, pobedjuje (ako se uporedi sa otpornoscu 10K rezistora!), a reset pin je stisnut, RESET je aktiviran i ATmega328 ide na reset. Otpustite dugme i onda je reset pin opet podignut i ATmega328 izlazi iz reseta. Nifty!

ATmega328 pinout

pogledajte niz o ATmega328 podacima? Ako gledate vrh IC (noge dole), sa verhom niza, pin brojevi se povecavaju pocetak sa 1 na vrhu u gornjem levom uglu. To je nacin na koji IC pin broj radi. Ipak, orijentacija za markiranje varira od proizvodjaca do proizvodjaca i od samog pakovanja. Potrazite odredjene markere kao sto je dimple, manje tacke, bele strelice, odredjeni uglovi - sve ono sto citi oblast razlicitom od drugih delova cipa, sto verovatno ukazuje na pin1. Kada sumljate, proverite bazu podataka.

Resetujte zice pored ATmega8 (neke primenjive za ATmega168, i ATmega328)

naucite kako da koristite kontinuirana podesavanja na vasem multimetru. To je vitalno kada dodje do problema u toku rada!

Svaki mikrokontrollor ima drugacije metode da ubaci kod u fles memoriju. proteklih nekoliko godina naglasavan je ISP ili "kod sistemskog programiranja". ISP vam dozvoljava da programirate IC, a da ne morate da iskljucite mikrokontrolor sa aplikacije. Ovo nije sasvim nevazno! istorija je bila mnogo bolnija. Atmel je dizajnirao relativno pravolinijsku metodu koja zahteva kontrolu nekoliko pinova (6 ukupno). Jer zbog jednostavnog interfejsa, hardver programer koji se zahteva zbog konekcije kompjutera na IPS interfejs je veoma pravolinijski (jeftin!), takodje.

crveni niz ukazuje na lokaciju Pin 1!

Setite se kako identifikujememo pin1 na IC? Pa, konektori takodje trebaju polarizaciju, tako da ne prebacujemo orijentaciju konektora i ostalo przenje. Nazalost nacin na koji konektori su nabrojani je suprotan od onog kod IC. Na slici ISP konektora, videcete crveni niz koji ukazuje na pin 1. IC broji uporedno jednu stranu. Konektori sa druge strane, povecavaju broj pinova, napred i nazad, dok radite na samom konektoru.

Niz programiranja izgleda nesto ovako:

  1. postoji besplatan C kompajler nazvan AVR-GCC. Korisnici pisu kod u C, a onda kompajliraju taj kod u HEX fajl.

  2. AVR-GCC moze biti instaliran na Windows platformu pomocu jednostavnog WinAVR programa instaliranja

  3. Korisnici dolaze do HEX koda na AVR pomocu ISP pina

  4. I serijski port programeri i paralelni port programeri dizajnirani su za konekciju kompjutera na AVR ISP pin

  5. kompjuter pokrece komandu liniju programa da bi napravio transfer HEX fajla sa kompjutera, na serijski ili paralelni port, i izvan AVR ISP pina

  6. Mikro pokrece masinski kod (*.HEX files) jednom kada je pokrenut ili ima napajanje

Šta je to C kompajler? To je program koji postavlja programe pisane u C jeziku i stavlja autput HEX fajla. Mi više volimo da programiramo u C jer je lakše za nas nego neki drugi i više je fleksibilan od BASIC.

Šta je HEX fajl ? To je fajl koji sadrži različite hexidecimal karaktere. Ti kodovi zvani hex 'kodovi' predstavljaju mašinske industrijske instrukcije koje ATmega328 razume. Taj fajl je ono što se šalje programerima, a programeri onda pune te mašine instrukcijama na ATmega328.

Pre nego što počnemo potpuno da ludujemo, prebacite i instalirajte WinAVR na kompjuter na kome ćete raditi na razvijanju vašeg koda. Ako ovaj link zastari, preko google pretrage doći ćete pravo do njega. Windows intaler bi trebalo da bude potpuno pravolinijski - i da prati sve instrukcije. WinAVR sadrži verziju GCC kompajlera i različite druge alate uključujući avrdude i Programmer's Notepad. avrdude je jednostavna komanda linija programa koja ima HEX fajl, a onda ga šalje serijalima ili paralelnim portovima u svrhu programiranja kod Atmel mikrokontrolora.

Ako se osvrnemo na sve na listi, naići ćete na primer 'Hello World' HEX fajla koji će dokazati da sve radi kako treba kod vašeg mikro. Sa bilo kojom tablom mikro kontrolora, prvi trik je doći do LED koji blica. To je 'Hello World' zaštićenih sistema. Pogodite šta to blink_1MHz.hex radi?

Sa ovim blink hex fajlom u ruci, morate da uđete u samu srž mikro. Trebalo bi da se tada konektujete na AVR-PG1 (ili na AVR-PG2) zbog ATmega328. Najlakši način da se to uradi sa 9 žica koje idu pravo iz vaše radne površine pa sve do 10-pin konektora na ISP konektoru za AVR-PG1/PG2.

Jamming se povezuje sa ISP konektorom, što nije dobro dugoročno rešenje, ali zbog toga da bi LED počeo da treperi, ja ću to uraditi. Jedan ogoljeni kraj se ubacuje na kraju crnog programskog konektora, drugi kraj je ubacuje na radnu površinu.

AVR-PG2 paralelni programerski sistem za ATmega328. Takođe sam se povezao sa 0.1uF caps. Ove duplirane navlake nalaze se blizu VCC i GND pinova na ATmega328 da se potpomogne smanjenje buke na IC. Možda smatrate da imate pravolinijski DC 5V ali ne zapravo - ove 0.1uF navlake pomažu da se smanji buka na 5V linijama. Da, ATmega328 će verovatno raditi bez njih, ali ih je dobro instalirati.

AVR ISP Zabeleška: Ne morate u potpunosti da povežete 4 GND pinove. Možete da povežete samo jedan na GND pinove za ISP konnektor.

Takođe nam je potrebna LED zarad kontrole. To može biti povezano na bilo koju GPIO pin. PC0 izgleda kao dobra stvar.

Rezistor/LED red nije od važnosti - samo zapamtite (iz Tutorial 1) da morate imati rezistor! GPIO pin nije u stvarnosti važan. blink_1MHz.hex će privezati sve pinove na sve porptove tako da onda možete da povežete rezistor na bilo koju pin. Sve što više radite sa perofernim hardverima, tako sve više određujete neke pin za alternativnu upotrebu (kao što je TX i RX pinovi za serijsku komunikaciju).

Približavate se! Vreme je za programiranje čipa!

Kada jednom instalirate WinAVR trebalo bi da imate nekoliko novih ikonica na ekranu. Programmers Notepad je dobar editor kodova i signalizer.

Šta je to kodski editor/signalizer? Kada programirate, potreban vam je tekst editor na vašem kompjuteru tako da možete da napravite (tipski) kod. Jednom kada kreirate taj “kod” na vašem kompjuteru (unutar editora koda) prebacićete taj kod na kompajler (kliknućete na dugme koje pokreće kompajler pomoću C fajla kojega ste napravili), a onda će kompajler da napravi HEX fajl (sa pretpostavkom da nema nikakvih problema ili tipova sa vašim kodom). Signalizer? Kada keirate kod, lepo je ako imate različite delove vašeg programskog kolorita kodiranog, tako da možete da saopštite uobičajene stvari za for( ) i #define. Ovo signaliziranje vam mnogo pomaže pri programiranju.

Koristite bilo koji alat za tekst koji želite. Notepad će raditi, ali možda mestimično. Takođe mi se sviđaJFE iz mojihPIC dana. Both ima 'tools' opciju koja je sjajna, ali JFE je bolje rešenje jer on nabrojava C funkcije koje možete dva puta da kliknete i da vršite navigaciju. Ako postoji način da nešto slično uradite sa Programmer Notepad 2, molim vas obavestite me! Jer Programmers Notepad v2 (aka PN2) dolazi sa WinAVR instalacijom, pa onda koristite je!

AVR-GCC je veoma sjajan, i jak, komplaksan, ali u isto vreme veoma težak za korišćenje. Naviknut sam na orebacivanje *.c fajla na PIC kompajler (CC5x) i vraćanje HEX fajla nazad. Nema frke, nema gužve. Verovali vi meni, ili ne napor da se povrati AVR-GCC i da se pokrene je vredan toga. AVR-GCC je veoma dobar kompajler, i besplatan je. Uključio sam Makefileid i blink_1MHz.c fajl u blink_1MHz.zip da bih vas pokrenuo. Ja nisam ni u kom slučaju Linux ili ta vrsta osobe. Sve što bi trebalo da znate je da kada ukucate 'make' ama komand prompt, kompajler će tražiti fajl pod nazivom 'Makefile' (nema produžetaka fajla!) i takođe ćete ga koristi da usmerite na koji način će se kompajlirati vaš C fajl.

Ovo su samo dva fajla koja su vam neophodna da bi ste uspeli da kompajlirate. Otvorite blink_1MHz.c u programmer notepad i onda kliknite na Tools->Make All. Ovo je isto kao da ukucate 'make all' sa command prompt iz bilo kog direktorijuma na kome ste sačuvali ova dva fajla. Na primer:

C:\Code\Blink>make all

takođe bi trebalo da kompajlira vaš fajl. Samo je malo lakše to uraditi preko Programmer Notepad interfejsa pre nego lelujati se napred - nazada ka Command Prompt window. Jednom kada ste uspešno kompajlirali C fajl u HEX fajl, trebalo bi da izvadite ovaj hex fajl iz AVR. Vreme je da nabavite napajanje za vaš sistem! Jeftini AVR programeri zahtevaju cilj (to je vaša radna površina) da bi ste obezbedili snagu programeru (to je AVR-PG1 ili PG2). Napunite napajanjem vašu radnu površinu - morate da vidite da se lampica za LED uključila. Od sada pa na dalje ja ću pretpostaviti da koristite AVR-PG2 paralel port programer.

Postoje samo dve tačke kod makefile o kojima treba da brinete. Te dve tačke se nalaze ispod sekcije o programerima. Taj makefile je ogroman, ali prebacite se na Programming Options (avrdude) sekciju. Pa sada prebacite '#' ispred linije koju želite da iskomentarišete.

Ako koristite AVR-PG1 (serial port programer) onda prepravke ovako radite:

#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = ponyser

# com1 = serial port. Use lpt1 to connect to parallel port.
#AVRDUDE_PORT = lpt1
AVRDUDE_PORT = COM1

Ako koristite AVR-PG2 (parallel port programmer) onda prepravke ovako radite:

AVRDUDE_PROGRAMMER = stk200
#AVRDUDE_PROGRAMMER = ponyser

# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = lpt1
#AVRDUDE_PORT = COM1

Naravno da broj porta zavisi od vašeg posebnog kompjutera, ali jednom kada to pokrenete, bićete zauvek sigurni. Ako pretpostavimo da ste uredili i sačuvali vaš makefile, vratite se na PN2. Kada priključite napajanje na vašu radnu površinu, kliknite Tools-&sgt;Program. To će poslati komandu 'make program' na komandnu liniju. Ako sve pravilno podesite, onda ćete pravilno preuzeti blink_1MHz.hex na vaš ciljni ATmega328 i vaš LED bi trebalo da treperi.

Ako dođe do greške :

can't open device "giveio"

Onda pročitejte ovu stranicu U osnovi bi trebalo da kopirate giveio.sys file from C:\WinAVR/bin na C:\Windows direktorijum, onda ukucajte install_giveio.bat na komandnoj liniji.

Tipični problemi:

Ako još uvek niste u stanju da programirate AVR - ovde 99% korisnika koji su tu prvi put završe. Iskopajte problem i rešite ga.

Da li su ISP konekcije dobre? Rano je da nabavite ISP konektor. Potrebno vam je mnogo gore navadenih fotografija.

Postoji li negde neki nedostatak? Izvucite multimetar i proverite da li imate 5V iza isporučenog VCC i GND pinova na ATmega328. Da li ove žice idu u ISP konektor koji ima dobru, solidnu konekciju?

Da li imate vaš ATmega328 koji je konektovan u potpunosti i ima uzemljenje?

Da li vaš 5V snadbeva spoljašnji 5V?

Da li imate ispravni COM port ili LPT port koji je označen u vašem makefile?

Postoji mnogo stvari koje bi trebalo proveriti. To je teško! Ali jednom kada stvari dobro postavite, i ako LED diode svetle - onda je osećaj divan!

Ok - pretopostaviću da ste savladali pravilno kod koji je prebačen na AVR i LED dioda svetli pravilno. Čestitamo! Sada ste na pravom putu da tek zaronite u stavrni svet mučenja! Jednom kada pokrenete stvari koje zaista funkcionišu, teško je na tome se zaustaviti! GPS, datalogging, RF, PCB izgled - sve ovo je samo nekoliko koraka udaljeno.

Sve delove ovog predavanja možete dobiti ovde.


Published (Last edited): 25-02-2013 , source: http://www.sparkfun.com/tutorials/93