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

54
Il Cuore di Arduino Un sistema di sviluppo basato su microcontrollore Atmel AVR PaoloP http://forum.arduino.cc/index.php?action=profile;u=5 8300

description

L'intervento di Paolo Paolucci durante l'Arduino Day, che si è tenuto il 29 marzo 2014 presso il FabLab Sardegna Ricerche, nella sede di Pula del Parco scientifico e tecnologico della Sardegna.

Transcript of 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 8. https://github.com/arduino/Arduino Open Software 9. http://arduino.cc/en/Main/ArduinoBoardUno Open Hardware 10. Sistema di espansione a shield 11. http://shieldlist.org/ 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 lesecuzione 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 20. http://it.wikipedia.org/wiki/Architettura_di_von_Neumann Architettura Von Neumann 21. http://it.wikipedia.org/wiki/Architettura_Harvard Architettura Harvard Surveyor SRV-1 Blackfin Robot 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 24. http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA- 328-328P_datasheet.pdf Caratteristiche ATmega328P 25. http://arduino.cc/en/Main/ArduinoBoardUno Caratteristiche Arduino Uno 26. Tensione di lavoro dei pin I Microcontrollori sono fondamentalmente dei dispositivi digitali dove linformazione 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) 27. http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA- 328-328P_datasheet.pdf Valori massimi 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 30. Schema ATmega328 PDIP http://forum.arduino.cc/index.php/topic,146315.0.html Nome Pin Funzioni Speciali Numero Pin 31. http://forum.arduino.cc/index.php/topic,146315.0.html Schema atmega328 SMD 32. Periferiche interne Memoria Flash Memoria RAM Memoria EEPROM WatchDog Timer Interfaccia Seriale Interfaccia SPI Interfaccia I2C Convertitore Analogico Digitale Timers Porte/Pin 33. Input Output Particolare della Porta D 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.) allaccensione 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 #include int main(void) { DDRB = (1