Il Cuore di ArduinoUn sistema di sviluppo basato su microcontrollore Atmel AVR
PaoloPhttp://forum.arduino.cc/index.php?action=profile;u=58300
ArgomentiArchitettura generale dei microcontrolloriAmbiente di sviluppo integratoCaratteristiche e elementi di Arduino UNOPrincipali caratteristiche del ATmega328PConcetti di porte e pin del microcontrollore Istruzioni per comandare i pin del microcontrollore
2
Il Team Arduino
Martino Mellis Cuartielles Igoe Banzi
Arduino con interfaccia RS-232
Il primo prototipo funzionante di ArduinoIl 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 sourceOpen Source HardwareOpen Source SoftwareEconomica e facilmente reperibileEspandibile tramite shield
https://github.com/arduino/ArduinoOpen Software
http://arduino.cc/en/Main/ArduinoBoardUnoOpen 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 VersioneDIPSOICQFN FunzioniADC/DACPWMUSB
12
Arduino Uno R3
LEDConnettore USBJack Alimentazione
Connettori Pin DigitaliPulsante di RiavvioMicrocontrolloreAVR
ATmega328PConnettori Pin AnalogiciConnettori 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 programmazioneAstrazione dei nomi dei pin, passaggio ai numeriFacile da imparare e potenteFacilit di riutilizzo del codice C per altri progettiLibrerie scritte in C/C++Moltissimo codice di esempio (Tutorial Playground)Moltissime librerie gi pronte (GitHub GoogleCode)
Parole chiave del Cautodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifstaticwhile
Le funzioni di ArduinoDigital I/OpinMode()digitalWrite()digitalRead()
Analog I/OanalogReference()analogRead()analogWrite() -PWM
Due onlyanalogReadResolution()analogWriteResolution()
Advanced I/Otone()noTone()shiftOut()shiftIn()pulseIn()
Timemillis()micros()delay()delayMicroseconds()
Mathmin()max()abs()constrain()map()pow()sqrt()
Trigonometrysin()cos()tan()
Random NumbersrandomSeed()random()
Bits and ByteslowByte()highByte()bitRead()bitWrite()bitSet()bitClear()bit()
External InterruptsattachInterrupt()detachInterrupt()
Interruptsinterrupts()noInterrupts()
CommunicationSerialStream
USB (Leonardo and Due only)KeyboardMouse
http://it.wikipedia.org/wiki/MicrocontrolloreMicrocontrollore
Inelettronica digitaleilmicrocontrolloreomicrocontrolleroMCU(MicroController Unit) un dispositivo elettronico integratosu singolochip, nato come evoluzione alternativa alMicroprocessoreed utilizzato generalmente insistemi embedded ovvero per applicazioni specifiche dicontrollo digitale.
ANALOGINPUTS
AVRSviluppati da Atmel nel 1996Famiglia di Microcontrollori RISC(reduced instruction set computer)Istruzioni a lunghezza fissa, accesso alla memoria di tipo load-store con 32 registri general-purposePipeline a due stadi per velocizzare lesecuzioneEsecuzione della maggior parte delle istruzioni in un solo ciclo di clockFino a 12 volte pi veloce di una architettura standard CISCArchitettura Harvard
http://it.wikipedia.org/wiki/Architettura_di_von_NeumannArchitettura Von Neumann
http://it.wikipedia.org/wiki/Architettura_HarvardArchitettura Harvard
Surveyor SRV-1 Blackfin Robot
AVRMemoria Flash programmabile, RAM, EEPROM interneSistema di programmazione interno (ISP)Variet di periferiche: I/O digitali, ADC, Timer, UART, RTC timer, pulse width modulator (PWM)Funzionamento fino a 20MHzAmpia gamma di tensioni di funzionamento: da 1.8 V a 6.0 V.Package variabile da 8 pin fino a 64 pin
FamiglieATtiny25-45-85, ATtiny24-44-84, ATtiny2313-4313 ...ATmega88, ATmega168, ATmega328P ...
Atmel ATmega328P
Versione PDIPPlastic Dual In-line Package
Versione SMDSurface-Mount Device
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdfCaratteristiche ATmega328P
http://arduino.cc/en/Main/ArduinoBoardUnoCaratteristiche Arduino Uno
Tensione di lavoro dei pinI Microcontrollori sono fondamentalmente dei dispositivi digitali dove linformazione codificata in due stati discreti:HIGH or LOW (stato logici: 1 oppure 0)
Tensioni5 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.pdfValori massimi
Porte e Pin del MicrocontrolloreCostituiscono il canale di comunicazione del flusso di informazioni da e per il microcontrollore
Es. PORTBPins PB0 PB7Possono non essere contiguiSpesso sono bidirezionali
28
Schema a blocchi - Architettura interna ATmega328
Schema ATmega328 PDIP
http://forum.arduino.cc/index.php/topic,146315.0.html
Nome Pin
Funzioni Speciali
NumeroPin
http://forum.arduino.cc/index.php/topic,146315.0.htmlSchema atmega328 SMD
Periferiche interneMemoria FlashMemoria RAMMemoria EEPROMWatchDog TimerInterfaccia SerialeInterfaccia SPIInterfaccia I2CConvertitore Analogico DigitaleTimersPorte/Pin
Input
Output
Particolare della Porta D
Direzione dei dati nelle Porte e PinInputQuando si prendono le informazioni dal mondo esterno (sensori) verso la MCU
OutputQuando si invia un segnale per cambiare lo stato di un qualcosa di esterno alla MCU (accendere o spegnere un led, un motore, etc.)
allaccensione o al Reset i pin sono impostati di default come inputda programma possibile cambiare la direzione e lo stato dei pin in qualsiasi momentoogni porta I/O ha associati dei registri di memoria
34
Registri di memoria I/OSREG: Status RegisterSP: Stack Pointer RegisterGIMSK: General Interrupt Mask RegisterGIFR: General Interrupt Flag RegisterMCUCR: MCU General Control RegisterMCUSR: MCU Status RegisterTCNTO: Timer/Counter 0 RegisterTCCR0A: Timer/Counter 0 Control Register ATCCR0B: Timer/Counter 0 Control Register BOCR0A: Timer/Counter 0 Output Compare Register AOCR0B: Timer/Counter 0 Output Compare Register BTIMSK0: Timer/Counter 0 Interrupt Mask RegisterTIFR0: Timer/Counter 0 Interrupt Flag RegisterEEAR: EEPROM Address RegisterEEDR: EEPROM Data RegisterEECR: EEPROM Control RegisterPORTB: PortB Data RegisterDDRB: PortB Data Direction RegisterPINB: Input Pins on PortBPORTD: PortD Data RegisterDDRD: PortD Data Direction RegisterPIND: Input Pins on PortDSPI I/O Data RegisterSPI Status RegisterSPI Control RegisterUART I/O Data RegisterUART Status RegisterUART Control RegisterUART Baud Rate RegisterACSR: 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.
35
Registri della Porta B
PORTB: PortB Data RegisterDDRB: PortB Data Direction RegisterPINB: Pins Input on PortBBit76543210
Bit76543210
Bit76543210
Registri di una PortaCiascuna Porta I/O ha associati 3 registri:DDRx (dove x A, B, C)Data Direction Register Port xDetermina quali pin della porta sono input (0) e quali sono output (1)DDRB = 0x02; /* imposta il secondo pin della porta B come output */
PORTxPort Driver RegisterPORTB = 0x02; /* imposta il secondo pin della porta a livello alto e azzera gli altri */ PINxPort Pins RegistersLegge contemporaneamente lo stato di tutti e 8 i pin della portaunsigned short int x;x = PINB; /* Scrive lo stato della porta B nella variabile x */
37
Pilotare un LED (blink)#include #include
int main(void){DDRB = (1