SlideShare uma empresa Scribd logo
1 de 54
Un sistema di sviluppo basato su
microcontrollore Atmel AVR
PaoloP
http://forum.arduino.cc/index.php?action=profile;u=58300
Argomenti
 Architettura generale dei microcontrollori
 Ambiente di sviluppo integrato
 Caratteristiche e elementi di Arduino UNO
 Principali caratteristiche del ATmega328P
 Concetti di porte e pin del microcontrollore
 Istruzioni per comandare i pin del microcontrollore
Il Team Arduino
Martino – Mellis – Cuartielles – Igoe – Banzi
Arduino con interfaccia RS-232
Il primo prototipo funzionante di Arduino
Il prototipo “zero” di Arduino, “quando
ancora si chiamava Programma 2003”
Arduino NG (Nuova Generazione)
Arduino Duemilanove
Arduino Uno Arduino Uno R3
http://arduino.cc/en/Main/Products
Cos’è Arduino?
 Piattaforma di sviluppo open source
 Open Source Hardware
 Open Source Software
 Economica e facilmente reperibile
 Espandibile tramite «shield»
https://github.com/arduino/Arduino
Open Software
http://arduino.cc/en/Main/ArduinoBoardUno
Open Hardware
Sistema di espansione a shield
http://shieldlist.org/
Prima di Arduino…
Computer
• Software
• Eclipse
• AVR Studio 4
•Porte
• Serial
• Parallel
• USB
Programmatore
• Interfaccia
• JTAG/ICE
• ISP
•Programmatore
• Bit-Bang
• ICSP
• AVRISP Mk II
Microcontrollore
• Versione
•DIP
•SOIC
•QFN
•Funzioni
•ADC/DAC
•PWM
•USB
Arduino Uno R3
LED
Connettore
USB
Jack Alimentazione
Connettori Pin DigitaliPulsante di Riavvio
Microcontrollore
AVR
ATmega328P
Connettori Pin Analogici
Connettori alimentazione
Convertitore
USB-Seriale
Arduino IDE (integrated development environment)
 L'ambiente di sviluppo integrato
Arduino rende semplice la scrittura
di codice e caricarlo sulla scheda.
 Funziona su Windows, Mac OS X e
Linux.
 L'ambiente è scritto in Java e basato
su Processing, avr-gcc e altri software
open source.
Il linguaggio di Arduino
 Linguaggio C/C++
 Sintassi semplificata da funzioni di supporto alla programmazione
 Astrazione dei nomi dei pin, passaggio ai numeri
 Facile da imparare e potente
 Facilità di riutilizzo del codice C per altri progetti
 Librerie scritte in C/C++
 Moltissimo codice di esempio (Tutorial – Playground)
 Moltissime librerie già pronte (GitHub – GoogleCode)
Parole chiave del C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Le funzioni di Arduino
Digital I/O
pinMode()
digitalWrite()
digitalRead()
Analog I/O
analogReference()
analogRead()
analogWrite() - PWM
Due only
analogReadResolution()
analogWriteResolution()
Advanced I/O
tone()
noTone()
shiftOut()
shiftIn()
pulseIn()
Time
millis()
micros()
delay()
delayMicroseconds()
Math
min()
max()
abs()
constrain()
map()
pow()
sqrt()
Trigonometry
sin()
cos()
tan()
Random Numbers
randomSeed()
random()
Bits and Bytes
lowByte()
highByte()
bitRead()
bitWrite()
bitSet()
bitClear()
bit()
External Interrupts
attachInterrupt()
detachInterrupt()
Interrupts
interrupts()
noInterrupts()
Communication
Serial
Stream
USB (Leonardo and Due only)
Keyboard
Mouse
http://it.wikipedia.org/wiki/Microcontrollore
Microcontrollore
In elettronica digitale il microcontrollore o microcontroller o MCU (MicroController
Unit) è un dispositivo elettronico integrato su singolo chip, nato come evoluzione
alternativa al Microprocessore ed utilizzato generalmente in sistemi embedded ovvero
per applicazioni specifiche di controllo digitale.
ANALOG
INPUTS
AVR
 Sviluppati da Atmel nel 1996
 Famiglia di Microcontrollori RISC
(reduced instruction set computer)
 Istruzioni a lunghezza fissa, accesso alla memoria di tipo load-store con
32 registri general-purpose
 Pipeline a due stadi per velocizzare l’esecuzione
 Esecuzione della maggior parte delle istruzioni in un solo ciclo di clock
 Fino a 12 volte più veloce di una architettura standard CISC
 Architettura Harvard
http://it.wikipedia.org/wiki/Architettura_di_von_Neumann
Architettura Von Neumann
http://it.wikipedia.org/wiki/Architettura_Harvard
Architettura Harvard
Surveyor SRV-1 Blackfin Robot
AVR
 Memoria Flash programmabile, RAM, EEPROM interne
 Sistema di programmazione interno (ISP)
 Varietà di periferiche: I/O digitali, ADC, Timer, UART, RTC timer, pulse width
modulator (PWM)…
 Funzionamento fino a 20MHz
 Ampia gamma di tensioni di funzionamento: da 1.8 V a 6.0 V.
 Package variabile da 8 pin fino a 64 pin
 Famiglie
 ATtiny25-45-85, ATtiny24-44-84, ATtiny2313-4313 ...
 ATmega88, ATmega168, ATmega328P ...
