1.SoC: Arduino (System on a Chip) - profs.info.uaic.rovcosmin/pagini/resurse_arduino/Cursuri... ·...

Post on 13-Dec-2018

234 views 0 download

transcript

1.SoC: Arduino

(System on a Chip)

Facultatea de Informatică – Univ. “Al. I. Cuza” Iaşi

SoC

Este un sistem complet (de obicei un calculator) construit

într-un singur procesor: toate componentele sistemului

(CPU, RAM, porturi I/O etc.).

De ex: procesoarele telefoanelor (ARM).

Consumă puţin curent pentru a funcţiona.

Cosmin Vârlan – Facultatea de Informatică 2016

Apple A5 SoC

SoC – ce conţin

• Microcontroller / microprocesor / digital signal

processor (DSP) sau mai multe (MPSoC)

• Blocuri de memorie: ROM, RAM, EEPROM, Flash

• Metode de măsurare a timpului (de ex. oscilatoare)

• Periferice: ceasuri reale (ora corectă), ceasuri ce

menţin timpul de la pornire, power-on-reset

(sesizeaza curentul şi duc sistemul într-o anumită

stare), watch dog timeout (pt erori).

Cosmin Vârlan – Facultatea de Informatică 2016

AMD Am286ZX/LX,

SoC based on80286https://en.wikipedia.org/wiki/System_on_a_chip

SoC – ce conţin

• Interfeţe externe: USB, FireWire, Ethernet, USART

(Universal Synchronous/Asynchronous

Receiver/Transmitter – portul serial cel vechi),

SPI (Serial Peripheral Interface)

• Interfeţe ADC / DAC (analog – digital converter şi

invers)

• Circuite pentru managementul tensiunii.

Cosmin Vârlan – Facultatea de Informatică 2016

Cosmin Vârlan – Facultatea de Informatică 2016

https://en.wikipedia.org/wiki/System_on_a_chip

Cosmin Vârlan – Facultatea de Informatică 2016

"ARMSoCBlockDiagram" by en:User:Cburnett - Own work in

Inkscape based on en:Image:ARMSoCBlockDiagram.gif.

Licensed under CC BY-SA 3.0 via Commons -

https://commons.wikimedia.org/wiki/File:ARMSoCBlockDiagra

m.svg#/media/File:ARMSoCBlockDiagram.svg

JTAG = Joint Test Action Group

Realizează verificarea automată a

CHIPului.

La PCuri: Power On Self Testhttps://en.wikipedia.org/wiki/JTAG

Cosmin Vârlan – Facultatea de Informatică 2016

"ARMSoCBlockDiagram" by en:User:Cburnett - Own work in

Inkscape based on en:Image:ARMSoCBlockDiagram.gif.

Licensed under CC BY-SA 3.0 via Commons -

https://commons.wikimedia.org/wiki/File:ARMSoCBlockDiagra

m.svg#/media/File:ARMSoCBlockDiagram.svg

Procesorul de tip ARMRISC = Reduced Instruction Set Computing

CISC = Complex Instruction Set Computing

RISC – au low consumption la energie in comparatie cu

CISC care consuma destul de mult. Scopul însă este diferit

şi e ok. Multe companii (precum INTEL) au adus CISC-ul la

nivele de consum foarte mici: Advanced RISC Machine

Citiţi mai multe (dacă vreţi) la:

https://scottiestech.info/2011/11/24/what-is-an-arm-

processor-and-whats-the-big-deal/

Cosmin Vârlan – Facultatea de Informatică 2016

"ARMSoCBlockDiagram" by en:User:Cburnett - Own work in

Inkscape based on en:Image:ARMSoCBlockDiagram.gif.

Licensed under CC BY-SA 3.0 via Commons -

https://commons.wikimedia.org/wiki/File:ARMSoCBlockDiagra

m.svg#/media/File:ARMSoCBlockDiagram.svg

Regulator de tensiune – reduce

+/- pentru ca procesorul să

primească o tensiune constantă.

Cosmin Vârlan – Facultatea de Informatică 2016

"ARMSoCBlockDiagram" by en:User:Cburnett - Own work in

Inkscape based on en:Image:ARMSoCBlockDiagram.gif.

Licensed under CC BY-SA 3.0 via Commons -

https://commons.wikimedia.org/wiki/File:ARMSoCBlockDiagra

m.svg#/media/File:ARMSoCBlockDiagram.svg

ASB = Advanced System Bus

AHB = Advanced High-

performance Bus

APB = Advanced Peripheral Bus

Diverse tipuri de memorie. (EBI=

External Bus Interface, utilizat

pentru a conecta stickuri de ex.)

Cosmin Vârlan – Facultatea de Informatică 2016

Periferal Input / Output

Cosmin Vârlan – Facultatea de Informatică 2016

Application Specific Logic –

ajută la particularizarea

dispozitivului pentru ce are

nevoie să facă cel mai des. De

exemplu un Router ar dori să

poată afla rapid adresle IP a

pachetelor…

Cosmin Vârlan – Facultatea de Informatică 2016

Diverse module:

-Medium Access Control (Eth)

-Universal Synchronous /

Asynchronous Receiver /

Transmitter

-Serial Peripheral Interface

- 2 Wire interface

-Analog to Digital Converters

Etc.

Cosmin Vârlan – Facultatea de Informatică 2016

Controlere pentru tensiune,

oscilatoare, phase-locked loop

(diferenţa între oscilator şi un

clock extern),

controller pentru reset, brownout

(cadere intentionala sau

neintentionala a tensiunii), power

on reset,

Sistem de intreruperi, watchdog

timer, ceas de timp real

Software

Elementele hardware descrise trebuie controlate prin

intermediul software. De exemplu, trebuie implementate

standarde cum ar fi cel al comunicării prin USB.

Toate procesoarele trebuie verificate (acţiune ce costă

aprox 70% din designul chipului)

Deseori se folosesc FPGA (Field-programmable gate array)

– Ex: HoMade – FPGA care creeaza core-uri la runtime,

alocând sau dealocând resurse hardware în funcţie de

necesităţi.

Cosmin Vârlan – Facultatea de Informatică 2016

SoC

Avantajele utilizării SoC: consum mic de

energie, costuri de producţie mici, fiabilitate

crescută comparativ cu chipurile pe care le

înlocuiesc [partea cu costurile este discutabilă]

Unde le găsiţi: Telefoane, Televizoare inteligente,

Raspberry Pi, Arduino, Ceasuri Inteligente,

Routere (unele), Chrome Cast (sau asemenea),

Apple TV (A5), etc.

Cosmin Vârlan – Facultatea de Informatică 2016

ATmega 168/328

Cosmin Vârlan – Facultatea de Informatică 2016

AVR

Cosmin Vârlan – Facultatea de Informatică 2016

XTAL = crystal = osciloscilator

ADC = Analog / Digital conv.

