Go Down

Topic: Nuova libreria advancedFunctions per Arduino DUE (Read 5 times) previous topic - next topic

leo72

May 09, 2013, 11:10 am Last Edit: May 11, 2013, 06:26 pm by leo72 Reason: 1
Ho iniziato a scrivere una libreria che permette di utilizzare le periferiche integrate nel microcontrollore Atmel SAM3X8E dell'Arduino DUE che non sono ancora supportate dal core dell'IDE di Arduino.

Al momento la libreria, chiamata advancedFunctions, supporta l'orologio in tempo reale (Real Time Clock, RTC), che fornisce un orologio ed un datario nonché un allarme, ed il generatore di veri numeri casuali (True Random Number Generator, TRNG) che ha superato anche i test del NIST. Il supporto ad altro hardware verrà aggiunto in seguito.

Utilizzo:
Per usare la libreria, scaricate il pacchetto che trovate in fondo all'articolo e scompattatelo. Una volta estratta la cartella advancedFunctions, dovete copiarla all'interno della cartella /libraries che le ultimissime versioni dell'IDE 1.5.x di Arduino creano all'interno della cartella degli sketch. Questa è cambiata rispetto a prima: adesso si chiama /Arduino su tutti i sistemi (su Linux prima era /sektchbook) e la sua posizione la potete conoscere cliccando sulla voce di menu dell'IDE "File/Preferenze". Una volta fatto questo, siete pronti ad usare le funzionalità della libreria semplicemente includendola nel vostro sketch con la seguente istruzione:

Code: [Select]
#include "advancedFunctions.h"

Come detto, la libreria non supporta tutto l'hardware integrato nel microcontrollore che non è supportato dal core di Arduino. Essendo allo stato iniziale di sviluppo, al momento supporta solo le seguenti periferiche (altre funzionalità saranno aggiunte in seguito):

modulo RTC (Real Time Clock)
L'RTC interno al SAM3X8E è un orologio in tempo reale completo di orario e datario nonché di allarme per mese/giorno/ore/minuti/secondi (ancora da implementare). Le funzionalità sono accessibili mediante l'oggetto rtc. Le spiegazioni su come usarle sono contenute nel file RTC_MODULE.txt.

modulo TRNG (True Random Number Generator)
Il TRNG integrato è molto robusto ed ha passato i test NIST Special Publication 800-22 e Diehard. Esso è capace di generare 32 bit di entropia con elevata casualità (da qui il nome di "vero" generatore) ogni 84 cicli macchina. Le spiegazioni su come usare il generatore sono contenute nel file TRNG_MODULE.txt.

modulo WDT (WatchDog Timer)
Il WatchDog Timer è un contatore che può resettare il microcontrollore se il codice si infila in qualche vicolo cieco logico. L'utente può selezionare l'intervallo di reset fra 1 e 16000 ms. Le spiegazioni su come usare il WatchDog sono contenute nel file WDT_MODULE.TXT.
PS.: non ancora del tutto testato

Licenza e garanzia:
La libreria e gli esempi allegati sono rilasciati sotto licenza GNU General Public License 3.0. Il software è fornito così com'è, senza nessuna garanzia di funzionamento né di responsibilità per il suo utilizzo. Maggiori dettagli sono contenuti nel file README_FIRST.txt

Download:
l'ultima versione della libreria è sempre scaricabile da questa pagina

leo72

Analizzando la libreria vi accorgerete che ci sono degli oggetti non dichiarati ma usati.
Questi oggetti ed i loro metodi fanno parte del framework CMSIS contenuto in /arduino-1.5x/hardware/arduino/sam/system/CMSIS ed incluso di default dal core.
Questo framework mette a disposizione una serie di oggetti per accedere in maniera rapida ai registri del core ARM nonché ai loro flag.

Ovviamente la documentazione è scadente  :smiley-sweat: e non è facile risalire al modo in cui usare le funzioni del CMSIS (acronimo per Cortex Microcontroller Software Interface Standard). Per ora ho recuperato un pò di info googlando sul forum, su internet e guardando gli header del framework stesso.

Devo dire che di periferiche integrate ce ne sono veramente tante, da perdersi veramente. Questi core ARM sono veramente fantastici.

PaoloP


Brunello


ratto93

Se corri veloce come un fulmine, ti schianterai come un tuono.

yoshi93

Complimeti, ti piace proprio sviscerare tutte le potenzialità dell'hardware :) (ottimo anche il tuo leOS).

leo72

Siccome il mio campo d'elezione è il software, per non sentirmi troppo inferiore ai guru dell'hardware ogni tanto devo pubblicare qualcosa altrimenti la mia fama col tempo si offusca  :smiley-yell:

A parte gli scherzi, l'altro giorno ho guardato la DUE buttata lì dietro al monitor del PC, su una delle tante cataste di roba del mio "angolino" e mi sono detto: quella scheda lì non la conosco per nulla. Ho preso il datasheet e gli ho dato un'occhiata. Ci sono una marea di cose non supportate dal core. Siccome uno dei miei ultimi lavori è la pRNG, ho pensato che sarebbe stato ganzo studiarmi il generatore integrato. Mi serviva poi un sistema per stampare ogni secondo i dati... e da lì mi son detto: perché non usare l'RTC integrato?
Ecco le prime funzionalità della lib. Poi a breve vorrei implementare il WDT. E non è detto che non provi a replicare il leOS sulla DUE usando il SysTick timer, però per far questo dovrei "sgomberare" lo scheduler integrato  ;)

yoshi93

A questo punto facciamo un port di linux e siamo tutti apposto :smiley-mr-green:

Testato

Complimenti Leo  :)
Non ho la due quindi no richieste modifiche  :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed


leo72

La UDOO è una scheda biprocessore, una 2-in-1.
All'ARM MX6 monta a fianco un SAM3X per le funzionalità dell'Arduino.

pitusso

[OT]
Quote
A questo punto facciamo un port di linux e siamo tutti apposto


..intanto perchè non farci girare FreeRTOS?
http://arduino.cc/forum/index.php/topic,152188.msg1229608.html#msg1229608
[/OT]

nid69ita

Grandissimo @leo !!!  

La gestione della ethernet non dispende solo dal software vero?
Non basta 'attivarla' da software, se in qualche modo si può collegare i pin verso l'esterno?
my name is IGOR, not AIGOR

Federico Vanzati

#13
May 10, 2013, 04:57 pm Last Edit: May 10, 2013, 05:11 pm by Federico Vanzati Reason: 1
Beh complimenti per il lavoro e per lo sforzo.

Per la true random number generator ho avuto una sensazione di familiarità col codice presente nel tuo myTrng.cpp, così ho cercato la vecchia discussione (26 ottobre 2012): http://arduino.cc/forum/index.php/topic,129083.msg971696.html#msg971696

Stessa identica soluzione proposta nella correzione di cmaglie....sarebbe bastato usare la funzione cerca del forum  ]:)

Stessa cosa vale per la RTC, ne esisteva già una, ma la tua molto probabilmente è molto più leggera.

C'è anche una discussione che ha l'obiettivo di raccogliere tutte le librerie per la Due, magari postala anche lì: http://arduino.cc/forum/index.php?PHPSESSID=25e51167f01e9e67b985b45e94741e78&topic=144446.0

Ad ogni modo è un buon lavoro.
F

Michele Menniti

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Go Up