Il titolo di questo articolo vuole essere una chiara indicazione su quello che questo corso sarà da questo momento in poi: tutta pratica. Vedremo di fare diversi esperimenti pratici, dai più semplici ai più complessi, per imparare al meglio quali sono le reali potenzialità della FRDM-KL46Z per scoprire di cosa è davvero capace. Siete pronti?
Quando la scheda arriva, si presenta in una confezione incredibilmente minimale: la documentazione è tutta disponibile online a questa sezione del sito Internet dove si possono reperire tutte le informazioni utili. Naturalmente, tutto quello che serve ve lo abbiamo già proposto ma è utile tenere a mente anche quel riferimento.
E, ad ogni buon conto, date un'occhiata agli allegati di questo articolo.
Di solito quando scriviamo questo genere di articoli prevediamo la sezione "unpacking" ma qui da aprire c'è davvero poco invece da sperimentare (ed imparare) c'è moltissimo!
C'è però da procurarsi il materiale utile per poterla utilizzare; fatto questo non resta che…
...metterla in funzione
Ma prima di farlo la cosa fondamentale è che tutti noi ci ricordiamo la sua documentazione. Nell'articolo dedicato ne abbiamo parlato ma la riprendiamo qui perché vi servirà e tanto anche. Sul sito Internet, come dicevamo, trovate tutte le informazioni di base.
Se avete bisogno di informazioni sullo schematico (e vi garantiamo che ne avrete!!), lo trovate in allegato.
Vi serve certamente sapere come fare per programmare la scheda e per questo avete bisogno di CodeWarrior for MCU.
Una nota importante: stiamo lavorando e lavoreremo con la versione 10.5, per avere accesso a quella più aggiornata e che supporta sicuramente la scheda. Il codice e la programmazione non sono certamente un grosso problema dal punto di vista della portabilità però potrebbe essere problematico il supporto ed i driver per cui cercate di procurarvi la stessa versione in maniera tale che lavoriamo tutti guardando più o meno dallo stesso punto di vista. Idem dicasi per il Processor Expert.
Tra i programmi che potete scaricare c'è anche quello che vi serve per far funzionare la scheda.
Ci sono una serie di codici di esempio e programmi precaricati e partiremo proprio da quelli per analizzare la loro struttura e capire che cosa stiamo guardando.
Metterla in funzione significa anche fare un breve ripasso sui suoi Jumper perchè presto o tardi vi serviranno eccome. Quando guardate la scheda ne troverete diversi per cui è importante sapere a che cosa servono:
- J6: bypass di D4;
- J7: VREGIN (configurabile);
- J8: isolamento del sensore di luminosità;
- J9: power isolation per K20 (OpenSDA);
- J12: Power isolation per VLL3;
- J15: supporto per 5VDC;
- J16: alimentazione USB Host mode;
- J17: isolamento e misurazione per KL46Z.
Software e Tools
La scheda ha, già installato, il bootloader OpenSDA; questo significa che, così come le altre schede della serie Freedom, è necessario rimpiazzarlo con l'OpenSDA Debug Application. Freescale prevede il codice di esempio denominato "KL46_SC" all'interno del suo pacchetto "FRDM-KL46Z_QSP", quello di cui abbiamo parlato prima (QSP sta per Quickstart Package).
Ecco un altro dei motivi per i quali vi consigliamo caldamente di dare subito uno sguardo tutta la documentazione disponibile (in allegato) e procurarvela.
Parlavamo di software e quindi sappiate che il supporto per questa scheda è garantito anche dalla versione 10.4 di CodeWarrior for MCU.
Quando siete all'interno del Wizard "New Project" del software, come sempre, quello che dovete fare è localizzare la vostra scheda, in maniera tale che il programma sappia come interpretare i vostri comandi; per fare questo cercate all'interno della "KL4x Family" l'MKL46Z256, che troverete nella sottocategoria "KL46Z (48 MHz) Family".
Creando un nuovo progetto, ricordatevi che quello che volete fare è una applicazione, piuttosto che una libreria.
Una breve annotazione: sappiate che Keil, un altro grosso nome quando si parla di software, ha appena rilasciato la versione 4.72 di µVision. Se lo conoscete già, lo preferite oppure siete semplicemente curiosi, sicuramente troverete il software di grande utilità ed un'IDE molto potente e performante con diverse utilissime opzioni.
Adesso avete inizializzato la scheda e pertanto potete iniziare a lavorare seriamente.
Giochiamo con i LED
Come certamente ricorderete dallo schematico, la scheda ha a disposizione due distinti LED, uno verde ed uno rosso. L'esperimento che facciamo adesso, piuttosto semplice, servirà per poter comandare direttamente uno dei due LED. Scegliamo quello rosso ma uno dei due vale certamente l'altro.
Come segnale per comandarlo utilizzeremo uno dei due pulsanti che sono predisposti sulla scheda, in particolare SW1.
Naturalmente queste scelte sono del tutto arbitrarie per cui potete farne delle altre. Quello che ci interessa è raccontarvi cosa dovete fare perché tutto vada a buon fine e utilizzeremo delle immagini che vengono direttamente al programma per aiutarvi a prendervi confidenze immediatamente.
Tanto per iniziare, è necessario abilitare la modalità Bootloader della scheda. Dedicheremo più spazio a questa modalità. Per il momento, però, soffermiamoci sul fatto che dobbiamo seguire una semplice procedura guidata che prevede la pressione del tasto RESET, il collegamento della porta USB OpenSDA, il rilascio del pulsante ed il riconoscimento della scheda da parte del sistema operativo.
Una volta fatto questo vi renderete conto che tra le risorse del sistema avrete questa
all'interno della quale dovrete copiare il file "DEBUG-APP_Pemicro_v108.SDA" che si trova sempre all'interno di quel pacchetto Quickstart di cui abbiamo parlato in precedenza nella cartella OpenSDA Applications.
In una delle prossime puntate, se vi interessa, potremo raccontarvi meglio a che cosa serve tutto questo.
Per il momento accontentatevi di sapere che ciò si è reso indispensabile perché scollegando e ricollegando la scheda essa verrà riconosciuta come dispositivo dal sistema operativo e potrete interagire con la stessa.
Se andate a vedere tra le risorse del sistema operativo, nella sezione Hardware, troverete certamente qualcosa di questo tipo
(fai click sull'immagine per ingrandire)
Adesso che tutto funziona correttamente, vediamo che cosa dobbiamo fare per portare a casa questo semplice esperimento: vogliamo che il pulsante accenda e spenga il LED.
Prendetevi una decina di minuti per guadagnare confidenza con l'interfaccia del programma, se non lo conoscete. Tenete presente che al primo avvio quello che vi verrà chiesto è la cartella all'interno della quale volete che vengano alloggiati i progetti. Questa scelta vi servirà per lungo tempo per cui fatela accuratamente.
Come tutti gli ambienti di sviluppo, anche qui la visualizzazione è personalizzabile a seconda delle vostre esigenze per cui scegliere con attenzione che cosa volete vedere.
Quando siete in fase di realizzazione del vostro codice, certamente vi servirà sapere quali sono i progetti che avete creato, l'elenco dei componenti attivi, le librerie relative agli stessi ma soprattutto il cosiddetto "Component Inspector", una specie di lente d'ingrandimento che vi permetterà di impostare fin nel più minuto dettaglio i singoli parametri di ciascun dispositivo o componente che faccia parte del vostro progetto.
Ma adesso basta fare chiacchiere, passiamo al sodo del nostro esperimento.
Abbiamo bisogno di creare tre entità dei quali la prima sia il vero e proprio LED, la seconda l'inizializzazione dello stesso e la terza l'impostazione dell'IO.
Sono tre componenti che dobbiamo andare a ricercare all'interno della "Components Library" e nelle prossime immagini vedremo come.
Cominciamo con il LED.
(fai click sull'immagine per ingrandire)
una volta selezionato tra le "CPU Internal Peripherals", il singolo bit va impostato in termini di pin di riferimento e direzione (naturalmente si tratterà di un Output dal momento che stiamo parlando di un LED). Per scegliere il pin di riferimento dobbiamo consultare lo schematico. Lavorerete molto con lo schematico alla mano per cui conviene tenerlo aperto in maniera tale da consultarlo costantemente.
A questo punto non resta che impostare come pin di riferimento per l'interrupt il PTC3. Se quello che abbiamo detto prima è chiaro, a che cosa corrisponde nello schematico?
(fai click sull'immagine per ingrandire)
Ultimo passo da compiere prima di passare al codice è impostare "Init_GPIO" sul pin PTC #3. Ciò si può fare abilitando il pin, impostando il valore del resistore di pull-up ma soprattutto impostando la condivisione del pin tra "ExtInt" e "Init_GPIO"; l'ambiente di sviluppo, in effetti, almeno all'inizio, segnerà un conflitto dal momento che entrambi lavorano sullo stesso pin. Tramite l'impostazione di condivisione l'errore sarà eliminato ed il programma interpreterà correttamente che volete effettivamente lavorare sullo stesso pin.
Quello che vi serve adesso è lavorare sul codice e quindi espandendo la cartella del vostro progetto, ricercando il file "Events.c" troverete certamente
(fai click sull'immagine per ingrandire)
void EInt1_OnInterrupt(void) { /* Write your code here ... */ }
A cosa serve? Facile: dovete andare a cercare tra gli attributi ed i metodi del "Bit" ovvero del LED, funzioni quali "PutVal" ed altre…
Considerando che la logica è invertita, quella che vi serve è proprio "NegVal".
Il codice pertanto diventerà:
void EInt1_OnInterrupt(void) { LED_NegVal(); }
In questo caso non vi serve impostare alcun tipo di parametro perché la funzione è void ma soprattutto non richiede parametri in ingresso.
Resta, adesso, la generazione del codice. Dopo aver selezionato "Generate Processor Expert Code", entriamo in modalità Debug per verificare l'esecuzione del programma. Fatto questo, il risultato sarà certamente raggiunto.
Tutto bene? Avete avuto problemi?
Se sì, discutiamone nei commenti. Altrimenti cominciate a variare il codice, facendo piccole modifiche: cambiate il LED, il pulsante, il numero di volte che quest'ultimo va premuto per poter avere l'accensione e così via dicendo...
Conclusioni
Per oggi possiamo dire che ci fermiamo. La scheda è davvero interessante e scoprirla rappresenta una vera e propria sfida. In questa puntata abbiamo iniziato a vedere codici, programmi, qualche impostazione e abbiamo fatto ancora un passo in avanti nella conoscenza della scheda che abbiamo per le mani. Man mano che si susseguiranno, prenderemo sempre maggiore confidenza e fino alla fine la sapremo programmare alla perfezione.
L'idea di questa sezione pratica è anche, magari, arrivare alla realizzazione di un progetto e questa, per il momento, è la più "corposa" rivelazione che vogliamo farvi.
Come per gli altri articoli, i commenti sono il luogo in cui potrete fare domande, chiarire dubbi ed eventuali ulteriori perplessità. Alla prossima puntata.
Riferimenti e richiami:
Come espresso in precedenza, non è proprio spiegato bene. Si danno per scontate troppe informazioni, non necessariamente patrimonio anche di chi non è digiuno di programmazione di Microcontrollori.
Salve Ultron,
puoi farci qualche esempio, cosa vorresti approfondire?
Sicuramente Piero ( e con lui tutta la community) potranno aiutarti 🙂
Certo!
Spero sia una critica costruttiva, ma leggendo mi sembra di quando andavo a certe lezioni all’università, con certi Docenti.
Erano concetti spiegati per, e comprensibili solo da, chi già sapeva quelle nozioni. Spesso capivo poco o nulla, poi diverso tempo dopo, con quegli argomenti ben compresi per altre vie, potevo dire. “si, giusto, molto chiaro, è così”.
Ma se aspettavo di imparare qualcosa da quelle lezioni stavo fresco!
Non è il materiale, ma il metodo impiegato che mi rammenta molto da vicino quello di detti Docenti. Ed è un problema di metodo, perchè in Fisica, notoriamente materia molto complessa e ostica, avevo gioco facile a comprendere e studiare le lezioni impartite, poichè il Docente aveva un metodo molto più elementare di presentare concetti complessi.
Ho iniziato, anni fa, con Arduino, poi sono passato a PIC più impegnativi, per arrivare ai PIC18F, PIC24F a 16 bit, ed infine a progetti con con stack USB e/o CAN, con PIC32 della serie MX. Il tutto con ambiente di Microchip MPLAB IDE.
Ciononostante ho compreso poco finora di questo corso. Troppe cose mi paiono date per scontate. Troppi passaggi saltati.
Eppure come competenze non sono proprio un “Elettricista”, detto con tutto il rispetto possibile per questa categoria.
Ribadisco: avrei desiderio di un approccio più terra-terra e meno scontato, per quanto possibile.
Non vorrei ritornare qua tra un anno, dopo aver appreso la programmazione di ARM per altre vie, e dire: “Si, giusto, tutto chiaro, è proprio così”…
Buongiorno Ultrone e buongiorno a tutti voi.
Senti Ultron, noi possiamo affrontare ogni genere di argomento e ogni tipo di esempio.
E sono contento se qualcuno mi urge nell’essere più chiaro.
Però perdonami non ho capito cosa sbaglio.
Sono i termini? I concetti? Le basi?
Cioè, per scendere sul pratico, vorresti una panoramica più “terra-terra” sulle funzioni dei programmi?!
Se posso chiederti di essere ancora più concreto nella spiegazione sono certo di riuscire ad impegnarmi per risultare più chiaro.
Nel frattempo, (faccio il Docente :DDDD) approfitto: ci sono altri che hanno altri dubbi?!
Anche perchè siccome è in corso la stesura delle prossime due puntate è certamente proprio questo il momento in cui devo saperlo 😀
L’idea per la prossima puntata è quello di approfondire alcuni concetti dati per scontati, dimostrare come si possono usare i codici di esempio e fare riferimento ad alcune parti della documentazione per entrare più nello specifico e analizzare ancora meglio l’upload del codice ed una delle difficoltà che io per primo ho avuto, cioè gestire i file *.srec.
Che ne dici di questa idea?
Ti sembra vada nella direzione giusta?
Possiamo decidere insieme altri aspetti su cui focalizzarci, se lo vogliamo…! 😀
Abbiamo a disposizione ancora 6 puntate di corso e dovranno essere tutte di natura molto pratica ma se devo essere più chiaro e approfondito nello spiegare le cose devo anche sapere in che direzione approfondire 🙂
Cerca di darmi tutti gli elementi che ti vengono in mente e, per piacere, questa stessa richiesta vale PER TUTTI!! 😀
Grazie 🙂
PS: sono veramente soddisfatto da queste osservazioni! 😀 Nel corso di microprogrammazione sono andato bene, nessuno ha avuto grossi problemi, ma sapere che devo impegnarmi di più per essere più chiaro è gratificante…! 🙂
Mi sovviene una battuta: “Quando scrivi pensa che stai insegnando a delle scimmie” ma qualcuno potrebbe sentirsi offeso! 😀
Io no, sono la scimmia che vuole imparare. Ho la presunzione di sentirmi il candidato ideale per questo Corso, proprio per i miei passi pregressi e la cui naturale evoluzione (dopo i PIC32) dovrebbe sfociare su questa piattaforma (ARM) oramai assurta a standard consolidato di utilizzo.
Non appena ho visto la presentazione del Corso ne sono stato immediatamente interessato, ma già dalle prime introduzioni mi pareva che si desse per scontato già molte cose.
Forse sono io che ho troppe pretese, forse ci sono esigenze di numero di battute, quindi vengono date delle indicazioni di massima e poi spetta al corsista sperimentare tutto il resto…
Speriamo che la prossima puntata sia più densa di dettagli, durante le varie operazioni.
Un’ultima cosa: visto che si è entrati nella fase pratica, sto per acquistare la Board, però ho necessità di un consiglio.
Invece della KL46-Z, vorrei acquistare la KL25-Z, quest’ultima perchè impiegabile con l’ambiente mbed. C’è compatibilità con il software sviluppato durante il Corso con questa scheda, o sono vincolato alla scelta della KL46-Z?
Cominciamo col dire che tutti coloro che stanno leggendo questo corso sono sicuramente i candidati ideali 😀
Anche perché quando noi pubblichiamo qualcosa non lo facciamo mai per una persona sola o per due persone ma lo facciamo per tutti i nostri lettori.
Il senso di chiedere a voi che cosa vi interessa serve a farvi sentire che c’è la possibilità di approfondire insieme e di crescere insieme su tanti argomenti ma non è che scriviamo per noi stessi. tutt’al più approfondiamo insieme.
Ecco per quale motivo è fondamentale che quello che viene scritto sia chiaro.
E a questo punto possiamo venire al problema.
Allora, mi devi scusare ma io davvero non sto capendo il punto.
Io posso anche parlare come se avessi di fronte dei bambini di due anni però ti renderai conto che se non mi dici quali sono i concetti che ti mancano, dove trovi difficoltà, quali sono nello specifico i problemi che hai incontrato, quali sono i miei modi espressivi poco chiari anche darti una mano anche soltanto nei commenti è un po’ complicato.
Non trovi?
Scendendo sul pratico, spiegami: Di che cosa stiamo parlando esattamente? Quali problematiche hai incontrato? Quali sono i concetti che ti mancano? Come posso fare per spiegarli in maniera più chiara? Tu come preferiresti che venissero spiegati?
Ripeto parlare in maniera più semplice da solo non può dir nulla: c’è bisogno di capire in che cosa per quale motivo una persona non si esprime in maniera chiara…
Per quanto riguarda la tua domanda finale, la risposta è molto semplice: si tratta di un’altra scheda 🙂
Fa sempre parte della serie Freedom, è sempre equipaggiata con un processore interessante e così via dicendo però non è la stessa.
Per esempio, li troverai un LED RGB, che qui non c’è.
Credo di ricordare che quella scheda non sia equipaggiata con il magnetometro e certamente non ha un display lcd.
Diciamo che potrebbe essere un buon investimento all’inizio ma che col tempo potresti cominciare a desiderare di procurarti un’altra piattaforma.
A questo punto ti consiglierei, sinceramente, di acquistarne fin da subito una più completa che ti possa permettere di fare più cose e che magari imparerai nel tempo ad utilizzare al meglio piuttosto che dover, più avanti, porti il problema di cosa andarti a cercare… 🙂
Chiedo venia per il “predestinto” al Corso, non era mia intenzione dare da intendere di essere l’Eletto, ma intendevo il candidato-tipo per questo Corso, intendendo una accezione generica per tipo di competenze pregresse, che ci si aspetterebbe dall… utente-tipo di questo Corso.
Certo è che chi non ha mai letto di programmazione o MCU, non sarà proprio il candidato ideale…
Domani mi rileggo tutti gli articoli, a partire dalla presentazione, annotandami tutti i passaggi, a mio avviso, poco comprensibili.
Ultron peccato no si sia fatto piu’ sentire.
Voglio iniziare a leggere questo cosro e mi interessava il suo punto di vista. Se ci sei batti un colpo (anche se a tre anni di distanza)
Aggiungo un consiglio che risolverebbe perdite di tempo qui su EOS: quando si crea un corso, un articolo lungo, diciamo qualciasi cosa venga affrontata in piu’ puntate, e’ un problema trovare le puntate successive.
Quindi quando ad esempio si scrive la seconda puntata si ci dovrebbe ricordare di editare la prima in modo da mettere un link alla seconda, e cosi’ via.
Un indice aggiornato con tutte le puntate sarebbe la cosa migliore in modo da passare direttamente dalla 5^ alla 1^ ad esempio, ma forse e’ chiedere troppo.
Ma il semplice editing della puntata 2 per aggiungere il link alla puntata 3 credo sia doveroso.