Atmel ATmega328P
Versione PDIP
Plastic Dual In-line Package
Versione SMD
Surface-Mount Device
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-
328-328P_datasheet.pdf
Caratteristiche ATmega328P
http://arduino.cc/en/Main/ArduinoBoardUno
Caratteristiche Arduino Uno
Tensione di lavoro dei pin
 I Microcontrollori sono fondamentalmente dei dispositivi digitali dove
l’informazione è ‘codificata’ in due stati discreti:
 HIGH or LOW (stato logici: 1 oppure 0)
Tensioni
 5 V (per HIGH)
 0 V (per LOW)
 3.3 V (per HIGH)
 0 V (per LOW)
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-
328-328P_datasheet.pdf
Valori massimi
Porte e Pin del Microcontrollore
Costituiscono il canale di
comunicazione del flusso di
informazioni da e per il
microcontrollore
Es. PORTB
• Pins PB0 – PB7
• Possono non essere contigui
• Spesso sono bidirezionali
Schema a blocchi - Architettura interna ATmega328
Schema ATmega328 PDIP
http://forum.arduino.cc/index.php/topic,146315.0.html
Nome
Pin
Funzioni
Speciali
Numero
Pin
http://forum.arduino.cc/index.php/topic,146315.0.html
Schema atmega328 SMD
Periferiche interne
• Memoria Flash
• Memoria RAM
• Memoria EEPROM
• WatchDog Timer
• Interfaccia Seriale
• Interfaccia SPI
• Interfaccia I2C
• Convertitore Analogico – Digitale
• Timers
• Porte/Pin
Input
Output
Particolare della
Porta D
Direzione dei dati nelle Porte e Pin
 Input
 Quando si prendono le informazioni dal mondo esterno (sensori)
verso la MCU
 Output
 Quando si invia un segnale per cambiare lo stato di un qualcosa di
esterno alla MCU (accendere o spegnere un led, un motore, etc.)
 all’accensione o al Reset i pin sono impostati di default come input
 da programma è possibile cambiare la direzione e lo stato dei pin in
qualsiasi momento
 ogni porta I/O ha associati dei registri di memoria
Registri di memoria I/O
 SREG: Status Register
 SP: Stack Pointer Register
 GIMSK: General Interrupt Mask Register
 GIFR: General Interrupt Flag Register
 MCUCR: MCU General Control Register
 MCUSR: MCU Status Register
 TCNTO: Timer/Counter 0 Register
 TCCR0A: Timer/Counter 0 Control Register A
 TCCR0B: Timer/Counter 0 Control Register B
 OCR0A: Timer/Counter 0 Output Compare
Register A
 OCR0B: Timer/Counter 0 Output Compare
Register B
 TIMSK0: Timer/Counter 0 Interrupt Mask
Register
 TIFR0: Timer/Counter 0 Interrupt Flag Register
 EEAR: EEPROM Address Register
• EEDR: EEPROM Data Register
• EECR: EEPROM Control Register
• PORTB: PortB Data Register
• DDRB: PortB Data Direction Register
• PINB: Input Pins on PortB
• PORTD: PortD Data Register
• DDRD: PortD Data Direction Register
• PIND: Input Pins on PortD
• SPI I/O Data Register
• SPI Status Register
• SPI Control Register
• UART I/O Data Register
• UART Status Register
• UART Control Register
• UART Baud Rate Register
• ACSR: Analog Comparator Control and Status
Register
Nell'architettura dei calcolatori un registro è una piccola parte di memoria utilizzata per velocizzare l'esecuzione dei programmi fornendo un accesso
rapido ai valori usati più frequentemente, tipicamente, i valori correntemente in uso in una determinata parte di un calcolo. La maggior parte delle
moderne architetture dei computer (RISC, o più genericamente "architetture load-store") è basata su un'architettura a pipeline che trae beneficio dal
limitare l'accesso in memoria alle sole istruzioni load e store, utilizzando soltanto registri e costanti per l'esecuzione di tutte le altre istruzioni.
Registri della Porta B
PORTB: PortB Data Register
DDRB: PortB Data Direction Register
PINB: Pins Input on PortB
Bit 7 6 5 4 3 2 1 0
Bit 7 6 5 4 3 2 1 0
Bit 7 6 5 4 3 2 1 0
Registri di una Porta
Ciascuna Porta I/O ha associati 3 registri:
1. DDRx (dove “x” è A, B, C…)
 Data Direction Register Port x
 Determina quali pin della porta sono input (0) e quali sono output (1)
DDRB = 0x02; /* imposta il secondo pin della porta B come output” */
2. PORTx
 Port Driver Register
PORTB = 0x02; /* imposta il secondo pin della porta a livello alto e azzera gli altri */
3. PINx
 Port Pins Registers
 Legge contemporaneamente lo stato di tutti e 8 i pin della porta
unsigned short int x;
x = PINB; /* Scrive lo stato della porta B nella variabile x */
Pilotare un LED (blink)
#include <avr/io.h>
#include <avr/delay.h>
int main(void)
{
DDRB = (1<<DDRB5);
PORTB = (1<<PORTB5);
while(1)
{
_delay_ms( 3000);
PORTB = b00000000;
_delay_ms( 3000);
PORTB = b00010000;
}
return 0;
}
ATmega 328P stand-alone
Struttura di UNO sketch
 Un programma su Arduino == ‘sketch’
 Deve obbligatoriamente avere:
 setup()
 loop()
 setup()
 Configura il modo dei pin
 loop()
 Corpo principale del programma
impostato come ciclo infinito
 Come un while(1) {…}
 Dov’è la funzione main() ?
/* Blink
Turns on an LED on for one second, then off for one
second, repeatedly.
This example code is in the public domain.
*/
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is
the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by
making the voltage LOW
delay(1000); // wait for a second
}
MAIN.cpp
#include <Arduino.h>
int main(void) {
init();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun)
serialEventRun();
}
return 0;
}
 Semplificazioni dell’IDE
nasconde:
 Main.cpp
 Prototipi delle funzioni
 Gestione degli #include
Impostare la direzione di un pin
 Con Arduino IDE
 pinMode(pin_no., dir)
Es. impostare il pin 3 di Arduino (PD3) come uscita
 pinMode(3, OUTPUT);
Nota: un pin alla volta
Supponiamo di voler impostare i pin 3, 5 e 7 (PD3, PD5 e PD7) come
uscite.
Come possiamo fare?
Esempio 1
 Arduino IDE  Registri
 Impostare i pin 3, 5 e 7 (PD3, PD5 e PD7) come uscite
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT);
DDRD = 0b10101000;
or
DDRD = 0xA8;
or
DDRD | = 1<<PD7 | 1<<PD5 | 1<<PD3;
PINMODE()
void pinMode (uint8_t pin, uint8_t mode) {
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *reg, *out;
if (port == NOT_A_PIN) return;
// JWS: can I let the optimizer do this?
reg = portModeRegister(port);
out = portOutputRegister(port);
if (mode == INPUT) {
uint8_t oldSREG = SREG;
cli();
*reg &= ~bit;
*out &= ~bit;
SREG = oldSREG;
} else if (mode == INPUT_PULLUP) {
uint8_t oldSREG = SREG;
cli();
*reg &= ~bit;
*out |= bit;
SREG = oldSREG;
} else {
uint8_t oldSREG = SREG;
cli();
*reg |= bit;
SREG = oldSREG;
}
}
Uso di un pin per accendere un LED
 Accendiamo un LED connesso al pin 7 di
Arduino (PD7) (occhio alla resistenza!)
 Come si deve impostare la direzione del pin
7 (PD7)?
 pinMode(__, ______);
 Accendiamo il LED
 digitalWrite(7, HIGH);
 Spegniamo il LED
 digitalWrite(7, LOW);
ATmega328
Arduino
pin 7
(PD7)
Esempio 2
 Arduino  Registri
 Impostare i pin 0 e 1 (PD0 e PD1) come uscite con un livello del segnale
ALTO
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
DDRD = b00000011;
PORTD = b00000011;
o
DDRD = 0x03;
PORTD = 0x03;
oppure
DDRD | = 1<<PD1 | 1<<PD0;
PORTD | = 1<<PD1 | 1<<PD0;
Digitalwrite()
void digitalWrite (uint8_t pin, uint8_t val) {
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
PIN, sensori e resistenze di pull-up - 1
 Usiamo un pulsante come sensore
 Vogliamo leggere lo stato del pulsante
 Qual è la direzione da attribuire al pin 3
di Arduino (PD3)?
 pinMode(__, ______);
 Qual è la tensione sul pin PD3 quanto il
contatto è chiuso?
 Qual è la tensione sul pin PD3 quanto il
contatto è aperto?
 Indeterminata!
ATmega328
Arduino
pin 3
(PD3)
PIN, sensori e resistenze di pull-up - 2
 Forniamo una tensione sul pin PD3 per
determinare lo stato attivando la resistenza di
pull-up
 Impostiamo PD3 come input-pullup:
 pinMode(3, INPUT);
 digitalWrite(3 ,HIGH);
oppure
 pinMode(3, INPUT_PULLUP);
 Che tensione leggero sul pin PD3
quanto il pulsante è aperto?
 VTG
 Che tensione leggero sul pin PD3
quanto il pulsante è chiuso?
 GND
ATmega328
PD3
VTG= +5V
0
1
PIN, sensori e resistenze di pull-up - 3
 Spegniamo la resistenza di pull-up
 Dopo aver impostato PD3 come input:
 pinMode(3, INPUT);
 …….
 digitalWrite(3, LOW);
ATmega328
PD3
VTG= +5V
0
1
PIN, sensori e resistenze di pull-up - 4
‘Weak Drive’
 Settando il pin come input e attivando la
resistenza di pull-up interna la corrente in
uscita dal pin è debole.
 Il valore tipico delle resistenze di pull-up per
l’ATmega328 è tra i 20 e 50 kΩ
ATmega328
PD3
VTG= +5V
0
1
iweak
Esempio 3
 Arduino  Registri
 Impostare i pin 0 e 1 (PD0 e PD1) come ingresso attivando la resistenza
di pull-up
pinMode(0, INPUT);
pinMode(1, INPUT);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
DDRD = 0; // all PORTD pins inputs
PORTD = b00000011;
o
PORTD = 0x03;
oppure
DDRD & = ~(1<<PD1 | 1<<PD0);
PORTD | = (1<<PD1 | 1<<PD0);
oppure
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
Risorse
 www.arduino.cc
 www.atmel.com/avr
 en.wikipedia.org/wiki/Arduino
 camillomiller.com/arduino/leggi-online.html
 forum.arduino.cc
forum.arduino.cc
forum.arduino.cc

Mais conteúdo relacionado

Mais procurados

Verilog Lecture2 thhts
Verilog Lecture2 thhtsVerilog Lecture2 thhts
Verilog Lecture2 thhtsBéo Tú
 
Memory banking-of-8086-final
Memory banking-of-8086-finalMemory banking-of-8086-final
Memory banking-of-8086-finalEstiak Khan
 
2019 3 testing and verification of vlsi design_sta
2019 3 testing and verification of vlsi design_sta2019 3 testing and verification of vlsi design_sta
2019 3 testing and verification of vlsi design_staUsha Mehta
 
Physical design-complete
Physical design-completePhysical design-complete
Physical design-completeMurali Rai
 
Verilog Lecture4 2014
Verilog Lecture4 2014Verilog Lecture4 2014
Verilog Lecture4 2014Béo Tú
 
Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)
Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)
Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)Drew Fustini
 
ADC - Analog to Digital Conversion on AVR microcontroller Atmega16
ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16
ADC - Analog to Digital Conversion on AVR microcontroller Atmega16Robo India
 
Ch8 (1) morris mano
Ch8 (1) morris manoCh8 (1) morris mano
Ch8 (1) morris manoKIRTI89
 
Advanced pipelining
Advanced pipeliningAdvanced pipelining
Advanced pipelininga_spac
 
Basic electronics
Basic electronicsBasic electronics
Basic electronicsMantra VLSI
 
Sta by usha_mehta
Sta by usha_mehtaSta by usha_mehta
Sta by usha_mehtaUsha Mehta
 
Introduction of testing and verification of vlsi design
Introduction of testing and verification of vlsi designIntroduction of testing and verification of vlsi design
Introduction of testing and verification of vlsi designUsha Mehta
 
8085 microprocessor architecture
8085 microprocessor architecture8085 microprocessor architecture
8085 microprocessor architectureArashdeepkaur16
 
Full custom digital ic design of priority encoder
Full custom digital ic design of priority encoderFull custom digital ic design of priority encoder
Full custom digital ic design of priority encoderVishesh Thakur
 

Mais procurados (20)

Verilog Lecture2 thhts
Verilog Lecture2 thhtsVerilog Lecture2 thhts
Verilog Lecture2 thhts
 
Memory banking-of-8086-final
Memory banking-of-8086-finalMemory banking-of-8086-final
Memory banking-of-8086-final
 
2019 3 testing and verification of vlsi design_sta
2019 3 testing and verification of vlsi design_sta2019 3 testing and verification of vlsi design_sta
2019 3 testing and verification of vlsi design_sta
 
Physical design-complete
Physical design-completePhysical design-complete
Physical design-complete
 
Verilog Lecture4 2014
Verilog Lecture4 2014Verilog Lecture4 2014
Verilog Lecture4 2014
 
Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)
Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)
Linux on RISC-V with Open Source Hardware (Open Source Summit Japan 2020)
 
ADC - Analog to Digital Conversion on AVR microcontroller Atmega16
ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16
ADC - Analog to Digital Conversion on AVR microcontroller Atmega16
 
Ch8 (1) morris mano
Ch8 (1) morris manoCh8 (1) morris mano
Ch8 (1) morris mano
 
Clock Distribution
Clock DistributionClock Distribution
Clock Distribution
 
Advanced pipelining
Advanced pipeliningAdvanced pipelining
Advanced pipelining
 
Basic electronics
Basic electronicsBasic electronics
Basic electronics
 
Sta by usha_mehta
Sta by usha_mehtaSta by usha_mehta
Sta by usha_mehta
 
verilog code
verilog codeverilog code
verilog code
 
combinational-circuit (1).ppt
combinational-circuit (1).pptcombinational-circuit (1).ppt
combinational-circuit (1).ppt
 
Introduction of testing and verification of vlsi design
Introduction of testing and verification of vlsi designIntroduction of testing and verification of vlsi design
Introduction of testing and verification of vlsi design
 
VLSI & E-CAD Lab Manual
VLSI & E-CAD Lab ManualVLSI & E-CAD Lab Manual
VLSI & E-CAD Lab Manual
 
Math Co-processor 8087
Math Co-processor 8087Math Co-processor 8087
Math Co-processor 8087
 
8085 microprocessor architecture
8085 microprocessor architecture8085 microprocessor architecture
8085 microprocessor architecture
 
Transition fault detection
Transition fault detectionTransition fault detection
Transition fault detection
 
Full custom digital ic design of priority encoder
Full custom digital ic design of priority encoderFull custom digital ic design of priority encoder
Full custom digital ic design of priority encoder
 

Destaque

Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Michele Maffucci
 
Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Michele Maffucci
 
Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Michele Maffucci
 
Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Michele Maffucci
 
Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Michele Maffucci
 
Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Michele Maffucci
 
Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Michele Maffucci
 

Destaque (7)

Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4
 
Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011
 
Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5
 
Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3
 
Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6
 
Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2
 
Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1
 

Semelhante a Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel AVR - Paolo Paolucci

Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollorisamu97
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad ArduinoSimone Lusenti
 
Presentazione
PresentazionePresentazione
Presentazionecesario
 
Corso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino GenuinoCorso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino GenuinoMauro Alfieri
 
Corso Arduino Base - MUST
Corso Arduino Base - MUSTCorso Arduino Base - MUST
Corso Arduino Base - MUSTOPS Italia
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileCommit University
 
An IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionAn IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionJennifer De Filicaia
 
Open Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoOpen Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoRiccardo Lemmi
 
Lezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 oreLezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 oreMirko Mancin
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acDavide Mercanti
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteMirco Sbrollini
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embeddedDaniele Costarella
 
Telemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoTelemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoVincenzo Virgilio
 

Semelhante a Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel AVR - Paolo Paolucci (20)

Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
 
Introduzione ad Arduino del Maker DevLab
Introduzione ad Arduino del Maker DevLabIntroduzione ad Arduino del Maker DevLab
Introduzione ad Arduino del Maker DevLab
 
Il pic 16 f84a
Il pic 16 f84aIl pic 16 f84a
Il pic 16 f84a
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad Arduino
 
Presentazione
PresentazionePresentazione
Presentazione
 
Arduino ICT2016 [IT]
Arduino ICT2016 [IT]Arduino ICT2016 [IT]
Arduino ICT2016 [IT]
 
Corso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino GenuinoCorso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino Genuino
 
Corso Arduino Base - MUST
Corso Arduino Base - MUSTCorso Arduino Base - MUST
Corso Arduino Base - MUST
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore Basile
 
An IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionAn IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotion
 
Open Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoOpen Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italiano
 
Lezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 oreLezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 ore
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolante
 
Arduino - Le basi per iniziare nel mondo IoT
Arduino - Le basi per iniziare nel mondo IoTArduino - Le basi per iniziare nel mondo IoT
Arduino - Le basi per iniziare nel mondo IoT
 
Arduino primo v1
Arduino primo v1Arduino primo v1
Arduino primo v1
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embedded
 
Arduino galileo edison_udoo
Arduino galileo edison_udooArduino galileo edison_udoo
Arduino galileo edison_udoo
 
Telemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoTelemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marino
 
Arduino base
Arduino baseArduino base
Arduino base
 

Mais de Sardegna Ricerche

Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...
Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...
Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...Sardegna Ricerche
 
PRELuDE - La valutazione del comfort termoigrometrico con sensori non invasivi
PRELuDE - La valutazione del comfort termoigrometrico con sensori non invasiviPRELuDE - La valutazione del comfort termoigrometrico con sensori non invasivi
PRELuDE - La valutazione del comfort termoigrometrico con sensori non invasiviSardegna Ricerche
 
PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...
PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...
PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...Sardegna Ricerche
 
PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...
PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...
PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...Sardegna Ricerche
 
PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...
PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...
PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...Sardegna Ricerche
 
Il progetto PRELuDE, attività e risultati raggiunti
Il progetto PRELuDE, attività e risultati raggiuntiIl progetto PRELuDE, attività e risultati raggiunti
Il progetto PRELuDE, attività e risultati raggiuntiSardegna Ricerche
 
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...Sardegna Ricerche
 
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...Sardegna Ricerche
 
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...Sardegna Ricerche
 
Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019
Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019
Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019Sardegna Ricerche
 
La soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël Sonney
La soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël SonneyLa soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël Sonney
La soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël SonneySardegna Ricerche
 
Introduzione AIAS - Alessandra Scognamiglio
Introduzione AIAS - Alessandra ScognamiglioIntroduzione AIAS - Alessandra Scognamiglio
Introduzione AIAS - Alessandra ScognamiglioSardegna Ricerche
 
L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...
L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...
L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...Sardegna Ricerche
 
Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...
Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...
Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...Sardegna Ricerche
 
Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...
Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...
Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...Sardegna Ricerche
 
Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...
Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...
Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...Sardegna Ricerche
 
Digitalizzazione del sistema energetico - M.Gawronska
Digitalizzazione del sistema energetico - M.GawronskaDigitalizzazione del sistema energetico - M.Gawronska
Digitalizzazione del sistema energetico - M.GawronskaSardegna Ricerche
 
Esempi applicativi di impiego dell’energia termica nelle microreti
Esempi applicativi di impiego dell’energia termica nelle microretiEsempi applicativi di impiego dell’energia termica nelle microreti
Esempi applicativi di impiego dell’energia termica nelle microretiSardegna Ricerche
 
“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...
“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...
“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...Sardegna Ricerche
 

Mais de Sardegna Ricerche (20)

Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...
Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...
Progetto PRELuDE PRotocollo ELaborazione Dati per l'Efficienza Energetica in ...
 
PRELuDE - La valutazione del comfort termoigrometrico con sensori non invasivi
PRELuDE - La valutazione del comfort termoigrometrico con sensori non invasiviPRELuDE - La valutazione del comfort termoigrometrico con sensori non invasivi
PRELuDE - La valutazione del comfort termoigrometrico con sensori non invasivi
 
PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...
PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...
PRELuDE - Rete di sensori innovativi per il monitoraggio energetico e control...
 
PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...
PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...
PRELuDE - La simulazione degli interventi migliorativi per il padiglione Mand...
 
PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...
PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...
PRELuDE - Il Building Information Modelling per la gestione dell'audit energe...
 
Il progetto PRELuDE, attività e risultati raggiunti
Il progetto PRELuDE, attività e risultati raggiuntiIl progetto PRELuDE, attività e risultati raggiunti
Il progetto PRELuDE, attività e risultati raggiunti
 
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
 
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Il progetto P...
 
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
PROGETTO PRELuDE3 PRotocollo ELaborazione Dati per l'Efficienza Energetica in...
 
Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019
Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019
Progetto PRELuDE: presentazione di Giuseppe Desogus in occasione di Sinnova 2019
 
La soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël Sonney
La soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël SonneyLa soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël Sonney
La soluzione di agrivoltaico dinamico_Insolight - Sardegna_Raphaël Sonney
 
Introduzione AIAS - Alessandra Scognamiglio
Introduzione AIAS - Alessandra ScognamiglioIntroduzione AIAS - Alessandra Scognamiglio
Introduzione AIAS - Alessandra Scognamiglio
 
