Operácie

MIPS Úvodné cvičenie: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
Bez shrnutí editace
Riadok 1: Riadok 1:


Cieľom tohoto cvičenia je zistiť, či máte pripravené všetky potrebné nástroje na prácu a otestovať ich. Budete potrebovať iba Arduino dosku, bez ďalších komponentov.
Cieľom tohoto cvičenia je zistiť, či máte pripravené všetky potrebné nástroje na prácu a otestovať ich.  
 
Budete potrebovať iba Arduino dosku a dokumentáciu k nej<ref group="REF">[1.] Datasheet obvodu <S>Atmel</S> Microchip [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf ATmega328P]
</ref>, bez ďalších komponentov.


== Arduino ==
== Arduino ==
Riadok 8: Riadok 11:
# Stiahnite a naintalujte si najnovšiu verziu prostredia Arduino ([https://www.arduino.cc/ arduino.cc)  
# Stiahnite a naintalujte si najnovšiu verziu prostredia Arduino ([https://www.arduino.cc/ arduino.cc)  
# Priamo z prostredia si otvorte príklad Blink (File -> Examples -> 01. Basic -> Blink)
# Priamo z prostredia si otvorte príklad Blink (File -> Examples -> 01. Basic -> Blink)
# Zmeňte parameter funkcie delay z hodnoty 1000 na 200
# Zmeňte parameter funkcie delay z hodnoty 1000 na 200<ref>Hodnotu delay meníme preto, lebo tento základný testovací program býva na doske často nahratý už od výrobcu, takže priamo po pripojení k USB sa LED dióda rozbliká s periódou 2sekundy. Zmenou hodnoty sa ubezpečíme, že skutočne funguje celý vývojový cyklus od prekladu cez linkovanie až po nahrávanie do procesora.</ref>
# Nastavte správny typ vašej vývojovej dosky (Tools -> Board -> Arduino AVR Boards -> Arduino Uno / alebo Arduino Nano)  
# Nastavte správny typ vašej vývojovej dosky (Tools -> Board -> Arduino AVR Boards -> Arduino Uno / alebo Arduino Nano)<ref>Najmä čínske klony Arduino Nano majú v sebe nahratú staršiu verziu bootloaderu, preto treba vybrať z menu Tools -> Procesor -> ATmega328 Old Bootloader</ref>
# Nastavte správne číslo portu ku ktorému je doska pripojená (Tools -> Port -> ComX)
# Nastavte správne číslo portu ku ktorému je doska pripojená (Tools -> Port -> ComX)
# Skompilujte program a nahrajte ho do dosky (Sketch -> Upload) a vizuálne skontrolujte či je všetko tak ako má byť.
# Skompilujte program a nahrajte ho do dosky (Sketch -> Upload) a vizuálne skontrolujte či je všetko tak ako má byť.
Riadok 16: Riadok 19:
* Na základe informácií z prednášky skúste porozmýšľať, na čo slúži príkaz '''pinMode(13, OUTPUT)'''? Vedeli by ste povedať, čo a kde nastavuje? A čo '''digitalWrite(13, HIGH)'''
* Na základe informácií z prednášky skúste porozmýšľať, na čo slúži príkaz '''pinMode(13, OUTPUT)'''? Vedeli by ste povedať, čo a kde nastavuje? A čo '''digitalWrite(13, HIGH)'''
* Ako najrýchlejšie viete blikať LEDkou?  (t.j. aký najkratší impulz viete vygenerovať na výstupe)
* Ako najrýchlejšie viete blikať LEDkou?  (t.j. aký najkratší impulz viete vygenerovať na výstupe)
* Sledujte na <ref>osciloskope</ref> [2] priebeh signálov na výstupe
* Sledujte na osciloskope<ref group="REF">James Lewis: ''[https://www.baldengineer.com/digitalwrite-on-a-logic-analyzer.html Benchmarking Arduino’s digitalWrite() with a Logic Analyzer]''<BR></ref> priebeh signálov na výstupe
 


'''Poznámky:'''  
'''Poznámky:'''  
* Hodnotu delay meníme preto, lebo tento základný testovací program býva na doske často nahratý už od výrobcu, takže priamo po pripojení k USB sa LED dióda rozbliká s periódou 2sekundy. Zmenou hodnoty sa ubezpečíme, že skutočne funguje celý vývojový cyklus od prekladu cez linkovanie až po nahrávanie do procesora.
<references />
* Najmä čínske klony Arduino Nano majú v sebe nahratú staršiu verziu bootloaderu, preto treba vybrať z menu Tools -> Procesor -> ATmega328 Old Bootloader
 




Riadok 32: Riadok 36:
== AVR Assembler ==
== AVR Assembler ==


Pre prvé pokusy si skúsime prácu len s assemblerom.  
Pre prvé pokusy si skúsime prácu len s assemblerom<ref group="REF">[4.] [http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf  AVR Instruction Set Manual]. Atmel, 2016.</ref>.  
   
   
V ľubovoľnom programátorskom editore napíšte nasledovný program a uložte si ho do C:\User\Meno\Documents pod názvom <source lang="shell" inline>program01.asm</source>
V ľubovoľnom programátorskom editore napíšte nasledovný program a uložte si ho do C:\User\Meno\Documents pod názvom <source lang="shell" inline>program01.asm</source>
Riadok 77: Riadok 81:
Ak by sme niekedy potrebovali disassembler, tak pre uplnost  
Ak by sme niekedy potrebovali disassembler, tak pre uplnost  
  avr-objdump -m avr -D program01.hex
  avr-objdump -m avr -D program01.hex


== AVR Assembler v Studio==
== AVR Assembler v Studio==
Riadok 110: Riadok 117:


'''Odbočka:''' ak ostaneme len pri blikaní LED diódy, aká najvyššia frekvencia má zmysel? -> [[Diódy LED#Maximálna frekvencia]]
'''Odbočka:''' ak ostaneme len pri blikaní LED diódy, aká najvyššia frekvencia má zmysel? -> [[Diódy LED#Maximálna frekvencia]]


== Blink v AVR Assembleri ==
== Blink v AVR Assembleri ==
Riadok 117: Riadok 127:


V simulátore si odmeriame, koľko času spotrebujeme v slučke a nastavíme podľa potreby. Aby ste si to mohli aj vyskúšať, spravíme tri do seba vnorené čakacie slučky,  
V simulátore si odmeriame, koľko času spotrebujeme v slučke a nastavíme podľa potreby. Aby ste si to mohli aj vyskúšať, spravíme tri do seba vnorené čakacie slučky,  
takže dosiahneme oneskorenie cca 100 mA, takže blikanie LED diódy bude aj viditeľné.  
takže dosiahneme oneskorenie cca 100 mA, takže blikanie LED diódy bude aj viditeľné. Na presné časovanie použijeme výpočet, alebo automatický generátor<ref group="REF">
* B. Mulvey, T. Morland: [http://darcy.rsgc.on.ca/ACES/TEI4M/AVRdelay.html AVR Delay Loop Calculator]</ref>


<tabs>
<tabs>
Riadok 182: Riadok 193:




=== Knižnica ===
=== Literatúra ===


[1.] Datasheet obvodu <S>Atmel</S> Microchip [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf ATmega328P]<BR>
ToDO: toto presunut do cvicenia 2
[2.] James Lewis: ''[https://www.baldengineer.com/digitalwrite-on-a-logic-analyzer.html Benchmarking Arduino’s digitalWrite() with a Logic Analyzer]''<BR>
[3.] AVR035: [http://ww1.microchip.com/downloads/en/Appnotes/doc1497.pdf Efficient C Coding for AVR]. Application note.<BR>
[3.] AVR035: [http://ww1.microchip.com/downloads/en/Appnotes/doc1497.pdf Efficient C Coding for AVR]. Application note.<BR>
[4.] [http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf  AVR Instruction Set Manual]. Atmel, 2016.<BR>


* B. Mulvey, T. Morland: [http://darcy.rsgc.on.ca/ACES/TEI4M/AVRdelay.html AVR Delay Loop Calculator]
* Arduino UNO V3 http://marcusjenkins.com/wp-content/uploads/2014/06/ARDUINO_V2.pdf
* Arduino UNO V3 http://marcusjenkins.com/wp-content/uploads/2014/06/ARDUINO_V2.pdf
* Arduino Nano http://marcusjenkins.com/wp-content/uploads/2014/06/nano.pdf
* Arduino Nano http://marcusjenkins.com/wp-content/uploads/2014/06/nano.pdf
Riadok 195: Riadok 203:




<references/>
<references group="O" />




  [[Category: AVR]][[Category: MIPS]]
  [[Category: AVR]][[Category: MIPS]]

Verzia z 22:15, 11. január 2021

Cieľom tohoto cvičenia je zistiť, či máte pripravené všetky potrebné nástroje na prácu a otestovať ich.

Budete potrebovať iba Arduino dosku a dokumentáciu k nej[REF 1], bez ďalších komponentov.

Arduino

Hoci Arduino nebudeme poižívať bežne, jeho veľkou výhodou je, že to je veľmi rozšírený a preto aj dobre otestovaný systém. To znamená, že po nainštalovaní je všetko pripravené a malo by fungovať na prvý raz.

  1. Stiahnite a naintalujte si najnovšiu verziu prostredia Arduino ([https://www.arduino.cc/ arduino.cc)
  2. Priamo z prostredia si otvorte príklad Blink (File -> Examples -> 01. Basic -> Blink)
  3. Zmeňte parameter funkcie delay z hodnoty 1000 na 200[1]
  4. Nastavte správny typ vašej vývojovej dosky (Tools -> Board -> Arduino AVR Boards -> Arduino Uno / alebo Arduino Nano)[2]
  5. Nastavte správne číslo portu ku ktorému je doska pripojená (Tools -> Port -> ComX)
  6. Skompilujte program a nahrajte ho do dosky (Sketch -> Upload) a vizuálne skontrolujte či je všetko tak ako má byť.

Úlohy:

  • Na základe informácií z prednášky skúste porozmýšľať, na čo slúži príkaz pinMode(13, OUTPUT)? Vedeli by ste povedať, čo a kde nastavuje? A čo digitalWrite(13, HIGH)
  • Ako najrýchlejšie viete blikať LEDkou? (t.j. aký najkratší impulz viete vygenerovať na výstupe)
  • Sledujte na osciloskope[REF 2] priebeh signálov na výstupe


Poznámky:

  1. Hodnotu delay meníme preto, lebo tento základný testovací program býva na doske často nahratý už od výrobcu, takže priamo po pripojení k USB sa LED dióda rozbliká s periódou 2sekundy. Zmenou hodnoty sa ubezpečíme, že skutočne funguje celý vývojový cyklus od prekladu cez linkovanie až po nahrávanie do procesora.
  2. Najmä čínske klony Arduino Nano majú v sebe nahratú staršiu verziu bootloaderu, preto treba vybrať z menu Tools -> Procesor -> ATmega328 Old Bootloader


AVR Studio

Zo stránky https://www.microchip.com/mplab/avr-support/avr-and-sam-downloads-archive si nainštalujte niektorú verziu vývojového prostredia

  • AVR Studio 5.1 je vhodný kompromis medzi veľkosťou a aktuálnosťou
  • Najnovšia verzia Atmel Studio 7 je pre naše účely zbytočne nafúknutá a nebudeme potrebovať podporu pre všetky procesory, ktoré ponúka
  • Staršia verzia AVR Studio 4 je oproti v5 naozaj malá a jednoduchá, ale treba si k nej doinštalovať zvlášť kompilátor avr-gcc, bez neho vie prostredie prekladať len z assembleru. Preto si predtým nainštalujte samostatný kompilátor WinAVR

AVR Assembler

Pre prvé pokusy si skúsime prácu len s assemblerom[REF 3].

V ľubovoľnom programátorskom editore napíšte nasledovný program a uložte si ho do C:\User\Meno\Documents pod názvom program01.asm

                .text
START:          SBI 0x04,5      ; DDRB.5 = 1 (t.j. Output)                            ; 1 SC
LOOP:           SBI 0x05,5      ; PORTB.5 = 1 (t.j. High, rozsviet LED)               ; 2 SC
                CBI 0x05,5      ; PORTB.5 = 0 (t.j. Low, zhasni LED)                  ; 2 SC
                RJMP LOOP       ; Skok na zaciatok                                    ; 2 SC
                .end            ; Koniec


Pri inštalácii AVR Studio 5 sa vám v zozname programov objavila ikonka AVR Studio Command Prompt ak tam nie je, spustite ručne tento program

C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\application\StudioCommandPrompt.exe

v najnovšej verzii ho nájdete tu C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\StudioCommandPrompt.exe


Z príkazového riadku program preložíme (prípadne aj s --no-warn)

avr-as -mmcu=atmega328p -o program01.elf program01.asm

a skontrolujeme výsledok prekladu

avr-objdump -d program01.elf

vidno, že tu ešte kompilátor nevie presne kam tento kód príde, preto je .rjmp .+0 a tak musíme spustiť ešte linker

avr-ld program01.elf -o program01.out

a znova skontrolujeme výsledok prekladu

avr-objdump -d program01.out

vyrobíme ešte .hex verziu pre programátor

avr-objcopy -O ihex program01.out program01.hex

a pošleme program do mikroprocesora

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe" -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\Users\YourName\Documents\program01.hex:i

Ak by sme niekedy potrebovali disassembler, tak pre uplnost

avr-objdump -m avr -D program01.hex



AVR Assembler v Studio

Teraz si zopakujeme to isté, ale už nebudeme vypisovať jednotlivé príkazy, ale využijeme komplexné integrované vývojové prostredie (IDE) Atmel Studio. Založíme nový ASM projekt a vložíme nasledovný kód

START:	SBI 0x04,5      ; DDRB.5 = 1 (t.j. Output)
LOOP:
		SBI 0x05,5      ; PORTB.5 = 1 (t.j. High, rozsviet LED)

		LDI  r18, 3
L1:		DEC  r18
		BRNE L1

		CBI 0x05,5      ; PORTB.5 = 0 (t.j. Low, zhasni LED)

		LDI  r18, 3
L1:		DEC  r18
		BRNE L1

		JMP LOOP		; Skok na začiatok

TODO: pouzivame aj symbolicke nazvy napr. PORTB, DDRB, vid m328def.inc


Potom ho preložíme a odkrokujeme podľa pokynov cvičiaceho.

Odbočka: ak ostaneme len pri blikaní LED diódy, aká najvyššia frekvencia má zmysel? -> Diódy LED#Maximálna frekvencia



Blink v AVR Assembleri

Na záver si vyskúšame aj jednoduchý program s časovou slučkou. Využijeme na to predošlý program doplnený o jednoduchú slučku

V simulátore si odmeriame, koľko času spotrebujeme v slučke a nastavíme podľa potreby. Aby ste si to mohli aj vyskúšať, spravíme tri do seba vnorené čakacie slučky, takže dosiahneme oneskorenie cca 100 mA, takže blikanie LED diódy bude aj viditeľné. Na presné časovanie použijeme výpočet, alebo automatický generátor[REF 4]

/*
 *	Program03.asm
 *  
 *  LED Blink s periodou 200 ms a oneskorenie 
 *  delay vygenerovane tu http://darcy.rsgc.on.ca/ACES/TEI4M/AVRdelay.html
 *  Created: 11. 1. 2021 13:32:24
 */ 

START:	SBI 0x04,5      ; DDRB.5 = 1 (t.j. Output)
LOOP:
		SBI 0x05,5      ; PORTB.5 = 1 (t.j. High, rozsviet LED)

		CALL DELAY

		CBI 0x05,5      ; PORTB.5 = 0 (t.j. Low, zhasni LED)

	    CALL DELAY

		JMP LOOP		; Skok na začiatok

						; Assembly code auto-generated
						; by utility from Bret Mulvey	
						; Delay 3 199 992 cycles
						; 199ms 999us 500 ns at 16 MHz
DELAY:	LDI  r16, 17
		LDI  r17, 60
		LDI  r18, 201
L1:		DEC  r18
		BRNE L1
		DEC  r17
		BRNE L1
		DEC  r16
		BRNE L1
		NOP
		RET

Aby sme mohli preložený program aj nahrať do Arduino dosky, pridáme si do menu jeden príkaz, ktorý to spraví za nás. Otvoríme položku Tools -> External Tools (obr. vľavo) a vyplníme položky podľa obr. vpravo

Do políčka Title vložte názov, ktorý sa potom objaví aj v menu Tools, napríklad Arduino Upload.

Do políčka Command vložte

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe

A do políčka Arguments vložte

-C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM5 -b115200 -D -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i

Pozor, tu uvedený port COM5 musíte zmeniť podľa toho, aké číslo portu pridelil systém vášmu Arduinu.

Začiarknite aj položku Use Output window.

Odteraz je nahrávanie do Arduina možné cez menu Tools -> Arduino Upload.

Ak ste všetko spravili správne, mala by vám LED dióda blikať na doske s periódou 200 ms.


Literatúra

ToDO: toto presunut do cvicenia 2 [3.] AVR035: Efficient C Coding for AVR. Application note.




Chyba citácie Značky <ref> pre skupinu „REF“ sú prítomné, ale nebola nájdená zodpovedajúca značka <references group="REF"/>