AREF = analog reference (cât

este voltajul de intrare pe pinii

analogici (default 5V)

http://tronixstuff.com/2013/12/12/

arduino-tutorials-chapter-22-aref-pin/

AVCC = pinul cu care se alimen-

tează din exterior convertorul

Analog / Digital [uneori

convertorul analog/digital

consumă mai mult curent şi

trebuie alimentat separat]

Microcontroller – Atmega328p

Cosmin Vârlan – Facultatea de Informatică 2016

Microcontroller ATmega328

Operating Voltage 5V

Input Voltage (recommended) 7-12V

Input Voltage (limits) 6-20V

Digital I/O Pins14 (of which 6 provide PWM

output)

Analog Input Pins 6

DC Current per I/O Pin 40 mA

DC Current for 3.3V Pin 50 mA

Flash Memory32 KB (ATmega328) of which

0.5 KB used by bootloader

SRAM 2 KB (ATmega328)

EEPROM 1 KB (ATmega328)

Clock Speed 16 MHz (max 20Mhz)

CPU 8-bit AVR

Comparaţie între diverse

tipuri de procesoare

ATMEL:

https://www.arduino.cc/en

/Products/Compare

Arduino UNO

Cosmin Vârlan – Facultatea de Informatică 2016

Informaţii (complete?) despre Arduino UNO: https://www.arduino.cc/en/Main/ArduinoBoardUno

Arduino UNO

Numele “UNO” (unu în italiană) este dat acestei plăci

pentru a celebra prima versiune a IDE-ului Arduino (care

până de curând (2015) a fost doar în “Beta”.

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

La fel ca versiunile anterioare, Arduino UNO este “Open Hardware”, specificaţiileacestuia putând fi utilizate de oricine pentru a-şi creapropriul Arduino, îmbunătăţisau adapta la propriile nevoi.

Specificaţiile Arduino Uno le găsiţi la: https://www.arduino.cc/en/Main/ArduinoBoardUno

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Programarea lui

Arduino UNO se

face (standard)

prin intermediul

softului pus la

dispoziţie pe situl

www.arduino.cc

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO Asta nu înseamnă că nu se poate şi altfel:

Pluginul Arduino pentru Eclipse poate fi descărcat de la: http://eclipse.baeyens.it/

Informaţii despre instalare: http://forum.arduino.cc/index.php?topic=79595.0

Altele: WinAVR, Atmel Studio

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

De-a lungul timpului, au fost utilizate diverse tipuri de

programatoare.

Cele mai populare (şi care sunt recunoscute de către

Windows fără a necesita drivere suplimentare) sunt

programatoarele FTDI (asemanatoare cu cele de pe

Arduino UNO: ATMEGA8U2 – programator ISP).

Versiunile chinezeşti ale Arduino nano au inlocuit FTDI-ul

(care era mai scump) cu programatorul CH340G.

Găsiţi driverele pentru acesta la: http://profs.info.uaic.ro/~vcosmin/files.php?dir=pagini/resurse_arduino

Interesant de vazut şi: https://www.youtube.com/watch?v=Vawhrr4COjI

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Odată instalat (dacă a fost nevoie), ARDUINO-ul va fi

vizibil în device manager ca fiind conectat la un anumit

port X (COM X).

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

IDE-ul probabil a detectat şi el portul şi tipul Arduinoului

conectat (Arduino / Genuino UNO). În caz contrar, setaţi

aceste informaţii în meniul Tools->Board şi Tools->Port.

De asemenea aceste meniuri sunt utile când aveţi mai

multe echipamente Arduino conectate simultan (şi vreţi să

programaţi unul dintre ele).

Programatorul ce trebuie selectat pentru UNO este

AVRISP mkII.

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO - bootloader

Integratul ATMEL 328P, creierul lui Arduino UNO, are deja

instalat, în memoria Flash (0.5KB din 32KB), un soft

denumit bootloader. Acesta are rolul de a permite

programarea Arduino-ului utilizând doar un cablu USB.

Acest program se încarca la bootarea Arduino-ului.

La încărcarea unui program prin USB bootloaderul nu se

va şterge.

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO - bootloader

Dacă se doreşte eliminiarea bootloaderului (pentru a

câştiga cei 0.5KB din memoria Flash), Arduino poate fi

programat direct prin tehnologia ICSP (denumit şi ISP) –

portul SPI.

Pentru detalii, accesaţi:

https://www.arduino.cc/en/Hacking/Programmer

A NU SE UTILIZA / TESTA LA FACULTATE !

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO - bootloader

Pentru rescrierea bootloaderului, se va folosi tot ICSP

(durează aprox 15”).

Pentru detalii puteţi accesa:

https://www.arduino.cc/en/Hacking/Bootloader?from=Tut

orial.Bootloader

A NU SE UTILIZA / TESTA LA FACULTATE !

[putem să le reparăm dar nu avem chef]

[dacă faceţi asta acasă, o faceţi pe cont propriu. Aveţi grijă

ce programator folosiţi !]

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Cosmin Vârlan – Facultatea de Informatică 2016

Portul SPI: ICSP(In-Circuit Serial Programming)

Arduino UNO - Safety

Chiar dacă este mereu conectat (în timp ce îl programaţi)

la USB, nu prea aveţi cum să ardeţi portul USB al

calculatorului (decât dacă vreţi neapărat asta).

Se pot face în schimb shielduri care să ridice tensiunea la

5KV – şi apoi să trimită tensiunea pe TX (vor arde portul

calculatorului) [condensatoare]

Puteţi în schimb să ardeţi Arduino-ul destul de uşor (aşa

că vă rog FĂRĂ CHEI, MONEZI sau ALTE OBIECTE

METALICE pe masă în timp ce lucraţi cu Arduino. Aveţi

grijă să nu atingeţi de şuruburile cu care sunt prinse

băncile -Atmega 328p e foarte fragil !!!).

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO - Safety

În cazul în care calculatorul nu “va vede” Arduino-ul, se

poate ca o masură de siguranţă să fi intrat în acţiune (de

fapt este o “siguranţă” automatizată – ce îşi revine când

Arduino nu mai este în scurt) sau aveţi deja ocupat portul

calculatorului (fie s-a blocat IDEul pe acel port fie se face

vreo comunicare etc.)

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO - Alimentare

Arduino UNO poate opera la voltaje între 5 şi 20V.

În cazul tensiunilor de sub 7V se poate întâmpla ca la

calcule intense Arduino să devină instabil (spre exemplu

auto-reset).

În cazul tensiunilor peste 12V se poate întâmpla ca

regulatorul de tensiune să se supraîncălzească (ataşaţi un

radiator altfel puteţi arde întregul sistem).

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Cosmin Vârlan – Facultatea de Informatică 2016

Regulatorul de

tensiune

Arduino UNO - Alimentare

De fapt, procesorul este alimentat la 5V (din acest motiv

îl puteţi alimenta direct de pe portul USB).

Arduino poate fi alimentat prin:

- portul USB (5V)

- alimentare separata (7-20V)

- pinul vin (7-20V)

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Cosmin Vârlan – Facultatea de Informatică 2016

USB, 5V

Alimentare

externa (7-20V)

Alimentare

externa (7-20V)

Arduino UNO - Alimentare

Deşi este posibil, se poate alimenta prin pinul de 5V sau

de 3.3V dar alimentarea de acest tip trece peste

regulatorul de tensiune şi dacă se greşeşte (chiar şi cu

foarte puţin) voltajul, puteţi arde procesorul.

NERECOMANDAT

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO – putere curent / pin

Pinul de 3.3V

CosminVârlan – Facultatea de Informatică 2016

3.3V

Arduino UNO – putere curent / pin

Pinul de 3.3V

CosminVârlan – Facultatea de Informatică 2016

5V

Arduino UNO – curent / pin

Pinul GROUND este utilizat pentru a scurge curentul

preluat din pinii 5V sau 3.3V.

Oricare dintre pinii digitali pot fi folosiţi pentru a scurge

curentul (ca şi GROUND) dacă sunt setaţi cu valoarea

LOW sau pentru a putea lua din ei 5V (500mAh !) dacă

sunt setaţi pe HIGH.

Arduino UNO are o rezistenta pe fiecare dintre pinii

digitali ce ii permite sa scurga prin aceştia până la 40mAh

(standard e 20mAh). Vă rugăm să nu o testaţi (la facultate)

! – nu ştim dacă kinezii nu s-au zgârcit… [pull up resistors]

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO – pinii digitali

Cosmin Vârlan – Facultatea de Informatică 2016

Pinii digitali (0 - 13)

Arduino UNO – pinii digitali

Anumiţi pini digitali pot îndeplini şi alte roluri decât de a

furniza/scurge tensiune:

- d0: RX (primeşte informaşii trimise prin USB);

- d1: TX (trimite informaţii către USB);

- d2, d3: pot fi utilizaţi pentru a genera întreruperi (identice

cu cele cunoscute deja: execută o funcţie când prin pinul

respectiv se primeşte un voltaj înafara unui interval

indicat);

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO – pinii digitali

- d3, d5, d6, d9, d10, d11: PWM (Pulse Width Modulation) –

permit scrierea de valori analogice (în intervalul 0-1024)

prin transmiterea de tensiuni în intervalul 0-5V;

- d10, d11, d12, d13: emulare SPI prin intermediul unei

biblioteci SPI. Pinii alocati sunt astfel: 10=SS, 11=MOSI,

12=MISO, 13=SCK

- d13: led intern conectat prin rezistenţă

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO – pinii analogici

Cosmin Vârlan – Facultatea de Informatică 2016

Pinii Analogici

SCL(serial clock)

SDA(serial data)

Arduino UNO – pinii analogici

Pinii analogici (a0-a6) pot citi tensiunea aplicată lor cu

o rezoluţie de 10 biţi [valori între 0 şi 1024].

analog 4 (sau SDA), analog 5 (sau SCL): suportă

tehnologie TWI (two wire interface – I2C) atunci

când este utilizată biblioteca corespunzătoare

Tensiunea maximă (default) este de 5V, aceasta putând

fi schimbată prin aplicarea unei tensiuni pinului AREF (şi utilizarea analogReference() în cod pentru

a seta valoarea pe external) – referinţa va fi curentul

primit prin pinul AREF [între 0-5V !!!]

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO

Cosmin Vârlan – Facultatea de Informatică 2016

AREF

Arduino UNO – programare

Specificaţiile limbajului pot fi găsite la adresa:

https://www.arduino.cc/en/Reference/HomePage

Pe scurt: se foloseşte C/C++ (puteţi scrie OOP).

Nu există “main” şi, programul executat de Arduino,

asemeni sistemului de operare a unui calculator, nu se

“termină” niciodată – decât când s-a oprit alimentarea.

În fapt, Arduino funcţionează ca un PC la scară mică.

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO – programare

Structura unui program este urmatoarea:

- o secţiune pt declararea variablelor (globale)

- o secţiune de setup (ce va fi executată o singură dată)

- o secţiune loop ce va fi executată la nesfârşit

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO – programare

Vestea bună: pentru fiecare componentă de care aveţi

nevoie în proiectul vostru găsiţi aproape sigur drivere

(biblioteci ce vă uşurează munca cu echipamentul

respectiv).

Vestea rea: nu vă punctăm ce au făcut alţii :D

Cosmin Vârlan – Facultatea de Informatică 2016

Arduino UNO - miscelaneous

Cosmin Vârlan – Facultatea de Informatică 2016

Buton Reset

Arduino UNO - miscelaneous

Cosmin Vârlan – Facultatea de Informatică 2016

Programatorul USB

ATMEGA8U2

Arduino UNO - miscelaneous

Cosmin Vârlan – Facultatea de Informatică 2016

Oscilator 16Khz

(inima arduino-ului)

Arduino UNO - miscelaneous

Cosmin Vârlan – Facultatea de Informatică 2016

Led pin d13

Arduino UNO - miscelaneous

Cosmin Vârlan – Facultatea de Informatică 2016

Led pin TX

Arduino UNO - miscelaneous

Cosmin Vârlan – Facultatea de Informatică 2016

Led pin RX

Cosmin Vârlan

Referinţe

https://

CosminVârlan – Facultatea de Informatică 2016