www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Mala šola AVR - 2.dan
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Sep 13, 2010 5:43 pm    Naslov sporočila:  Mala šola AVR - 2.dan Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Sep 13, 2010 6:05 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Sep 13, 2010 6:22 pm    Naslov sporočila:   Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Sep 13, 2010 6:57 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Sep 13, 2010 8:17 pm    Naslov sporočila:   Odgovori s citatom

Zgornja koda sicer ni smiselna a vseno bom razložil kaj je napisano.


Koda:
.include
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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Sep 14, 2010 5:33 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Sep 14, 2010 5:46 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Sep 14, 2010 6:10 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.07
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Tor Sep 14, 2010 6:50 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Sep 14, 2010 9:18 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Sep 15, 2010 3:41 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Sep 15, 2010 3:54 pm    Naslov sporočila:   Odgovori s citatom

Š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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Sep 15, 2010 8:42 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
fricky
Član
Član



Pridružen-a: Pon 22 Sep 2003 15:37
Prispevkov: 260
Aktiv.: 1.10
Kraj: Ribniško Pohorje

PrispevekObjavljeno: Čet Sep 16, 2010 8:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
piroman
Član
Član



Pridružen-a: Čet 23 Okt 2003 12:06
Prispevkov: 2707
Aktiv.: 11.43
Kraj: Ljubljana

PrispevekObjavljeno: Čet Sep 16, 2010 8:33 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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