L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...
L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...
L’impronta idrica della produzione di idrogeno elettrolitico su larga scala -...
 
Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...
Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...
Produzione di elettrodi migliorata per un’elettrolisi più efficiente - Albert...
 
Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...
Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...
Soluzioni per il trattamento dell’acqua destinata all’elettrolisi - Giulia Sp...
 
Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...
Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...
Soluzioni digitali per la flessibilità del sistema energetico - M.Repossi _ L...
 
Digitalizzazione del sistema energetico - M.Gawronska
Digitalizzazione del sistema energetico - M.GawronskaDigitalizzazione del sistema energetico - M.Gawronska
Digitalizzazione del sistema energetico - M.Gawronska
 
Avvio lavori - M.Gawronska
Avvio lavori - M.GawronskaAvvio lavori - M.Gawronska
Avvio lavori - M.Gawronska
 
Esempi applicativi di impiego dell’energia termica nelle microreti
Esempi applicativi di impiego dell’energia termica nelle microretiEsempi applicativi di impiego dell’energia termica nelle microreti
Esempi applicativi di impiego dell’energia termica nelle microreti
 
“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...
“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...
“Cogenerazione ad alto rendimento: opportunità per le PMI e la PA, aggiorname...
 

Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel AVR - Paolo Paolucci

  • 1. Un sistema di sviluppo basato su microcontrollore Atmel AVR PaoloP http://forum.arduino.cc/index.php?action=profile;u=58300
  • 2. Argomenti  Architettura generale dei microcontrollori  Ambiente di sviluppo integrato  Caratteristiche e elementi di Arduino UNO  Principali caratteristiche del ATmega328P  Concetti di porte e pin del microcontrollore  Istruzioni per comandare i pin del microcontrollore
  • 3. Il Team Arduino Martino – Mellis – Cuartielles – Igoe – Banzi
  • 4. Arduino con interfaccia RS-232 Il primo prototipo funzionante di Arduino Il prototipo “zero” di Arduino, “quando ancora si chiamava Programma 2003”
  • 5. Arduino NG (Nuova Generazione) Arduino Duemilanove
  • 6. Arduino Uno Arduino Uno R3 http://arduino.cc/en/Main/Products
  • 7. Cos’è Arduino?  Piattaforma di sviluppo open source  Open Source Hardware  Open Source Software  Economica e facilmente reperibile  Espandibile tramite «shield»
  • 12. Prima di Arduino… Computer • Software • Eclipse • AVR Studio 4 •Porte • Serial • Parallel • USB Programmatore • Interfaccia • JTAG/ICE • ISP •Programmatore • Bit-Bang • ICSP • AVRISP Mk II Microcontrollore • Versione •DIP •SOIC •QFN •Funzioni •ADC/DAC •PWM •USB
  • 13. Arduino Uno R3 LED Connettore USB Jack Alimentazione Connettori Pin DigitaliPulsante di Riavvio Microcontrollore AVR ATmega328P Connettori Pin Analogici Connettori alimentazione Convertitore USB-Seriale
  • 14. Arduino IDE (integrated development environment)  L'ambiente di sviluppo integrato Arduino rende semplice la scrittura di codice e caricarlo sulla scheda.  Funziona su Windows, Mac OS X e Linux.  L'ambiente è scritto in Java e basato su Processing, avr-gcc e altri software open source.
  • 15. Il linguaggio di Arduino  Linguaggio C/C++  Sintassi semplificata da funzioni di supporto alla programmazione  Astrazione dei nomi dei pin, passaggio ai numeri  Facile da imparare e potente  Facilità di riutilizzo del codice C per altri progetti  Librerie scritte in C/C++  Moltissimo codice di esempio (Tutorial – Playground)  Moltissime librerie già pronte (GitHub – GoogleCode)
  • 16. Parole chiave del C auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while
  • 17. Le funzioni di Arduino Digital I/O pinMode() digitalWrite() digitalRead() Analog I/O analogReference() analogRead() analogWrite() - PWM Due only analogReadResolution() analogWriteResolution() Advanced I/O tone() noTone() shiftOut() shiftIn() pulseIn() Time millis() micros() delay() delayMicroseconds() Math min() max() abs() constrain() map() pow() sqrt() Trigonometry sin() cos() tan() Random Numbers randomSeed() random() Bits and Bytes lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit() External Interrupts attachInterrupt() detachInterrupt() Interrupts interrupts() noInterrupts() Communication Serial Stream USB (Leonardo and Due only) Keyboard Mouse
  • 18. http://it.wikipedia.org/wiki/Microcontrollore Microcontrollore In elettronica digitale il microcontrollore o microcontroller o MCU (MicroController Unit) è un dispositivo elettronico integrato su singolo chip, nato come evoluzione alternativa al Microprocessore ed utilizzato generalmente in sistemi embedded ovvero per applicazioni specifiche di controllo digitale. ANALOG INPUTS
  • 19. AVR  Sviluppati da Atmel nel 1996  Famiglia di Microcontrollori RISC (reduced instruction set computer)  Istruzioni a lunghezza fissa, accesso alla memoria di tipo load-store con 32 registri general-purpose  Pipeline a due stadi per velocizzare l’esecuzione  Esecuzione della maggior parte delle istruzioni in un solo ciclo di clock  Fino a 12 volte più veloce di una architettura standard CISC  Architettura Harvard
  • 22. AVR  Memoria Flash programmabile, RAM, EEPROM interne  Sistema di programmazione interno (ISP)  Varietà di periferiche: I/O digitali, ADC, Timer, UART, RTC timer, pulse width modulator (PWM)…  Funzionamento fino a 20MHz  Ampia gamma di tensioni di funzionamento: da 1.8 V a 6.0 V.  Package variabile da 8 pin fino a 64 pin  Famiglie  ATtiny25-45-85, ATtiny24-44-84, ATtiny2313-4313 ...  ATmega88, ATmega168, ATmega328P ...
  • 23. Atmel ATmega328P Versione PDIP Plastic Dual In-line Package Versione SMD Surface-Mount Device
  • 26. Tensione di lavoro dei pin  I Microcontrollori sono fondamentalmente dei dispositivi digitali dove l’informazione è ‘codificata’ in due stati discreti:  HIGH or LOW (stato logici: 1 oppure 0) Tensioni  5 V (per HIGH)  0 V (per LOW)  3.3 V (per HIGH)  0 V (per LOW)
  • 28. Porte e Pin del Microcontrollore Costituiscono il canale di comunicazione del flusso di informazioni da e per il microcontrollore Es. PORTB • Pins PB0 – PB7 • Possono non essere contigui • Spesso sono bidirezionali
  • 29. Schema a blocchi - Architettura interna ATmega328
  • 32. Periferiche interne • Memoria Flash • Memoria RAM • Memoria EEPROM • WatchDog Timer • Interfaccia Seriale • Interfaccia SPI • Interfaccia I2C • Convertitore Analogico – Digitale • Timers • Porte/Pin
  • 34. Direzione dei dati nelle Porte e Pin  Input  Quando si prendono le informazioni dal mondo esterno (sensori) verso la MCU  Output  Quando si invia un segnale per cambiare lo stato di un qualcosa di esterno alla MCU (accendere o spegnere un led, un motore, etc.)  all’accensione o al Reset i pin sono impostati di default come input  da programma è possibile cambiare la direzione e lo stato dei pin in qualsiasi momento  ogni porta I/O ha associati dei registri di memoria
  • 35. Registri di memoria I/O  SREG: Status Register  SP: Stack Pointer Register  GIMSK: General Interrupt Mask Register  GIFR: General Interrupt Flag Register  MCUCR: MCU General Control Register  MCUSR: MCU Status Register  TCNTO: Timer/Counter 0 Register  TCCR0A: Timer/Counter 0 Control Register A  TCCR0B: Timer/Counter 0 Control Register B  OCR0A: Timer/Counter 0 Output Compare Register A  OCR0B: Timer/Counter 0 Output Compare Register B  TIMSK0: Timer/Counter 0 Interrupt Mask Register  TIFR0: Timer/Counter 0 Interrupt Flag Register  EEAR: EEPROM Address Register • EEDR: EEPROM Data Register • EECR: EEPROM Control Register • PORTB: PortB Data Register • DDRB: PortB Data Direction Register • PINB: Input Pins on PortB • PORTD: PortD Data Register • DDRD: PortD Data Direction Register • PIND: Input Pins on PortD • SPI I/O Data Register • SPI Status Register • SPI Control Register • UART I/O Data Register • UART Status Register • UART Control Register • UART Baud Rate Register • ACSR: Analog Comparator Control and Status Register Nell'architettura dei calcolatori un registro è una piccola parte di memoria utilizzata per velocizzare l'esecuzione dei programmi fornendo un accesso rapido ai valori usati più frequentemente, tipicamente, i valori correntemente in uso in una determinata parte di un calcolo. La maggior parte delle moderne architetture dei computer (RISC, o più genericamente "architetture load-store") è basata su un'architettura a pipeline che trae beneficio dal limitare l'accesso in memoria alle sole istruzioni load e store, utilizzando soltanto registri e costanti per l'esecuzione di tutte le altre istruzioni.
  • 36. Registri della Porta B PORTB: PortB Data Register DDRB: PortB Data Direction Register PINB: Pins Input on PortB Bit 7 6 5 4 3 2 1 0 Bit 7 6 5 4 3 2 1 0 Bit 7 6 5 4 3 2 1 0
  • 37. Registri di una Porta Ciascuna Porta I/O ha associati 3 registri: 1. DDRx (dove “x” è A, B, C…)  Data Direction Register Port x  Determina quali pin della porta sono input (0) e quali sono output (1) DDRB = 0x02; /* imposta il secondo pin della porta B come output” */ 2. PORTx  Port Driver Register PORTB = 0x02; /* imposta il secondo pin della porta a livello alto e azzera gli altri */ 3. PINx  Port Pins Registers  Legge contemporaneamente lo stato di tutti e 8 i pin della porta unsigned short int x; x = PINB; /* Scrive lo stato della porta B nella variabile x */
  • 38. Pilotare un LED (blink) #include <avr/io.h> #include <avr/delay.h> int main(void) { DDRB = (1<<DDRB5); PORTB = (1<<PORTB5); while(1) { _delay_ms( 3000); PORTB = b00000000; _delay_ms( 3000); PORTB = b00010000; } return 0; } ATmega 328P stand-alone
  • 39. Struttura di UNO sketch  Un programma su Arduino == ‘sketch’  Deve obbligatoriamente avere:  setup()  loop()  setup()  Configura il modo dei pin  loop()  Corpo principale del programma impostato come ciclo infinito  Come un while(1) {…}  Dov’è la funzione main() ? /* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
  • 40. MAIN.cpp #include <Arduino.h> int main(void) { init(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; }  Semplificazioni dell’IDE nasconde:  Main.cpp  Prototipi delle funzioni  Gestione degli #include
  • 41. Impostare la direzione di un pin  Con Arduino IDE  pinMode(pin_no., dir) Es. impostare il pin 3 di Arduino (PD3) come uscita  pinMode(3, OUTPUT); Nota: un pin alla volta Supponiamo di voler impostare i pin 3, 5 e 7 (PD3, PD5 e PD7) come uscite. Come possiamo fare?
  • 42. Esempio 1  Arduino IDE  Registri  Impostare i pin 3, 5 e 7 (PD3, PD5 e PD7) come uscite pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(7, OUTPUT); DDRD = 0b10101000; or DDRD = 0xA8; or DDRD | = 1<<PD7 | 1<<PD5 | 1<<PD3;
  • 43. PINMODE() void pinMode (uint8_t pin, uint8_t mode) { uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin); volatile uint8_t *reg, *out; if (port == NOT_A_PIN) return; // JWS: can I let the optimizer do this? reg = portModeRegister(port); out = portOutputRegister(port); if (mode == INPUT) { uint8_t oldSREG = SREG; cli(); *reg &= ~bit; *out &= ~bit; SREG = oldSREG; } else if (mode == INPUT_PULLUP) { uint8_t oldSREG = SREG; cli(); *reg &= ~bit; *out |= bit; SREG = oldSREG; } else { uint8_t oldSREG = SREG; cli(); *reg |= bit; SREG = oldSREG; } }
  • 44. Uso di un pin per accendere un LED  Accendiamo un LED connesso al pin 7 di Arduino (PD7) (occhio alla resistenza!)  Come si deve impostare la direzione del pin 7 (PD7)?  pinMode(__, ______);  Accendiamo il LED  digitalWrite(7, HIGH);  Spegniamo il LED  digitalWrite(7, LOW); ATmega328 Arduino pin 7 (PD7)
  • 45. Esempio 2  Arduino  Registri  Impostare i pin 0 e 1 (PD0 e PD1) come uscite con un livello del segnale ALTO pinMode(0, OUTPUT); pinMode(1, OUTPUT); digitalWrite(0, HIGH); digitalWrite(1, HIGH); DDRD = b00000011; PORTD = b00000011; o DDRD = 0x03; PORTD = 0x03; oppure DDRD | = 1<<PD1 | 1<<PD0; PORTD | = 1<<PD1 | 1<<PD0;
  • 46. Digitalwrite() void digitalWrite (uint8_t pin, uint8_t val) { uint8_t timer = digitalPinToTimer(pin); uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin); volatile uint8_t *out; if (port == NOT_A_PIN) return; // If the pin that support PWM output, we need to turn it off // before doing a digital write. if (timer != NOT_ON_TIMER) turnOffPWM(timer); out = portOutputRegister(port); uint8_t oldSREG = SREG; cli(); if (val == LOW) { *out &= ~bit; } else { *out |= bit; } SREG = oldSREG; }
  • 47. PIN, sensori e resistenze di pull-up - 1  Usiamo un pulsante come sensore  Vogliamo leggere lo stato del pulsante  Qual è la direzione da attribuire al pin 3 di Arduino (PD3)?  pinMode(__, ______);  Qual è la tensione sul pin PD3 quanto il contatto è chiuso?  Qual è la tensione sul pin PD3 quanto il contatto è aperto?  Indeterminata! ATmega328 Arduino pin 3 (PD3)
  • 48. PIN, sensori e resistenze di pull-up - 2  Forniamo una tensione sul pin PD3 per determinare lo stato attivando la resistenza di pull-up  Impostiamo PD3 come input-pullup:  pinMode(3, INPUT);  digitalWrite(3 ,HIGH); oppure  pinMode(3, INPUT_PULLUP);  Che tensione leggero sul pin PD3 quanto il pulsante è aperto?  VTG  Che tensione leggero sul pin PD3 quanto il pulsante è chiuso?  GND ATmega328 PD3 VTG= +5V 0 1
  • 49. PIN, sensori e resistenze di pull-up - 3  Spegniamo la resistenza di pull-up  Dopo aver impostato PD3 come input:  pinMode(3, INPUT);  …….  digitalWrite(3, LOW); ATmega328 PD3 VTG= +5V 0 1
  • 50. PIN, sensori e resistenze di pull-up - 4 ‘Weak Drive’  Settando il pin come input e attivando la resistenza di pull-up interna la corrente in uscita dal pin è debole.  Il valore tipico delle resistenze di pull-up per l’ATmega328 è tra i 20 e 50 kΩ ATmega328 PD3 VTG= +5V 0 1 iweak
  • 51. Esempio 3  Arduino  Registri  Impostare i pin 0 e 1 (PD0 e PD1) come ingresso attivando la resistenza di pull-up pinMode(0, INPUT); pinMode(1, INPUT); digitalWrite(0, HIGH); digitalWrite(1, HIGH); DDRD = 0; // all PORTD pins inputs PORTD = b00000011; o PORTD = 0x03; oppure DDRD & = ~(1<<PD1 | 1<<PD0); PORTD | = (1<<PD1 | 1<<PD0); oppure pinMode(0, INPUT_PULLUP); pinMode(1, INPUT_PULLUP);
  • 52. Risorse  www.arduino.cc  www.atmel.com/avr  en.wikipedia.org/wiki/Arduino  camillomiller.com/arduino/leggi-online.html  forum.arduino.cc