Arduino Due – RTC interno

Pubblicatoil 20 maggio 2015 in Arduino | 0 commenti

Arduino Due – RTC interno

All’interno del processore ARM di Arduino Due è presente un modulo RTC (“Real Time Clock”, orologio in tempo reale) che permette di mantenere un preciso riferimento temporale. A differenza delle schede esterne, Arduino è sprovvisto di una batteria tampone ed è quindi necessario reimpostare data e orario ad ogni accensione. Per utilizzare l’RTC integrato è necessario fare uso di una libreria esterna, scaricabile al seguente link: https://github.com/MarkusLange/Arduino-Due-RTC-Library Il seguente è un esempio relativo alle funzioni base messe a disposizione dalla libreria. Interessante è anche la possibilità di impostare un allarme ad una data o un orario specifico. Arduino #include <rtc_clock.h> // Creazione RTC RTC_clock rtc(XTAL); char* giorni[]={"Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"}; void setup() { rtc.init(); // Inizializzazione rtc.set_time(19, 34, 0); // Ore, minuti, secondi rtc.set_date(20, 05, 2015); // Giorno, mese, anno rtc.set_alarmtime(19, 50, 15) // Impostazione sveglia rtc.attachalarm(sveglia); // Funzione da richiamare dalla sveglia (ore, minuti, secondi) // rtc.set_alarmdate (5, 21); // Sveglia in base al giorno (mese, giorno) Serial.begin(9600); } void loop() { // Ore Serial.print(rtc.get_hours()); Serial.print(":"); // Minuti Serial.print(rtc.get_minutes()); Serial.print(":"); // Secondi Serial.print(rtc.get_seconds()); Serial.print(", "); // Giorno della settimana Serial.print(giorni[rtc.get_day_of_week()-1]); Serial.print(", "); // Giorno del mese Serial.print(rtc.get_days()); Serial.print("-"); // Mese Serial.print(rtc.get_months()); Serial.print("-"); // Anno Serial.print(rtc.get_years()); Serial.println(""); delay (1000); } void sveglia() { Serial.println("Sveglia attivata"); } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 #include <rtc_clock.h> // Creazione RTCRTC_clock rtc(XTAL); char* giorni[]={"Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"}; void setup()  {  rtc.init();                   // Inizializzazione  rtc.set_time(19, 34, 0);      // Ore, minuti, secondi  rtc.set_date(20, 05, 2015);   // Giorno, mese, anno  rtc.set_alarmtime(19, 50, 15) // Impostazione sveglia  rtc.attachalarm(sveglia);     // Funzione da richiamare dalla sveglia (ore, minuti, secondi)  // rtc.set_alarmdate (5, 21); // Sveglia in base al giorno (mese, giorno)  Serial.begin(9600);} void loop() {  // Ore  Serial.print(rtc.get_hours());  Serial.print(":");    // Minuti  Serial.print(rtc.get_minutes());  Serial.print(":");   // Secondi  Serial.print(rtc.get_seconds());  Serial.print(", ");   // Giorno della settimana  Serial.print(giorni[rtc.get_day_of_week()-1]);  Serial.print(", ");   // Giorno del mese  Serial.print(rtc.get_days());  Serial.print("-");   // Mese  Serial.print(rtc.get_months());  Serial.print("-");   // Anno  Serial.print(rtc.get_years());  Serial.println("");   delay (1000);} void sveglia() {  Serial.println("Sveglia attivata");} Oltre a quelle mostrate sono presenti ulteriori funzioni, tutte rintracciabili all’interno del file “rtc_clock.h” e di immediata comprensione. Inoltre, assieme alla libreria vengono forniti anche degli esempi che ne illustrano in dettaglio le...

leggi...

Arduino Due – uM-FPU v3.1

Pubblicatoil 9 aprile 2015 in Arduino | 0 commenti

Arduino Due – uM-FPU v3.1

Con il processore ARM da 84 MHz, Arduino Due rappresenta un punto di svolta rispetto ai modelli precedenti, incrementando notevolmente la capacità di calcolo. Tuttavia, resta comunque possibile integrare ulteriori chip per estenderne le capacità ed effettuare, per esempio, dei calcoli parallelamente al lavoro eseguito da Arduino. In particolare, voglio prendere in esame una FPU prodotta da Micromega. Sebbene sia maggiormente utilizzata su schede come Arduino Uno, ho voluto integrare questo chip con la mia Due per poter effettuare, in modo totalmente trasparente ad Arduino, dei calcoli relativi a dei dati GPS ricevuti esternamente per poi fornire al programma principale solamente il risultato di tali operazioni. Per questioni di spazio sulla protoshield ho preferito optare per la versione a 32 bit della FPU (chiamata v3.1), anche se il produttore ha messo in commercio pure una versione a 64 bit, sicuramente più precisa nei calcoli. Il chip può interfacciarsi ad Arduino attraverso l’interfaccia SPI o quella I2C. In questo articolo prendiamo in esame solamente la prima strada, che è quella da me utilizzata. Per realizzare il progetto, è fondamentale una breadboard o, se ti senti più sicuro, una protoshield su cui saldare direttamente i componenti. I collegamenti da effettuare sono riportati a pagina 4, e successive, del datasheet (allegato a fine articolo). L’unica questione che mi sento di sottolineare dal punto di vista hardware è la necessità di utilizzare per l’alimentazione la linea a 3.3V, al fine di evitare di ricevere i 5V sui pin di Arduino (con conseguenti danni alla scheda). Per quanto riguarda la parte software, è possibile far eseguire alla FPU delle istruzioni inviate direttamente da Arduino o, per effettuare delle elaborazioni in parallelo, salvare delle funzioni direttamente nella memoria flash del chip e ottenere un risultato una volta elaborato. In entrambi i casi, tuttavia, ho trovato necessario modificare le librerie distribuita dal produttore al fine di adattarle alle caratteristiche di Arduino Due e garantire una completa compatibilità (ho corretto le definizioni dei pin e la velocità di comunicazione tramite SPI); le versioni aggiornate sono allegate a fine articolo assieme al datasheet. Per quanto riguarda il primo caso, sul sito ufficiale di Arduino è riportata una spiegazione delle principali funzioni utili ad interagire con la FPU e quello che segue è uno script che restituisce come risultato il valore della radice quadrata di 2. Arduino #include <SPI.h> #include <Fpu.h> #include <FpuSerial.h> void setup() { Serial.begin(9600); SPI.begin(); Fpu.begin(); if (Fpu.sync() == SYNC_CHAR) { FpuSerial.printVersion(); Serial.println(); } else { Serial.print("uM-FPU non rilevata"); while(1) ; } } void loop() { Fpu.write(SELECTA, 1, FSETI, 2, SQRT); Serial.print("Radice quadrata di 2 = "); FpuSerial.printFloatln(129); while(1); } 1234567891011121314151617181920212223242526 #include <SPI.h>#include <Fpu.h>#include <FpuSerial.h> void setup() {  Serial.begin(9600);   SPI.begin();  Fpu.begin();    if (Fpu.sync() == SYNC_CHAR)  {    FpuSerial.printVersion();    Serial.println();  } else {    Serial.print("uM-FPU non rilevata");    while(1) ;  }} void loop() {  Fpu.write(SELECTA, 1, FSETI, 2, SQRT);  Serial.print("Radice quadrata di 2 = ");  FpuSerial.printFloatln(129);    while(1);} I parametri inseribili nel comando Fpu.write sono definiti nell’Instruction Set della FPU. Per quanto riguarda il secondo caso del calcolo parallelo, sicuramente più utile con Arduino Due, bisogna necessariamente sfruttare l’IDE specifico per la FPU (scaricabile da qui) e il chip MAX3232 di cui avevo parlato in un precedente articolo (l’unica differenza consiste nello sfruttare i pin per la comunicazione seriale della FPU, anzichè quelli di Arduino). Nel mio caso, attraverso la stessa porta RS232 collego poi un ricevitore GPS (Garmin 17N, per la precisione) e, una volta elaborati i...

leggi...

Arduino Due – Comunicazione tramite RS232

Pubblicatoil 20 luglio 2014 in Arduino | 0 commenti

Arduino Due – Comunicazione tramite RS232

Ormai lo standard USB si è diffuso praticamente ovunque e quasi tutti i dispositivi ne hanno almeno una porta. La stessa scheda Arduino Due ha ben 2 porte Micro-USB: la prima, quella più vicina al connettore di alimentazione, è la Programming Port ed è di fatto una porta USB collegata a un convertitore USB-Seriale; la seconda, la Native Port, permette anche di far funzionare Arduino come periferica USB (emulando, per esempio, una tastiera o un mouse) o di collegare alla stessa scheda un dispositivo esterno. Prendendo in mano un PC di qualche anno fa, avrai sicuramente notato che sul retro sono presenti le cosiddette porte RS232 (chiamate anche COM), ossia connettori DB9 usati per una comunicazione seriale con gli altri dispositivi. Un tempo fondamentali, ora queste porte sono sempre più rare e hanno lasciato il posto a tecnologie più avanzate. Tuttavia, mi è recentemente capitato di voler collegare un ricevitore GPS (Garmin 17N, per la precisione) e per lo scambio dei dati era necessaria una comunicazione via RS232. Ovviamente il progetto non è vincolato al ricevitore GPS e la porta può essere usata per mettere in comunicazione Arduino con qualsiasi dispositivo. Tralasciando fili e materiale per le saldature, questo è il materiale che mi sono procurato: Arduino Due ProtoShield – non è una shield ufficiale, ma mi sento di consigliarla per l’ottima qualità e la difficoltà nel trovare una protoshield fatta apposta per Arduino Due. In alternativa potete anche montare tutto su una breadboard. Convertitore RS232-TTL – questa scheda fornisce già un connettore DB9 e, ben più importante, il chip MAX3232 (con relativi componenti per un corretto funzionamento). Per chi non volesse fare affidamento ad un convertitore già pronto, può invece comprare separatamente il chip MAX3232 (peraltro, la protoshield fornisce 2 piazzole per un’eventuale versione SOIC del chip) e 4 condensatori da 0.1uF. L’importante è che, sia con un convertitore già fatto o uno self-made, il chip sia il MAX3232, per la sua caratteristica di poter funzionare anche a 3.3V, elemento che molti altri, come ad esempio il famoso MAX232, non hanno. Se si acquista la scheda con chip e condensatori già saldati, è sufficiente collegare il pin VCC ai 3.3V di Arduino, GND a GND, e i pin RX e TX in base a come indicato dal venditore. Generalmente, comunque basta incrociare RX con TX (il pin TX della scheda va collegato all’RX di Arduino e il pin RX della scheda va collegato con il TX di Arduino). Lo schema più completo, da seguire invece in caso di acquisto dei singoli componenti, è il seguente (fai click per ingrandire):   Per quanto riguarda la parte hardware, aggiungo infine un link per il download del datasheet del MAX3232, nel caso in cui potesse tornare utile a qualcuno: MAX3222-MAX3241 Dal lato software, è sufficiente gestire la porta Serial1 esattamente come Serial, usata per la comunicazione via USB. Un codice di esempio è: Arduino void setup() { Serial1.begin(9600); // Apertura della porta seriale } void loop() { if (Serial1.available()) Serial.write(Serial1.read()); if (Serial.available()) Serial1.write(Serial.read()); } 123456789101112 void setup()  {  Serial1.begin(9600); // Apertura della porta seriale} void loop(){  if (Serial1.available())    Serial.write(Serial1.read());  if (Serial.available())    Serial1.write(Serial.read());} Se avessimo collegato il chip ai pin RX2 e TX2 (invece di RX1 e TX1), basterebbe usare Serial2 al posto di Serial1. Ovviamente è possibile utilizzare anche la libreria SoftwareSerial e definire uscite TTL a piacere (sacrificando...

leggi...

Presentazione di Arduino Due

Pubblicatoil 19 luglio 2014 in Arduino | 0 commenti

Presentazione di Arduino Due

Come probabilmente avrai già letto su Internet, Arduino è un progetto open-source che ultimamente si è diffuso molto nel mondo dei maker, ossia di chi ha rivalutato il concetto di “Fai da te” in ambito elettronico / informatico. Arduino è interamente made in Italy e permette di dare vita a progetti anche complessi, come stampanti 3D o droni. Da qualche mese sono in possesso della scheda Arduino Due, che, sebbene non sia la più recente e nemmeno la più potente, ha rappresentato un vero salto rispetto alla famosissima Arduino Uno. Ho deciso di puntare direttamente su questa scheda per la sua potenza di calcolo, che mi permetterà di realizzare progetti Passando alle caratteristiche tecniche di Arduino Due, la board è dotata di un microcontrollore Atmel SAM3X8E ARM Cortex-M3 ed è pertanto la prima scheda Arduino a 32 bit. Ha un clock di 84Mhz ed è inoltre dotata di 54 pin I/O (input/output) digitali (di cui 12 utilizzabili come uscite PWM), 12 input analogici, 4 UARTs (porte seriali hardware),  2 DA, 2 TWI (per la comunicazione I2C o Two Wire), un header SPI, un header JTAG, un pulsante di reset ed uno di cancellazione. A differenza delle schede precedenti, Arduino Due lavora però a 3.3V e bisogna fare pertanto attenzione alle tensioni applicate ai pin. Applicare una tensione maggiore di 3.3V porta ad un concreto rischio di danneggiamento. Non tutte le schede disponibili sul mercato sono quindi compatibili con questa caratteristica (è probabile infatti che lavorino a 5V) e bisogna pertanto fare attenzione che le descrizioni delle shields (o i rispettivi datasheet) indichino esplicitamente di fornire ai pin un massimo di 3.3V. Per quanto riguarda l’alimentazione, è possibile fornire una tensione da 7 a 12V tramite un alimentatore esterno (jack da 2.1mm, polo positivo al centro), o tramite la porta USB del computer. Per poter programmare Arduino Due è necessario avere l’IDE aggiornato almeno alla versione 1.5 (scaricabile da qui), che aggiunge il supporto anche ad Arduino Yùn. Concludo con alcuni link utili riguardanti la scheda in questione. I primi due mandano al sito ufficiale per avere maggiori informazioni o supporto, mentre gli ultimi due portano a documenti utili nel caso in cui si volesse approfondire il funzionamento di Arduino Due. Link utili Pagina ufficiale Forum ufficiale Pinout Schema elettrico 4 piedini I/O digitali (di cui 12 utilizzati come uscite PWM), 12 input analogici, 4 UARTs (porte seriali hardware), ha un clock a  84 MHz, 2 DAC (digital/analog), 2 TWI (per la comunicazione I2C o Two Wire), jack di alimentazione da 2,1 mm con positivo centrale, una JTAG per la programmazione diretta del microcontrollore e per il debug, un bottone di reset ed uno di cancellazione. – See more at: http://www.maffucci.it/2012/11/03/arduino-due-tra-le-mie-mani/#sthash.isHQKUaP.dpuf 4 piedini I/O digitali (di cui 12 utilizzati come uscite PWM), 12 input analogici, 4 UARTs (porte seriali hardware), ha un clock a  84 MHz, 2 DAC (digital/analog), 2 TWI (per la comunicazione I2C o Two Wire), jack di alimentazione da 2,1 mm con positivo centrale, una JTAG per la programmazione diretta del microcontrollore e per il debug, un bottone di reset ed uno di cancellazione. – See more at: http://www.maffucci.it/2012/11/03/arduino-due-tra-le-mie-mani/#sthash.isHQKUaP.dpuf 54 piedini I/O digitali (di cui 12 utilizzati come uscite PWM), 12 input analogici, 4 UARTs (porte seriali hardware), ha un clock a  84 MHz, 2 DAC (digital/analog), 2 TWI (per la comunicazione I2C o Two Wire), jack di alimentazione...

leggi...