 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 13, 2010 5:43 pm Naslov sporočila: Mala šola AVR - 2.dan |
|
|
Kako začeti z AVR II.
Drugi dan bo temeljil pred vsem na spoznavanju AVR studia. Tisti, ki bo sodeloval ter AVR Studia še nima instaliranjega ga lahko sname tukaj. Potrebna je edino registracija, sicer je verzija brezplačna. O sami instalaciji ne bi, ker je popolnoma avtomatska. Sam imam poinstaliranega na treh PC-jih, pa ni bilo nikjer problemov. Povsod so sicer Xp-ji. Z ostalimi OP pa nimam izkušenj.
Orodje ob zagonu ponudi pogovorno okno čarovnika. Katerga lahko tudi izklopimo.
Sam menu je klasičen, ter soroden podobnim orodjem:
File Project Build View Tools Debug Window Help
Bližnice si lahko prilagodimo v orodno vrstico. Nekaj je prevzeto vklopljenih.
V nadaljevanju "tečaja" bom stvari "poganjal" iz menuja zaradi lažjega opisa, kje se kaj nahaja. (gumb v orodni vrstici težje opišem, sploh pa je problem, če ga nekdo ne bo imel)
Nadaljevanje sledi... _________________ lp
Silvo
Nazadnje urejal/a Silvo Tor Sep 14, 2010 7:42 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 13, 2010 6:05 pm Naslov sporočila: |
|
|
Vo menuju "Project" izberemo "New project".
Odpre se nam pogovorno okno:
Izberemo Atmel AVR assembler. Določit moramo tudi mapo v katero se bo project shranil. Priporočam, da se kreira ena posebna mapa. V nadaljevanji pa priporočam, da vsak project shranete v svojo mapo. V nadaljevanju določimo še simulator ter mikrokontroler:
Potem zaključino "Finish"
Odpre se nam editor. Pripravleno je za pisanje programa.
Nadaljevanje sledi... _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 13, 2010 6:22 pm Naslov sporočila: |
|
|
Če vam prevzete vrednosti progama ne ustrezajo ji ga lahko prilagotite svojim potrebam. Možne nastavitve si lahko ogledate v izbiri Option menuja Tools.
Moje nastavitve, ki pa seveda niso obvezujoče:
Nadaljevanje sledi... _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 13, 2010 6:57 pm Naslov sporočila: |
|
|
Ok glavne stvari so. Če bo kaj manjkalo, bom dodajal ter razlagal sproti. Sploh, ko bomo prišli do simulatorja.
Najpej okrog programerskega pravopisa. S kakimi črkami pišemo instrukcije načeloma ni pomembno. Prevajalnik razume pisanje z velikimi ali malimi črkami.
Koda: |
;-----------------------------------------
;Mala šola AVR 2.dan
;-----------------------------------------
//to je komentar
; to tudi
.include "tn13def.inc"
.def tmp=r16
.DEF TMP2=r17
.org 0x0
rjmp GlProg
.org 0x13
GlProg:
Zanka:
NOP
rjmp ZANKA |
Prilepljeno kodo prekopirajte v svoj editor. Zgoraj je prikaz tistega kar sem napisal. Nekaj sem pisal z velikimi nekaj z majhnimi črkami. Če stisnemo sedaj gumb Build menuja Build vidimo, da se koda normalo prevede brez napake.
Malo večjo zgago delajo directives preprocesorja. Te morajo biti v programu napisane enako, kot smo jih navedli. Več, ko pridemo do njih.
Debata je odprta za razpravo...... slišimo se lahko tudi na IRC-u. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 13, 2010 8:17 pm Naslov sporočila: |
|
|
Zgornja koda sicer ni smiselna a vseno bom razložil kaj je napisano.
napove zunanjo datoteko. Ukaz poznajo vsi programski jeziki, ki jih poznam. Pa pokukajmo kaj je v tej datoteki. Datoteke najdete v mapi kjer je poinstaliran AVR studio \Atmel\AVR Tools\AvrAssembler2\Appnotes\
Koda: |
; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ SREG = 0x3f
.equ SPL = 0x3d
.equ GIMSK = 0x3b
.equ GIFR = 0x3a
.equ TIMSK0 = 0x39
.equ TIFR0 = 0x38
.equ SPMCSR = 0x37
.equ OCR0A = 0x36
.equ MCUCR = 0x35
.equ MCUSR = 0x34
.equ TCCR0B = 0x33
.equ TCNT0 = 0x32
.equ OSCCAL = 0x31
.equ TCCR0A = 0x2f
.equ DWDR = 0x2e
.equ OCR0B = 0x29
.equ GTCCR = 0x28
.equ CLKPR = 0x26
.equ WDTCR = 0x21
.equ EEAR = 0x1e
.equ EEDR = 0x1d
.equ EECR = 0x1c
.equ PORTB = 0x18
.equ DDRB = 0x17
.equ PINB = 0x16
.equ PCMSK = 0x15
.equ DIDR0 = 0x14
.equ ACSR = 0x08
.equ ADMUX = 0x07
.equ ADCSRA = 0x06
.equ ADCH = 0x05
.equ ADCL = 0x04
.equ ADCSRB = 0x03
|
In kaka je funkcija te datoteke? Prevajalnik išče tekstovne nize ter jih zamenja z numerično vrednostjo. Recimo SREG bo zamenjan 0x3f in tako naprej... ekstrem bi v programu lahko namesto sreg napisal tudi 0x3ff pa se prevajalnik ne bi pritoževal.
Prav tako lahko tvorimo popolnoma svojo datoteko katero bo prevajalnik obravnaval kot svojo. O tem več kasneje. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Sep 14, 2010 5:33 pm Naslov sporočila: |
|
|
Dolžan sem še razlago direktiv-e .org ( Set program origin). Mimogrede, poznajo jo tudi stali assemblerji. Z njo določimo mesto v programskem pomniliku, kjer bomo začeli s kodo.
Vidmimo, da sem napisal
.
Koda: |
org 0x0
rjmp GlProg
.org 0xA
GlPrg:
|
Ok, na lokaciji 0x0 je reset vektor. A zakaj zavraga z glavnem programom začnem na lokaciji 0xA ? Za razlago bo potrebno pogledati datashet s prvega dne. Razlago najdete v poglavju 9 str. 44.
Lokacije so rezervirane. Koristijo jih prekinitve.
Koda: |
0x0000 rjmp RESET ; Reset Handler
0x0001 rjmp EXT_INT0 ; IRQ0 Handler
0x0002 rjmp PCINT0 ; PCINT0 Handler
0x0003 rjmp TIM0_OVF ; Timer0 Overflow Handler
0x0004 rjmp EE_RDY ; EEPROM Ready Handler
0x0005 rjmp ANA_COMP ; Analog Comparator Handler
0x0006 rjmp TIM0_COMPA ; Timer0 CompareA Handler
0x0007 rjmp TIM0_COMPB ; Timer0 CompareB Handler
0x0008 rjmp WATCHDOG ; Watchdog Interrupt Handler
0x0009 rjmp ADC ; ADC Conversion Handler |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Sep 14, 2010 5:46 pm Naslov sporočila: |
|
|
Sedaj bomo napisali svoj prvi program. Za preizkus pa ni potreben programator niti hardver, kajti vse bomo poskusili na simulatorju. Ob enem pa spozali tudi delovanje simulatorja.
Koda: |
;-----------------------------------------
;Mala šola AVR 2.dan
;-----------------------------------------
.include "tn13def.inc" ;napovemo INC datoteko za mikrokontroler katerega bomo pač uporabili
.org 0x0
rjmp GlProg ;reset vektor
.org 0xA ;označimo lokacijo kjer bomo začeli z glavnim programom
GlProg:
sbi DDRB,0 ;določimo pin B0 kot izhod
sbi PORTB,0 ;postavimo pin na visoko stanje
Zanka: ;zadržimo programski števec
nop ;ni operatcije
rjmp ZANKA
|
Program sem napisal čisto enostavno. V nadaljevanju bom pokazal, da z definiranjem makrojev predprevajalnika lahko naredimo kodo precej prijaznejšo ter razumljivo uporabniku. Še beseda o Helpu. Avr studio ima dober help. Pokličete ga s tipko F1. Če s kazalčkom stojite na instrukciji jo bo samodejno poiskal.
Napisan program prekopirajte v svoj editor.
Nadaljevanje sledi....
Če kaj ni jasno, vprašajte... _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Sep 14, 2010 6:10 pm Naslov sporočila: |
|
|
Pred nadaljevanjem postorite še nekaj nastavitev. V menuju View -> toolbars pokljukajte vse izbire. (boste kasneje izključili, česar ne boste potrebovali)
Če sedaj poženete "Build" v Menuju Build, se bo izvedlo prevajanje. V okencu Build se bo izpisalo poročilo ter eventuelne napake. Če poženete "Build and Run" boste pognali simulator. Nastavitve simulatorja najdete v menuju Debug -> AVR Simulator Options. Določite procesor ter clock.
 _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.07 Kraj: Divača (Kačiče)
|
Objavljeno: Tor Sep 14, 2010 6:50 pm Naslov sporočila: |
|
|
Samo medklic: AVRStudio prav lepo dela tudi na W7-64. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Sep 14, 2010 9:18 pm Naslov sporočila: |
|
|
Pa poglejmo kaj se dogaja z našim "programom" na simulatorju.
V desnem oknu je seznam I/O registrov. Vidimo da so se biti posameznih registrov, ki smo jih programsko postavili, prižgali. PC (kazalček) premikamo z F11 ali gumbom. (fotografija!) V levem oknu v zavihku "Processor" lahko vidimo koliko ciklov je bilo izvedeno, ter koliko časa je poteklo. Vidimo tudi bite SREG registra. (glej datasheet 1. dan) _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Sep 15, 2010 3:41 pm Naslov sporočila: |
|
|
V nadaljevanju preizkus primera o katerem sva razpravljala z Vilkotom v prvem sporočilu. Shranjevanje vrednosti splošno namenskega registra v sklad ter pobiranje iz sklada. Kodo prekopirajte v svoj editor. Poženite "Build and Run".
V menuju View vklučite okence "Register" z desnim klikom na odprto okence lahko izberete način prikazovanja vrednosti v registru. V danem primeru bo za lažje razumevanje najprimerneši desetiški prikaz. Odprete lahko tudi okence Memory3, kjer lahko spremlate, kaj se dogaja z skladom.
Koda: |
;-----------------------------------------
;Mala šola AVR 2.dan
;-----------------------------------------
.include "tn13def.inc" ;napovemo INC datoteko za mikrokontroler katerega bomo pač uporabili
.org 0x0
rjmp GlProg ;reset vektor
.org 0xA ;označimo lokacijo kjer bomo začeli z glavnim programom
GlProg:
ldi r16, low(ramend) ;določitev sklada na zadnji lokaciji
out SPL,r16 ;
Zanka:
ldi r16,100
ldi r17,200
push R16
push r17
ldi r16,150
clr r17
pop r17
pop r16
rjmp Zanka |
 _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Sep 15, 2010 3:54 pm Naslov sporočila: |
|
|
Še razlaga programa:
Na začetku programa najprej določimo sklad. Le ta se običajno začne na zadji lokaciji SRAMA. Instrukcija LDI napolni register R16 z vrednostjo, ki je definrana z ramend. Za tiny13 je to:
Koda: |
.equ RAMEND = 0x009f |
To je definirano v include datoteki tn13def.inc. Ukaz low pomeni, da bodo vzeto spodnjih 8 bitov. (večji mikrokontrolerji imajo namreč večji sram, katerega se naslavja z dvema registroma. Tiny13 ima le SPL. (Stack pointer low byte) instrukcija out prenese vrednost iz registra r16 v io register SPL.
V nadaljevanju shranemo v r16 vrednost 100 v r17 pa vrednost 200. Potem oba registra shranemo v sklad. To stori instrukcija PUSH.V nadaljevanju dobita oba registra neko drugo vrednost. Recimo uporabim jih lahko v neki podrutini. Potem registra z instrukcijo POP potegnemo iz sklada. Program se izvaja v zanki, tako da lahko na simulatorju sprmljate vsak korak. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Sep 15, 2010 8:42 pm Naslov sporočila: |
|
|
V nadaljevanju se bomo nekoliko posvetili assemblerju. Kako pišemo program. Kako narediti assembler uporabniku čim razumljivejši in prijaznejši. Nekoliko bomo "preoblekli" program, ki smo ga že napisali ter še kaj dodali. Delovanje progama poskusite na simulatorju.
Koda: |
;-----------------------------------------
;Mala šola AVR 2.dan
;-----------------------------------------
.include "tn13def.inc" ;napovemo INC datoteko za mikrokontroler katerega bomo pač uporabili
;.include "moja.inc"
.def Vsota=r2 ;def je assemblerjeva direktiva s katero lahko
;registrom določimo ime
.def tmp=r16
.def tmp2=r17
.macro DolociSklad ;primer makra brez parametrov
ldi r16,low(ramend)
out SPL,r16
.endmacro
#define PORTB0Izhod sbi DDRB,0 ;
#define B0_1 sbi PORTB,0
#define B0_0 cbi PORTB,0
;/////////////////////////////////////////////
;tukaj je naš glavni program
;vse kar smo definirali zgoraj lahko sicer shranemo
; v zunanjo datoteko ter jo kličemo enako kot tn13def.inc
.org 0x0
rjmp GlProg ;reset vektor
.org 0xA ;označimo lokacijo kjer bomo začeli z glavnim programom
GlProg:
DolociSklad
PORTB0Izhod ;določitev izhodnega pina
ldi tmp,12
ldi tmp2,24 ; v register r 16 in 17 smo shranili dve vrednosti
mov Vsota,tmp ; registrom 0-15 ne moremo direktno vpisati vrednost
;zato smo to storili indirektno instukcija mov je
;premaknila v njega vrednost iz registra tmp
push tmp ;shranemo vrednosti v sklad
push tmp2
push Vsota
Zanka:
add tmp,tmp2 ;registra smo sešteli
mov vsota,tmp ;rezultat shranem v register z imenom vsota
B0_1 ;izhodni pin stanje 1
nop
B0_0 ;izhodni pin stanje 0
pop Vsota
pop tmp2
pop tmp
rjmp Zanka |
Vse kar smo deklarirali na začetku programa lahko mile volje shranemo v svojo datoteko ter to uporabimo pri pisanju drugega programa. Datoteka se mora nahajati v mapi s tekočim projektom. Lahko pa tudi napišemo pot do nje. Datoteki lahko določite poljubno ime. (recimo "moja.inc" kot sem kot tekst navedel v gornji kodi.
Če koga kaj zanima v vezi s tem lahko vpraša tukaj.
Pomembno: Na koncu vsebine je potrebno postaviti znak za komentar.
Koda: |
// konec deklariranja |
Po tem prevajalnik sklepa, da je prišel do konca.
Sicer bo težel nekaj v stilu...missing newline at end of file _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
fricky Član


Pridružen-a: Pon 22 Sep 2003 15:37 Prispevkov: 260 Aktiv.: 1.10 Kraj: Ribniško Pohorje
|
Objavljeno: Čet Sep 16, 2010 8:23 pm Naslov sporočila: |
|
|
Zdravo!
Imam vprašanje glede simulatorja.Zgornjemu programu sem dodal v zanki preklapljanje pina. Ko enkrat preide pin v nizko stanje, ga program ne postavi več na 1,vsaj tako kaže stanje simulator na PORTB.Koda:
Koda: |
-----------------------------------------
;Mala šola AVR 2.dan
;-----------------------------------------
.include "tn13def.inc" ;napovemo INC datoteko za mikrokontroler katerega bomo pač uporabili
.org 0x0
rjmp GlProg ;reset vektor
.org 0xA ;označimo lokacijo kjer bomo začeli z glavnim programom
GlProg:
sbi DDRB,0 ;določimo pin B0 kot izhod
sbi PORTB,0 ;postavimo pin na visoko stanje
Zanka: ;zadržimo programski števec
nop ;ni operatcije
sbi PORTB,1 ;postavimo pin na nizko stanje
nop
sbi PORTB,0 ;postavimo pin na visoko stanje
rjmp ZANKA |
|
|
Nazaj na vrh |
|
 |
piroman Član


Pridružen-a: Čet 23 Okt 2003 12:06 Prispevkov: 2707 Aktiv.: 11.43 Kraj: Ljubljana
|
Objavljeno: Čet Sep 16, 2010 8:33 pm Naslov sporočila: |
|
|
Ti si dvakrat postavil bit in to enkrat na PB1 in enkrat na PB0;
Če hočeš togglat PB1 uporabi:
sbi PORTB,1 //set bit
cbi PORTB,1 //clear bit _________________ One shouldn’t work on semiconductors, that is a filthy mess; who knows if they really exist!
Wolfgang Pauli, 1931 |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|