Nuova libreria advancedFunctions per Arduino DUE

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:

#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

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 :sweat_smile: 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.

Complimenti.

x iscrizione

wow

@Leo sei sempre di un passo avanti

Sei il migliore :wink:

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

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 :stuck_out_tongue_closed_eyes:

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 :wink:

A questo punto facciamo un port di linux e siamo tutti apposto :grin:

Complimenti Leo :slight_smile:
Non ho la due quindi no richieste modifiche :slight_smile:

yoshi93:
A questo punto facciamo un port di linux e siamo tutti apposto :grin:

Non è proprio la DUE, però ci stanno lavorando sopra :slight_smile:

http://www.kickstarter.com/projects/435742530/udoo-android-linux-arduino-in-a-tiny-single-board

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

[OT]

A questo punto facciamo un port di linux e siamo tutti apposto

..intanto perchè non farci girare FreeRTOS?

[/OT]

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?

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): random number generator (TRNG) API ? - #3 by cmaglie - Arduino Due - Arduino Forum

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

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ì: Arduino Forum

Ad ogni modo è un buon lavoro.

Leo, ti sei messo a scopiazzare :fearful:?

Ho interpretato anche io negativamente il messaggio del Vanzati
visto che non ricordo niente di poderoso o interessante proveniente dallo stesso, protesto vivamente al fine di ricevere spiegazioni o rimozione del messaggio precedente.

Io non ho copiato proprio nulla.
L'ho anche specificato nel primo post, che il mio più grosso problema è stato capire come accedere alle funzionalità hardware del chip SAM.
Cercando su Google ho trovato che c'era questo framework chiamato CMSIS e l'ho anche detto che devo ringraziare quella poca documentazione che sono riuscito a trovare in giro:

leo72:
Ovviamente la documentazione è scadente :sweat_smile: 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.

Quando ho iniziato il lavoro non sapevo neanche che ci fossero già delle lib pronte: non ho voglia di mettermi a reinventare la ruota, quando questa è già disponibile. Ho trovato in seguito alcune cose quando il lavoro era già in corso d'opera e mi ero impantanato su alcuni problemi, perché io non sono un programmatore professionista ed il C/C++ l'ho studiato da autodidatta in questi 2 anni e mezzo che uso Arduino. E' grazie

Il fatto che ci siano similitudini non lo posso negare ma quello è il "modo di fare le cose". Il datasheet richiede una precisa sequenza di azioni da compiere per portare a termine la programmazione dei registri del chip. Addirittura, ora viene usata una "chiave" di attivazione che va scritta in alcune locazioni del registro, pena la non modifica dello stesso.
Detto questo, non si può non scrivere codice identico a quello di un altro soggetto se l'operazione da fare è la medesima, anche volendo. Non mi pare sia stato accusato di plagio il creatore del core Tiny, nonostante si potrebbe dire che tale core è derivato da quello dell'Arduino.

Mi spiace che la cosa sia stata commentata in questo modo perché:

  1. mi sembra di aver contribuito non poco con un sacco di software (librerie, sketch) e materiale vario (vedi tutti gli articoli che ho scritto sul mio sito) per favorire l'uso di Arduino riempiendo le lacune nella documentazione ufficiale;
  2. ho sempre rilasciato il mio lavoro in forma pubblica, offrendo tutto sotto la GPL3 proprio perché nessuno potesse prendere dei pezzi ed usarli senza ridistribuire eventuali lavori derivati. Facendo così mi sono prodigato affinché le informazioni sull'uso al meglio dell'Arduino rimanessero pubbliche;
  3. quando ho iniziato a lavorare sulla DUE, il mio primo intento è stato quello di completare il supporto alle periferiche integrate nel SAM3X che il core di Arduino non supporta ancora (non lo si può negare) andando quindi a fare un lavoro conto terzi che sarebbe spettato non certo a me.

Vorrà dire che i miei prossimi lavori me li tengo per me, così nessuno verrà a dirmi che copio dagli altri

leo72:
Vorrà dire che i miei prossimi lavori me li tengo per me, così nessuno verrà a dirmi che copio dagli altri

Noooooooo, ti prego non tenerti le cose per te =(. Le tue librerie sono ottime ed il solo fatto che siano gratis giustifica il fatto che in lontananza assomiglino ad altre (per motivi pratici e funzionali non perchè le hai copiate).
Non capisco neanche io il perchè del commento di Vanzati e il mio consiglio è quello di fregarsene altamente 8).

Leo, continua così che alla maggior parte di noi va più che bene ;).

Federico, il tuo è un commento ingiusto, nel mondo del software, e in quello elettronico, è facile realizzare soluzioni molto simili anche se realizzate da diverse persone, questo sia perché certi modi di agire sono imposti dal componente, sia perché non esiste un modo diverso di farlo, alla fine le soluzioni realizzate da persone diverse sono tutte simili, e questo è uno dei motivi per cui non è possibile brevettare il software.
Un esempio banale, ieri mi hanno fatto notare che è stato realizzato un blocco dell'autoreset per la DUE, per 16u2, questa modifica è praticamente identica a quella che io ho proposto, molti mesi fa, per la UNO, eppure non andrò mai a dire che la persona ha copiato la mia perché effettivamente non c'è altro per farlo ed è normale che i due lavori siano quasi identici.

Sembra la diatriba tra Bell e Meucci. :roll_eyes: