Mikrokontroleri - programiranje

poruka: 46
|
čitano: 43.200
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Mikrokontroleri su integrirani krugovi koji imaju sve što im je potrebno da budu računala: memoriju, procesor, ulaze i izlaze. 

http://en.wikipedia.org/wiki/Microcontroller

 

Programi se na njih spremaju u ROM memoriju najčešče Flash. Program se na našem računalu kompajlira a zatim se pomoču programatora prebaci na mikrokontroler. Programator možete izraditi sami pomoču žica i nekoliko otpornika koristeči serijski ili paralelni port računala. Treba napomenuti da ti programatori neće raditi na win 7, pa ako ih želite koristiti treba vam XP ili Linux. Najbolje je investirati nekoliko dolara i kupiti USB programator ili ga izraditi (ali to nije toliko jednostavno).

 

 

Najpopularniji proizvođaći kontrolera za hobby korisnike su Atmel i Microchip.  Ostali: http://en.wikipedia.org/wiki/List_of_common_microcontrollers

 

Atmelovi su najpopularniji među ljudima koji ih koriste za hobi projekte ponajviše zbog besplatnog kompajlera (avr-gcc) i velike baze korisnika. 

http://www.atmel.com/products/microcontrollers/default.aspx

 

Microchip je popularniji kod profesionalnih korisnika, kao prednisti se često navodi niža cjena.

http://www.microchip.com/pagehandler/en-us/products/picmicrocontrollers

 

Za složenije sisteme koriste sw kontroleri s ARM procesorima, npr. NXP Semiconductors, ST, Texas Instruments...

 

Ova tema je otvorena da bi se potaknulo ljude da pišu o svojim projektima, a da početnici (poput mene) mogu postaviti pitanja. 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put ned 22.12.2013 14:49 (ROFLOLMAO).
Moj PC  
9 0 hvala 8
12 godina
neaktivan
offline
Mikrokontroleri - programiranje

Osobno koristim Arduino (Uno/Nano) za MIDI kontroler. Najbolji komad hardvera kojeg sam ikad kupio!

http://www.bug.hr/forum/topic/samogradnja-opcenito/opendeck-midi-kontroler/144970.aspx

 

Ako će ikom trebat pomoć oko programiranja za Arduino nek slobodno posta.

 
0 0 hvala 1
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Napisat ću vam mali uvod u set up za programiranje Atmelovih uC-a.  Znači prvo što nam treba je računalo. Na njega je potrebno instalirati programe za rad s Atmelovim uC-ovima.

 

Windows 

Atmel Studio - službeni Atmelov program za pisanje koda, debugging, programiranje i sl.

WinAVR - alternativa za Atmel Studio, također korist avr-gcc

AvrDude - program koj dobivate uz WinAvr, koristit ćemo ga za programiranje uC-a

PonyProg - može poslužiti za programiranje kroz serijski / paralelni port (samo za Win XP

 

Ubuntu 

-nadam se da je ovo sve potrebno, nisam siguran što sve ja imam instalirano:

 

sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude

 

AvrDude - ista funkcija

AVR Eclipse - IDE za Javu, uz dodatak može i C za naše uC-ove

-uput za instalaciju dodatka: http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download

 

=========================================================================

 

Programatori se koriste da bi se naš kod prebacio na uC. Ako ih želite izraditi sami možete za serijski ili paralelni port računala. Nedostaci takvih programatora su nemogučnost korištenja na novijim windowsima i nemogučnost programiranja ako kontroler radi na velikoj brzini. 

 

Primjer za izradu je stk200:

isproban i radi isproban i radi
 

USB programatori su teži za izradu jer u sebi sadrže uC koji je potrebno isprogramirati. Ako ih želite izraditi najjednostavniji je USBasp: http://www.fischl.de/usbasp/

USBasp možete kupit s ebay-a za nekoliko dolara. Ako želite naprednije možete kupiti Atmelove programatore poput AVR Dragon.

Kao programatori mogu poslužiti i već gotove pločice koje možda imate poput Arduino (http://arduino.cc/en/Tutorial/ArduinoISP) ili Bus Pirate (kojeg vjerojatno nemate ali svejedno: http://dangerousprototypes.com/docs/Bus_Pirate_AVR_Programming)

 

Za sve uC-ove moguće je nači datasheat skup podataka o chipu. Na njima je označeno koji izvod ima koju ulogu.

Za programiranje nam trebaju:

GND -masa, minus, uzemljenje kako god to nazivate

VCC - pozitivan napon napajanja, ovisi o uC-u (npr. od 2.7V do 5.5V)

RESET ili ~RESET -radi reset kontrolera i stavlja ga u stanje programiranja

SCK - impulsi rada 

MOSI - izlaz programatora, ulaz uC-a 

MISO - izlaz programatora, izlaz uC-a

 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put sri 10.7.2013 18:56 (ROFLOLMAO).
Moj PC  
3 0 hvala 2
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Sada ću opisati ISP (programiranje u strujnom krugu) i kako početi raditi s njime. 

Za ovo nam treba programator, pločaica na koju ga možemo spojiti i mikrokontroler.  

Kao pločicu najjednostavnije je koristiti običnu eksperimentalnu pločicu (aka. breadboard).

Ja ću koristiti Atmega168. Možete koristiti Atmega88 (jeftinij uC od Atmega168, duplo manje flash memorije), Atmega324,..., izbor je velik.

 

Sve što trebate znati za m168 http://www.atmel.com/Images/doc2545.pdf , za ostale mikrokontrolere .pdf-ove potražite na Atmelovoj stranici. 

Preporučam vam da si isprintate ili prepišete raspored izvoda za svoj uC. 

 

 

Ovo je shema koju čemo koristiti.

Za izvor napajanja ja ću koristiti bateriju i regulator napona (napajanje je obavezno). Možete koristiti i napajanje iz USB-a.  AKO IMATE PROGRAMATOR S SVOJIM IZVOROM NAPAJANJA NEMOJTE SPAJATI JOŠ JEDNO NAPAJANJE.

Programator ću spojiti na pločicu i napraviti ćemo test da vidimo jeli sve u redu. Ako imate USB programator na stranici proizvođaća naći čete drivere. Bez njih programator možda neće raditi.  

 

Pokrenite command prompt / terminal.  Napišite avrdude i dobit čete sve njegove opcije. 

-c  -izaberemo programator

-p  -izaberemo uC

 

 

Ako želite primjere napišite npr. -c dfkjdfogsdjgol i dobit ćete popis svih programatora, isto vrijedi i za -p. Avrdude  će prepoznati kontroler ako napišete -p atmega168 ali češće se koristi samo m168. 

Kod Ubuntu napišite sudo prije avrdude.

 

Ubuntu:

sudo avrdude -c stk200 -p m168

 

Windows:

avrdude -c stk200 -p m168 

 

 

Ako sve prođe dobro dobit čete prozor kao na slici.

 

 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Moj PC  
3 0 hvala 1
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Sad krećemo s prvim programom. 

 

Na kontroleru imate dosta izvoda označenih s PA0-7, PB0-7, PC0-7, PD0-7....

Ti izvodi mogu služiti kao ulazi i izlaz. (više o tomu kasnije)

 

RESETu sam već objasnio funkciju. Taj izvod nećete moči koristiti u druge svrhe. (osim ako ne podesite fuse bit, ali nemojte to raditi xD)

 

SCK, MOSI i MISO možete koristiti kao ulaze i izlaze, ako čete to raditi odspojite programator.

 

AVCC i AGND (ili samo GND) -služe kao izvor napajanja kod digitalno-analogne pretvorbe (tad se spajaju preko niskopropusnog filtra). Mi ih možemo (i moramo) kratko spojiti VCC na AVCC i AGND na GND.

 

=========================================================================================

Prvo ću napisati tutorijal za Ubuntu i AVR Eclipse.

Nadam se da ste instalirali sve iz prethodnih koraka i uspješno izvršili test AvrDude aplikacije.

Otvorite terminal i upišite:

sudo eclipse

Odaberite mapu u koju želite spremati projekte.

 

Zatvorite welcome screen pa idemo kreirati prvi projekt: File>New>C Project

Izaberite:

 

 

 Next.

Select All pa Next pa Finish.

 

Sad idemo podesiti projekt.

Project>Properties

Otvorite AVR i izaberite AVRDude

Sad idemo izabrati programatora. U kartici Programmer kliknemo na New...

Ovo vam sad nebi trebalo predstavljati problem, ovo su opcije za stk200

 

 

Spremite i izaberite taj programator. 

Spojite programator i napajanje na uC. Sad idemo na Target Hardwer.

Kliknite na Load from MCU i ako je sve prošlo kako spada pojavit će se vaš uC. Pod MCU clock f napišite frekvenciju koju ima vaš uC. Moj je tek došao iz trgovine, a u .pdf piše da dolaze podešeni na 1 MHz, pa sam ostavio opciju na 1000000.

 

 Sad se vraćamo na AVRDude i podešavamo ostale kartice.

Flash/EEPROM

-Flash : from build

-Eeprom: do not upload

 

Fuses i Lockbits nek budu na do not set !!!!

 

S ljeve strane otvorite C/C++ Build > Settings 

U prvoj kartici vam treba biti uključeno generiranje .hex za Flash, extended listing i avrdude, a ostalo isključeno.

 

Projekt je podešen.

Idemo kreirati prvu datoteku.

File>New>Source file

Ime nek je main.c

 

Kopirajte u njega:

 

// uC tutorijal

 

#include <avr/io.h>

 

 

int main(void)

{

 DDRB = 0x01;

 PORTB = 0x01;

 

 while(1)

 {}

 

}

 

 

Ovaj program postavlja PB0 u stanje 1, tj. na vrijednost +VCC. 

OBAVEZNO SPREMITE PROGRAM. 

Project> Build All

 

Ako se događaju greške ručno ih izbrišite (desni klik Delete) i pokušajte ponovno. Ako sve prođe kako treba program će se kompajlirati i spremiti na uC.

 

Ako želite možete i ručno prebaciti .hex datoteku:

AVR>Upload project to target device

 

Možete spojiti LED diodu da biste provjerili radi li program ili koristite voltmetar. 

 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put čet 25.7.2013 18:11 (ROFLOLMAO).
Moj PC  
3 0 hvala 1
11 godina
offline
Mikrokontroleri - programiranje

Zbog čega startaš programator i eclipse sa "sudo"?

 
1 0 hvala 0
13 godina
neaktivan
offline
Re: Mikrokontroleri - programiranje
Djuro von Prekoplotovich kaže...

Zbog čega startaš programator i eclipse sa "sudo"?

Trebaš biti korisnik s privilegijama da bi mogao koristiti paralelni port ili usb zajedno s AVRDude. 

Eclipse koristi AVRDude pa i nju tako pokrećem.

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Sad sljedi dio za WinAVR. Pretpostavit ću da vam je test programatora bio uspješno obavljen. 

 

Napravite mapu u koju će se spremati datoteke. 

Iz start izbornika otvorite Svi programi >WinAVR > MFile [WinAVR]

Makefile je datoteka koja sadrži podatke za kompajliranje i programiranje koda, a MFile nam daje template za tu datoteku i omogućuje lakše uređivanje. 

U izborniku Makefile > MCU type izaberite svoj uC.

Makefile > Programmer izaberite programator. Ako se ne nalazi u izborniku morat čete ga ručno upisati. 

U izborniku Makefile stavite kvačicu ispred Enable Editing of Makefile.

Odaberite neki programator iz izbornika pa će vam biti žuto označeni redak pa napišite ime svog programatora npr.: 

AVRDUDE_PROGRAMMER = usbasp

Skroz gore odma nakon imena mikrokontrolera se nalazi F_CPU. Tu napišite frekvenciju na kojoj vaš uC radi npr. :
F_CPU = 1000000
Sad spremite datoteku u vašu mapu i gotovi ste s MFile pa ga možete zatvoriti. 
Iz start izbornika otvorite Svi programi >WinAVR > Programmers Notepad [WinAVR].  To je program u kojem čemo pisati kod za naš uC.
Iz padajučih izbornika možete izabrati C/C++ pa čete imati slova obojena za taj jezik. 
Kopirajte ovaj program u prozor:
// uC tutorial
#include <avr/io.h>
int main (void)
{
DDRB = 0x01;
PORTB= 0x01;
 while(1)
 {}
}
Za kompajliranje odite na Tools > [WinAVR] Make All
Izaberite mapu (ista u kojoj je i makefile) i ime (main.c).
Za prebacivanje programa na uC idite na Tools > [WinAVR] Program
Ako je sve prošlo u redu PB0 će biti na naponu VCC. 
To možete isprobati voltmetrom ili LED diodom. 
 
Za Windowse postoji i službeni Atmelov program Atmel Studio. On nam nudi neke prednosti ukoliko imamo i službene Atmelove programatore.
ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put pet 12.7.2013 21:27 (ROFLOLMAO).
Moj PC  
3 0 hvala 1
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Ovako vam otprilike izgleda izlaz mikrokontrolera: 

Sklopke su zapravo MOSFET tranzistori (jedan N kanalni, drugi P kanalni), ako je riječ o CMOS tehnici izrade. Tranzistori su uvjek u suprotnom stanju, jedan vodi drugi ne. 

Kada je izlaz spojen na GND smatramo da je u stanju 0, a kada je spojen na VCC smatramo da je u stanju 1. 

Mikrokontroleri nemogu davati velike struje na izlazu (najviše ~20 mA) pa ako mislite na njih spajati trošila velike snage stavite tranzistor, optocoupler, možda relej... 

 

To nam daje mogučnost da LED diodu (ili drugi uređaj npr 7-segmentni prikaz) na 3 načina:

 LJEVI

-između izlaza i GND

-naša LED dioda će svijetiti kada je izlaz u stanju 1

 

SREDNJI

-između izlaza i VCC

-naša LED dioda svijetli kad je izlaz u stanju 1

 

DESNI

-između 2 izlaza

-LED dioda svijetli kad je izlaz na katodi u stanju 0, a na anodi u stanju 1

 

=====================================================================

 

Objašnjenje koda koji smo koristili u prvom programu. Ako znate nešto o C-u nebi smijeli imati problema s razumjevanjem {#}

 

// -znakovi za jednoredni komentar u programu

/*   -drugi naćin za pisanje komentara. Može biti više redova.   */

 

#include -predprocesorska naredba za uključenje header datoteke u program

#include<avr/io.h> -uključenje header datoteke avr/io.h

 

avr/io.h je header datoteka koja sadrži kod za korištenje ulaza i izlaza na našem mikrokontroleru. Kasnije čemo koristiti još neke. 

 

int main (void)

{


}

-main je glavna funkcija programa i program počinje s njom

-zagrade { i } označuju blok naredbi unutar te funkcije

 

DDRB = 0x01;

-DDRA, DDRB, DDRC, DDRD - služe za određivanje koji izvodi će biti ulazi, a koji ulazi

DDRA je za PORTA (PA0-7), DDRB za PORTB (PB0-7)....

0x01 je 8 bitni broj u heksadecimalnom zapisu. U binarnom bi bio 0b00000001

Bilo bi dobro da znate pretvarati brojeve iz binarnog sustava u heksadecimalni i obratno jer će vam to trebati ako želite programirati uC-e, a stvarno je jednostavno.

Ovdje 0 označuje ulaz, a 1 izlaz.

Bitovi ideju redom 76543210 što znači:

DDRA = 0b00000001;  -PA0 je izlaz, PA1-7 su ulazi

DDRC = 0b11110000;  -PC0-3 su ulazi, a PC4-7 su izlazi

 

;  -točka-zarez označuje kraj naredbe. Nemojte iz zaboravljati jer je to najčešča greška u programiranju. 

 

PORTB = 0x01; 

-PORTA, PORTB, PORTC -kod izlaza nam služe za određivanje stanja

-izlaz kojeg ovom naredbom postavimo u 0 biti će u stanju 0 (GND), a kojeg postavimo na 1 biti će u stanju 1 (VCC)

-slično kao i kod DDRA-D, PORTA = 0b00001111 - PA0-3 su u stanju 1, a PA4-7 u 0 (pod uvjetom da su svi izlazi)

 

-znači:

DDRB = 0x01;  -postavlja  PB0 u izlaz, a PB1-7 u ulaze

PORTB = 0x01; -postavlja PB0 u stanje 1

 

 

while (1)

{}

-beskonačna petlja

- (1) -petlja će se ponavljati sve dok je u ovim zagradama 1 (to će uvjek biti)

-{} - blok naredbi koje se ponavljaju, u ovom slučaju ništa

 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put pet 12.7.2013 23:27 (ROFLOLMAO).
Moj PC  
2 0 hvala 2
11 godina
offline
Re: Mikrokontroleri - programiranje
ROFLOLMAO kaže...
Djuro von Prekoplotovich kaže...

Zbog čega startaš programator i eclipse sa "sudo"?

Trebaš biti korisnik s privilegijama da bi mogao koristiti paralelni port ili usb zajedno s AVRDude. 

Eclipse koristi AVRDude pa i nju tako pokrećem.

 

Pa, zašto onda ne staviš svog korisnika u lp grupu (ili koja već odrađuje pristup na lpt)?

Pošto mi baš nije jasno što radiš preko USB-a, no znajući kako se odrađuje pristup na te portove, tada ćeš morati dodati u odgovarajuću grupu dodati korinika pod kojim radiš.

 

U najgorem slučaju (ako je nešto skršeno) sa sudo chmod ćeš morati korisniku dati privilegije za čitanje/pisanje određene fajle.

11 godina
offline
Re: Mikrokontroleri - programiranje
ROFLOLMAO kaže...

 

Programi se na njih spremaju u ROM memoriju najčešče Flash.

 

 

Atmelovi () su najpopularniji među ljudima koji ih koriste za hobi projekte ponajviše zbog besplatnok kompajlera (avr-gcc) i velike baze korisnika. 

http://www.atmel.com/products/microcontrollers/default.aspx

 

Microchip je popularniji kod profesionalnih korisnika, kao prednisti se često navodi niža cjena.

http://www.microchip.com/pagehandler/en-us/products/picmicrocontrollers

 

Par komentara.

 

Narodski i jednostavno rečeno - programi se spremaju u programsku memoriju (u dokumentaciji mikrokonrolera i kompajlera označena sa PROGRAM), a podaci u podatkovnu (u dokumentaciji DATA).

Stvar je u tome što je na određenim arhitekturama moguće za vrijeme rada pisati u memoriju koju si ti nazvao "ROM".

Čak i AVR ima primitivan oblik toga na ATmega modelima.

S druge strane, na nekim ARM-ovima ne postoji EEPROM, nego se taj posao odrađuje pisanjem u flash.

Isto tako, na određenim arhitekturama moguće je učitati software u RAM.

Da skratim priču, sa stajališta programera, jedino što je bitno u cijeloj priči je znati je li u memoriji instrukcija (software) ili je podatak (varijabla).

 

Microchipovi mikrokontroleri su popularni u sjevernoj Americi. Pojavom Arduina se tamo tek malo više popularizirao AVR.

AVR je raširen u Europi, uostalom tu je i nastala ta arhitektura (Norveška).

 

Za razvoj na PIC-evima također postoji besplatan kompajler (SDCC), kao i besplatan GUI (Microchip).

GUI je baziran na Eclipse-u.

11 godina
offline
Mikrokontroleri - programiranje

Ako niste mazohist i nemate dovoljno predznanja oko toga što su mikrokontroleri, tada otiđite i kupite ili kopirajte Arduino. To je najjednostavnije za početnike. Dobiti ćete relativno dobar komad hardvera, sa gomilom mogućnosti dodavanja dodatnih opcija (shield pločice). GUI je također navodno razuman. Nisam koristio, no znam ljude koji su počeli s time i bilo im je OK. Koriste ga i ljudi kojima profesija nije vezana za elektroniku.

http://en.wikipedia.org/wiki/Arduino

Sve ostalo iz kućne radinosti lako može postati izvor frustracija i gubitak vremena, jer će malo kada nešto proraditi od prve, a tada nećete biti sigurni je li kriv hardver ili vaš softver. Da, čovjek se razveseli kada nešto proradi, ali postoji i druga strana. Naime, počeo sam na taj način.

 

Ova priča sa Eclipseom je super-duper na papiru, no u stvarnosti postoji jedan sitni problem. Pošto početnici uglavnom nemaju mjernu opremu (multimetar) ili osciloskop, tada će bez dodatne pomoći zaglaviti na prvom većem problemu koji naiđe.
Tu u pomoć može uskočiti simulator, no postoji caka.
Jedini simulator koji iole nečemu vrijedi a besplatan je, dolazi uz Atmel AVR studio. Tako da rad s Eclipse-om dolazi u obzir ako dnevno pišete gomilu koda i trebate sve fičre tipa autocomplete, menadžment projekata i slično. Tako sam radio jedno vrijeme - software sam radio u Eclipse-u, a testirao u AVR studiu.
Za apsolutne početnike je to čisti gubitak vremena, jer će im treba par dana samo da se snađu u opcijama i shvate što je to "workspace", što "project", a što je pak "perspective".
Sretno s time.


Atmel AVR studio podosta je zbagiran u bilo kojoj verziji, ali kao što već rekoh, jedini ima relativno dobar i besplatan simulator.
Na Windowsima ima kod instaliranja par problema, no ako ne koristite Visual Studio 2005, tada ne bi trebali naići na njih.
Isto tako i WinAVR i AVR studio nakon instalacije skrše i zatuku podršku za Jungo WinDriver (ako ga imate instaliranog tada pretpostavljam da i znate čemu služi).
Na Linuxu verzija 4.18 AVR studia navodno radi pod Wine-om, no u životu imam pametnijeg posla od testiranja što sve crkava ili ne radi kako treba na nekakvom tamo emulatoru koji ne koristim.

Verzije AVR studia 5 i 6 ne bih preporučio početnicima, naročito ako su kupili nekakav hardware tipa programator ili razvojna pločica. Tu još uvijek ima gadnih problema i bugova čak i u radu sa Atmelovim hardverom.

Oni koji se ipak odluče na to neka počnu religiozno pratiti ovo:
http://asf.atmel.com/bugzilla/

 
1 0 hvala 1
11 godina
offline
Mikrokontroleri - programiranje

Nastavak...

 

Download starijih verzija AVR studia je ovdje:
http://www.atmel.com/tools/STUDIOARCHIVE.aspx

Na verziji 4.19 namjerno su otežali rad sa WinAVR, tako da je najbolje koristiti onu prije nje (SP2 ili SP3).

Druga postaja na križnom putu pisanja softvera za AVR mikrokontrolere je ova:
http://www.avrfreaks.net/
Tu ćete naći odgovore na većinu pitanja. Od toga kako se pali i gasi LED (Hello world!) do toga kako riješiti bizaran problem sa zbagiranim CAN-bus kontrolerom na AT90CAN čipovima.

Za one koji ne vole dr*anje po konzolnim alatima, ako koristite Windows XP, pogledajte podržava li PonyProg programator s kojim planirate raditi.
http://www.lancos.com/prog.html
Ako koristite 64-bitni Windows OS (windows 7 ili 8), morati ćete pronaći zaobilazno (postoji, ali nisam testirao) ili neko drugo rješenje.

Što se tiče početnog hardvera za razvoj i ako imate nešto novčanica u džepu, evo par mjesta gdje ih možete ostaviti.

Razvojna ploča:
http://store.atmel.com/PartDetail.aspx?q=p:10500070;c:100114#tc:description
A to je ineče ovo:
http://www.atmel.com/tools/STK500.aspx

Relativno jeftin programator:
http://store.atmel.com/PartDetail.aspx?q=p:10500054;c:100115#tc:description

Debageri:
http://store.atmel.com/CBC.aspx?q=c:100112

Nešto hardvera ima i ovdje (Srbija):
http://www.mikroe.com/
Malo sam mrdao po tome, hardver je OK, softverska podrška tako-tako.

i ovdje (Bugarska):
https://www.olimex.com/Products/AVR/
Nisam koristio, ali sam od njih uzimao opremu za rad s drugim arhitekturama, OK su.

Na nekim mjestima se vidi kako je dolemljivano ručno, ali stvari rade i ne bunim se.

Prije svake kupovine, gledajte, sumnjajte, ponovo gledajte  i pitajte po forumima.

Inače, kombinacija koju koristim za rad sa AVR-ovima je:
- STK500 + STK501
- JTAGICE-mkII

 
0 0 hvala 2
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

U ovom tutorijalu ću vam pokazati kako možemo koristiti kašnjene u programu. To će nam omogućiti da napravimo popularni početnički program - treptajuču LED diodu.

Shema je i dalje ista. 

 

Za program nam treba:

 

#define F_CPU 1000000UL

#define -je predprocesorsk naredba kojom smo definirali konstantu.

F_CPU -konstanta koja sadrži frekvenciju procesora (u Hz)

1000000 -frekvencija

UL -pošto u 16 bitni broj nemožemo upisati vrijednosti poput miljuna koristimo 32 bitni broj

 

#include <util/delay.h>

util/delay.h je datoteka koja sadrži funkcije za kašnjenje.

Ako nismo definirali F_CPU izbacit će upozorenje i postaviti ga na 1MHz. 

 

_delay_ms (500);

-funkcija iz util/delay.h 

Broj u zagradi označuje broj milisekundi koliko kašnjenje traje.

 

_delay_us (500);

Slićna funkcija jedina je razlika da je vrijeme u mikrosekundama. 

 

 

Gotov program izgleda ovako:

//Treptajuća LEDica na PB0.

 

#include <avr/io.h>

#define F_CPU 1000000UL

#include <util/delay.h>

 

int main(void)

{

 DDRB = 0x01;

 while(1)

 {

 PORTB = 0x01;

 _delay_ms(500);

 PORTB = 0x00;

 _delay_ms(500);

 }

}

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put sub 20.7.2013 13:19 (ROFLOLMAO).
Moj PC  
1 0 hvala 1
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Registri su dio memorije, možemo ih čitati, pisati u većinu i pomoću njih kontroliramo ponašanje mikrokontrolera: izlaze i ulaze, stanja na njima, timere...

U datasheet-u se nalazi detaljni opis njihovih funkcija.

 

Primjer su registri DDRx, PORTx i PINx.

DDRx određuje izlaze i ulaze.

PORTx određuje stanje low (0) ili high (1).

PINx fizički provjerava u kojem su stanju ulazi. (koristi se kod tipki)

 

U tablici piše ime određenog bita. (npr. PINB1, DDB2...)

Ispod imena piše R/W ako imamo mogućnost čitanja i pisanja, ili R ako nemamo mogućnost pisanja u njih.

Ispod toga piše inicijalna (početna) vrijednost.

 

Ovo su 8-bitni registri, ali sigurno čete sresti i 16-bitne. Oni se ponekad podjele na Low (od 0. do 7. bita) i High (od 8. do 15. bita).  

 

U registrima je često da se neki bitovi ni ne koriste. 

 

 

Do sad smo ih podešavali na dva načina:

-binarnim brojem npr.: PORTB = 0b00011001;

-heksadekadskim brojem npr.: DDRC = 0x0a;

Nedostatak tih načina je da nemožemo promijeniti jedan bit bez da diramo druge. 

 

 

======================================

Za druge načine trebamo znati 4 logičke operacije:

Kad ih koristimo na višebitnim brojevima radimo ih bit po bit.

 

Ne (not) -invertira bit:

~1=0

~0=1

 

~1001

=0110

 

I (and) -rezultat je 1 ako su i jedan drugi član 1

0 & 0 =0

0 & 1 =0

1 & 1 =1

 

_1001

&1010

=1000

 

ILI (or) -rezultat je 1 ako je jedan ili drugi član 1

-znak | je W+Alt Gr

0 | 0 =0

0 | 1 =1

1 | 1 =1

 

_1001

| 1010

=1011

 

EKSKLUZIVO ILI (ex or) -rezultat je 1 samo ako je jedan član 1 a drugi 0

0 ^ 0 =0

0 ^ 1 =1

1 ^ 1 =0

 

_1001

^1010

=0011

 

======================================

Zatim imamo 2 operacije za pomak: u desno >> i u ljevo <<.

Operacije jednostavno premjeste određeni broj bitova bit po bit s početka na kraj ili obratno.

 

Malo je teže to objsniti riječima ali jednostavno se može shvatiti iz primjera:

0b00000001 << 0 = 0b00000001

0b00000001 << 2 = 0b00000100

0b10000000 >> 2 = 0b00100000

 

možete koristiti i druge tipove brojeva (znamo da je dekatski 1 binatno jednak 0b00000001):

1 << 3 = 0b00001000

 

Ako želimo pomaknuti cijeli registar možemo kraće zapisati

IME_REGISTRA <<= 2;

umjesto 

IME_REGISTRA = IME_REGISTRA << 2;

======================================

Upotrebe:

najčešće je oblik:

ime_registra = ime_registra  logička_operacija   binarna_maska

 

 

Invertiranje -koristimo ex-ili operaciju

-invertiramo bitove koji su u binarnoj maski jednaki 1, a ostale ne diramo

 

PORTB = PORTB ^ 0b00000001;

-invertiramo nulti bit u registru (znamo da bitovi idu redom 76543210)

 

-to možemo i kraće zapisati:

PORTB ^= 0b00000001;

-potpuno ista naredba samo napisana na pregledniji način

 

 

Postavljanje u 1 -operacija ili

-postavlja bitove koji su u maski jednaki 1 u stanje 1, a ostale ne diramo

 

PORTB = PORTB | 0b01000000;

-postavlja 6 bit u 1

-krači zapis je:

PORTB |= 0b01000000;

 

Postavljanje u 0 -ovdje trebamo dvije operacije I i NE

-postavlja u 0 bitove koji su u maski 1

 

PORTB = PORTB & ~0b00010000;

-kraći zapis je

PORTB &= ~0b00010000;

 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Poruka je uređivana zadnji put čet 1.8.2013 17:27 (ROFLOLMAO).
Moj PC  
2 0 hvala 0
13 godina
neaktivan
offline
Mikrokontroleri - programiranje

Sad nekoliko načina za podešavanje registra koji se češće koriste u praksi. Ako teoriju niste shvatili ovi načini vam sigurno neće biti jasni. 

 

Ako želimo postaviti bit broj 3 u registru, masku (koja je 0b00001000) možemo dobiti na način 1 << 3. 

Pa dobijemo:

IME_REGISTRA |= 1 << 3;

 

za više bitova odjednom npr. 2 i 6 masku možemo dobiti pomoću operacije ILI (or)

(1 << 2) | (1 << 6) = 0b01000100

 

Za postaviti bitove 3 i 0 u 0:

IME_REGISTRA &= ~( (1 << 3) | (1 << 0) ) ; 

 

 

Svi bitovi u registru imaju svoje jedinstveno ime npr. PINB0, PINC4...

Kompajler će prepoznati koji bit predstavlja ime, pa ko napišemo:

1 << PINC1 isto je kao i 1 << 1

 

Npr za invertirati bit CS10 u registru TCCR1B:

TCCR1B ^= 1 << CS10;

 

Niti ne morate koristiti ime bita u tom registru pa se često pomoću imena iz PINx registra podešava PORTx i DDRx:

DDRC |= 1 << PINC2;

PORTB ^= 1 << PINB6;

 

 

=========================================

Postoji i malo jednostavniji i pregledniji način i ja ću ga uglavnom koristiti.

Radi se o macro funkciji _BV() . 

 

Najjednostavnije objašnjeno:

_BV(x) = 1 << x;

 

Primjeri:

Registar DDRB, postavimo bit 3 u jedinicu.

DDRB |= _BV(3);

 

Postavljanje CS10 i CS11 u jedinicu na TCCR1B

TCCR1B |= _BV(CS11) | _BV(CS10);

 

=========================================

Neki registri su namjenjeni da se u njih napiše broj pa je najlakše da se to radi u dekatskom zapisu. 

Primjer je 16-bitni registar OCR1A:

OCR1A = 1500;

 

 

 

ಠ_ಠ Rolling on the floor laughing until someone jump on me a makes me stop rolling on the floor laughing but then I do it again cuz it's awesome
Moj PC  
1 0 hvala 0
10 godina
neaktivan
offline
Mikrokontroleri - programiranje

Dali netko moze pomoci , imam jedan projekt kontrolera VF oscilatora sa DDS VFO-om a mikrokontroler je AT90S8515 imam i asm i hex file za njega ali kad hocu upisati offset frekvenciju (sad je 10,7MHz a zelio bi da je 9,00MHz) a dozvoli ju mijenjati unutar menia i vanjskim tasterima ali kad uredjaj iskljucim nije memoriran taj podatak kako da ostane trajno upisan u memoriji AT90S8515. Ako ima netko ko bi mogao rijesiti moj problem molim za pomoc.

Moze odgovor i na mail: joe9a2qp@gmail.com

 
0 0 hvala 0
12 godina
neaktivan
offline
Mikrokontroleri - programiranje

Pozdrav početnicko pitanje

 

 

Znaci da upucam kod u čip mi treba 2 harware-a. Arduino i ploča na koju mogu ustekat čip i zatim arduino šalje kod gore na tu ploču, tj. njega? Da li sam sta promasio? Da li se moze izbjeci da direktno s računala stavim kod na cip bez arduinija?

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Mikrokontroleri - programiranje
tarantoo kaže...

Pozdrav početnicko pitanje

 

 

Znaci da upucam kod u čip mi treba 2 harware-a. Arduino i ploča na koju mogu ustekat čip i zatim arduino šalje kod gore na tu ploču, tj. njega? Da li sam sta promasio? Da li se moze izbjeci da direktno s računala stavim kod na cip bez arduinija?

Koji mikrokontroler programiraš?

Ako misliš na atmelove koji se nalaze na arudinu (168, 328,2560, itd.),onda sa arduinom imaš sve potrebno za programiranje tih mikrokontrolera. Druga stvar je ako pokušavaš programirati neš poput attiny85, to se isto može sa Arduinom programirat ako ih spojiš na određen način i učitaš određeni kod u Arduino, no može se i sa posebnim programerom (tinyAVR).

 

Za svaki mikrokontroler imaš programer s kojim ga možeš programirati jer se programiranje vrši na ordeđeni način sa povišenim naponom.

--------------------------------------------------------------------------------------------
16 godina
moderator
offline
Re: Mikrokontroleri - programiranje
zerocool12 kaže...
Druga stvar je ako pokušavaš programirati neš poput attiny85, to se isto može sa Arduinom programirat ako ih spojiš na određen način i učitaš određeni kod u Arduino, no može se i sa posebnim programerom (tinyAVR).

Nekako mislim da bi mu ovaj link odgovarao (ako sam ga dobro shvatio, zanim ga kako isprogramirati Atmelov čip bez da ga mora programirati u Arduino ploči), ako ne misli kupovati zasebni programator: http://arduino.cc/en/Tutorial/ArduinoISP

Za eventualni atitiny85 samo treba dodati profile za taj mikrokontroler u Arduino IDE - postupak programiranja pomoću Arduina je isti, koliko sam shvatio.

 

Poruka je uređivana zadnji put uto 9.9.2014 2:17 (mbaksa).
15 godina
neaktivan
offline
Re: Mikrokontroleri - programiranje
mbaksa kaže...
zerocool12 kaže...
Druga stvar je ako pokušavaš programirati neš poput attiny85, to se isto može sa Arduinom programirat ako ih spojiš na određen način i učitaš određeni kod u Arduino, no može se i sa posebnim programerom (tinyAVR).

Nekako mislim da bi mu ovaj link odgovarao (ako sam ga dobro shvatio, zanim ga kako isprogramirati Atmelov čip bez da ga mora programirati u Arduino ploči), ako ne misli kupovati zasebni programator: http://arduino.cc/en/Tutorial/ArduinoISP

Za eventualni atitiny85 samo treba dodati profile za taj mikrokontroler u Arduino IDE - postupak programiranja pomoću Arduina je isti, koliko sam shvatio.

 

Programiranje pomoću arduinija je jednostavno, prvo trebaš spremiti profile za attiny modele u Arduino IDE. Tada na Arduino zapišeš program pod imenom "Arduino ISP", na breadboardu spojiš attiny sa arduniom na određeni način (tu je dobro opisano : http://www.instructables.com/id/Program-an-ATtiny-with-Arduino/ ) , u izborniku odabereš mikrokontroler (attinyXY(using Arduino as ISP)) i programmer staviš "Arduino as ISP", te tada uploadaš program normalno na attiny.

Koja je loša strana ovoga? - Loša strana je da gubiš jedan pin (reset pin) jer je potreban za programiranje, dok ako imaš poseban programator (koji programira pomoću povišenog napona) možeš iskoristit i taj pin.

Tako da za bilo koji projekt da radiš sa arduinom i attiny-em uvijek računaj na 1 I/O pin manje nego je navedeno u specifikacijama. Ja sam se tak zahebo kad sam radio gear counter, hvala Bogu da motor ima 6 brzina :D

--------------------------------------------------------------------------------------------
Poruka je uređivana zadnji put uto 9.9.2014 2:47 (zerocool12).
12 godina
neaktivan
offline
Mikrokontroleri - programiranje

Trebao bi staviti hex program na cip Atmega328p. znaci bez da prvo kupim arduino uno, nikako bez njega jel? jel dolazi do kakve promjene sto se tice slanja koda ako bi uzeo noviji arduino tipa yun, due....

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Mikrokontroleri - programiranje
tarantoo kaže...

Trebao bi staviti hex program na cip Atmega328p. znaci bez da prvo kupim arduino uno, nikako bez njega jel? jel dolazi do kakve promjene sto se tice slanja koda ako bi uzeo noviji arduino tipa yun, due....

Može se programirati sa pocket AVR programerom, ne treba ti isključivo Arduino za to.

 

 

Što se tiće programiranja sa Arduinom, piše da ovo radi samo sa Arduino pločicama koje imaju ATMEGA328 mikrokontroler zači Duemilanove sa 328 čipom bi trebao biti dobar.

--------------------------------------------------------------------------------------------
12 godina
neaktivan
offline
Mikrokontroleri - programiranje

Kako je meni to sve nelogično, ne kuzim zasto nema jednostavno hardwarea koji se spaja na usb port racunala gore na njega pritisne cip i sprzi program. Ne kuzim zasto mora biti posrednik? Uglavnom, hvala na pomoci, sad mi polako sjeda na mjesto neke stvari :)

 

Za sad mislim nabavit arduino i napravim onaj breaking board za przenje cipova i to bi bilo to... vidim po yt tutorialima kojih ima tek šačicu da je to nekako najlakse.

 
0 0 hvala 0
16 godina
moderator
offline
Re: Mikrokontroleri - programiranje

BTW ne znam za što točno ćeš koristiti taj mikrokontroler, odnosno koliko si upoznat s Arduino platformom. Kineski klonovi Arduino Pro Mini ploče mogu se kupiti već i za 2,25 dolara po komadu (nemaju USB pa trebaš kupiti USB programator ili iskoristiti postojeći Arduino s USB-om za programiranje čipa kao što bi to i inače radio), što je jedva nešto skuplje od samih ATmega328 mikrokontrolera (čipova). Drugim riječima, izgradnja svoje verzije Arduina će te koštati skoro isto ili možda i više (ovisno koliko toga želiš staviti uz mikrokontroler i za koju cijenu bi nabavio te komponente) nego da kupiš gotovu Pro Mini pločicu. Pa ako nemaš stvarne potrebe koristiti samo mikrokontroler, razmisli si o Pro Mini pločicama (ili o Nano ako hoćeš da svaka pločica ima svoj USB, odnosno Pro Micro/Leonardo ako pomoću Arduina želiš upravljati mišem/tipkovnicom na kompjuteru).

15 godina
neaktivan
offline
Re: Mikrokontroleri - programiranje
mbaksa kaže...

BTW ne znam za što točno ćeš koristiti taj mikrokontroler, odnosno koliko si upoznat s Arduino platformom. Kineski klonovi Arduino Pro Mini ploče mogu se kupiti već i za 2,25 dolara po komadu (nemaju USB pa trebaš kupiti USB programator ili iskoristiti postojeći Arduino s USB-om za programiranje čipa kao što bi to i inače radio), što je jedva nešto skuplje od samih ATmega328 mikrokontrolera (čipova). Drugim riječima, izgradnja svoje verzije Arduina će te koštati skoro isto ili možda i više (ovisno koliko toga želiš staviti uz mikrokontroler i za koju cijenu bi nabavio te komponente) nego da kupiš gotovu Pro Mini pločicu. Pa ako nemaš stvarne potrebe koristiti samo mikrokontroler, razmisli si o Pro Mini pločicama (ili o Nano ako hoćeš da svaka pločica ima svoj USB, odnosno Pro Micro/Leonardo ako pomoću Arduina želiš upravljati mišem/tipkovnicom na kompjuteru).

Koji mikrokontroler koristi pro mini? Jer kolko sam skužil programirati se može samo ako Arduino ima Atmega328 mikrokontroler. Moj Boarduino je sa kabelom došao nekih 100kn (jer sam kupovao kit, zasebno bi možda došlo i puno manje od toga,najskuplji je PCB i USB kontroler).

--------------------------------------------------------------------------------------------
16 godina
moderator
offline
Re: Mikrokontroleri - programiranje
zerocool12 kaže...
Koji mikrokontroler koristi pro mini? Jer kolko sam skužil programirati se može samo ako Arduino ima Atmega328 mikrokontroler. Moj Boarduino je sa kabelom došao nekih 100kn (jer sam kupovao kit, zasebno bi možda došlo i puno manje od toga,najskuplji je PCB i USB kontroler).

328p (ja imam ovu, ovu koja ima krivu sliku jer izgleda kao ona prva, samo što je plava, i ovu pločicu, te još i 3,3V, ali ju još nisam otpakirao). Može ga se programirati s bilo kojim onim Arduino USB programatorom ako ima DTR/Reset pin (u suprotnom kod programiranja treba držati reset) ako je instaliran Arduino bootloader (jedna ili dvije pločice su mi došle bez bootloadera), a može ga se programirati i preko drugog Arduina. Konkretno, ja sam Pro Minije programirao preko Croduina (a poslije sam dvjema pločicama bez bootloadera preko Croduina snimio bootloader da ih mogu koristiti i s USB programatorima, mada mi se ne sviđa taj delay na početku zbog bootloadera).

 

I ja sam si razmišljao da si slažem svoj Arduino na pločici, ali kad sam vidio koliko su Pro Miniji sitni i koliko košta 328 čip rekoh - nema šanse. Kao što vidiš iz trećeg linka koji sam stavio, Pro Mini s USB programatorom košta 30 kuna. Arduino Nano klon košta 36 kuna. Znači, za tih 100 kuna danas se može dobiti dobiti 2+ Arduina s USB sučeljem ili USB programator i 5 Arduina Pro Mini koje spajaš na programator prema potrebi.

 

Poruka je uređivana zadnji put uto 9.9.2014 14:24 (mbaksa).
12 godina
neaktivan
offline
Mikrokontroleri - programiranje

Sad sam opet zbunjen s tim arduinoPromini procedurom.

 

Koliko sam skuzio trebao bi ArduinoProMini u njega ustekat TDI TTL-232R-3V3 USB - TTL Level Serial Converter Cable i naravno treba onda neka eksperimentalna plocica di se moze ustekat cip s elementima koji bi vec trebali... ?

 

Koji setup bi me najjeftinije došao da mogu staviti program u ATmega328p čip, odštekat ga i zalemit na PCB i nikad više dirat.

 
0 0 hvala 0
16 godina
moderator
offline
Re: Mikrokontroleri - programiranje

Ja sam ti pokušavao objasniti da bi te možda jeftinije došlo, ili barem s manje zajebancije, da ne programiraš ATmega328 čipove pa da njih koristiš u projektima, nego da jednostavno uzmeš Arduino Pro Mini pločicu za "par centi" više i da u projektima koristiš tu pločicu, umjesto zasebnog čipa, zasebnog oscilatora, kondenzatora, otpornika, možda i regulatora napajanja, ledica...

 

Ako inzistiraš na tome da si baš programiraš ATmega328 čipove onda ćeš ili morati kupiti neki USB programator (ne mogu ti reći koji jer to nisam istraživao) ili uzeti neki Arduino s USB sučeljem (recimo Nano). Naravno, uz to ćeš si morati napraviti svoj breakout board za programiranje ATmega328 čipova (ili kupiti neki gotov).

 

Poruka je uređivana zadnji put uto 9.9.2014 13:47 (mbaksa).
12 godina
neaktivan
offline
Mikrokontroleri - programiranje

Aha, da bi umjesto da samostalno koristim cip, koristio umjesto njega taj mini arduino. To mi ne pase jer imam gotov program, sheme itd. Ako bi htio tim putem ici onda bi morao se ponovno upoznavati s arhitekturom, mjenjat program itd...

 

Trazim samo soluciju kako najlakse stavit program gore na taj cip bez da idem u neke nove dimenzije posto je meni sve to apsolutno novo.

 

Hvala na pomoci! Lp

 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice