Go Down

Topic: MCP23S17 per comandare dei relay (Read 4 times) previous topic - next topic

MauroTec

Io ho il brutto vizio di dire le cose come stanno, tendo a dipingere la realtà in modo più aderente che riesca a fare, ma inevitabilmente vengo frainteso.

Quindi onde evitare fraintendimenti:
Arduino è una ottima scheda, l'ide è pessimo, il modo di sviluppare non forma il programmatore, ma ha il vantaggio di apparire semplice e intuitivo e senza limitazioni cosa che per un principiante è un aspetto allettante. Il principiante ancora non è cosciente che ogni cosa è complessa e nulla di facile esiste, persino bere un bicchiere di acqua può essere complicato quando non hai le mani.
PS: ci sono anche altri vantaggi e il corrispettivo rovescio della medaglia.

Ok allora ogni cosa che ci circonda è complessa e può apparire semplice perché altri hanno lavorato per farla sembrare semplice, purtroppo qualunque semplificazione ha il rovescio della medaglia e credo che sia un vantagio saperlo perchè nel caso di arduino quando non bastano le funzioni del core lib, l'ide ecc, si può ricorrere ad altre funzioni sulle quali arduino core lib è costruito.

Il C non è nato specificamente per applicazioni embedded, ma la grande flessibilità del linguaggio ha permesso un adattamento che per tanto tempo non è stato messo in discussione ( in realtà si, ma in modo marginale tanto che il C è il linguaggio più usato in applicazioni embedded).

Consigli:
Trova un IDE decente con cui ti trovi bene, questo deve essere in grado di avviare il compilatore nativo, cioè crea codice per la piattaforma su cui è eseguito il compilatore e l'ide. Io uso GNU/Linux e come ide uso QtCreator.

L'obbiettivo è quello di testare:
1) La rappresentazione delle informazioni, stringhe, stringhe di array, valori numerici in esadecimale, decimale e ottale
2) tutti gli operatori unari e quelli logici and, or e xor
3) tutte le operazioni bitwise fino a comprenderle senza cadere nell'inganno, le macro _BV() e altre.
4) alcune funzioni delle libreria standard C, ma in avrlibc alcune non sono standard e allora bisogna trovare il codice e portarlo sul
pc compilarlo e testarlo.
5) L'uso delle classi in C++, delle strutture in C e i puntatori a funzioni.

L'uso di esprimere un numero in formato binario 0b0010ecc non lo trovo educativo, ma è utile per il principiante che deve imparare a contare in binario ed esadecimale a mente, A=10, B=11 C=12 ecc. Esprimere il valore in formato binario è merito di arduino core lib, che crea delle macro 0b11011111  223.

Io per contare in binario ed esadecimale uso una applicazione calcolatrice  :* , specie per i numeri esadecimali, ma anche per i binari da 16 bit.

L'uso e la vendità di librerie di estensione al linguaggio è comune in ambito non embedded, cioè con il PC, meno anzi molto meno in applicazioni embedded perchè il programmatore deve tenere sotto controllo le risorse limitate e per questo ha bisogno di sapere nel dettaglio cosa accade istruzione per istruzione, questo è vero in ambito professionale specie su commisione, perchè l'hardware viene scelto dal committente è il programmatore deve farci stare dentro tutte le richieste del committente e stranamente l'hardware è sempre appena sufficiente e mai abbondantemente sufficiente.

Mentre in ambito obistico anche evoluto torna sempre comodo spulciare nella libreria che si sta usando al fine di capire cosa fanno quelle funzioni, per fortuna il codice di avrlibc, di arduino core lib e dell'ide è rilasciato sotto GPL o LGPL che sia è quindi è consultabile oltre che modificabile, e li dentro impari cose che non trovi nei libri.

Tornando al progetto, ora non penso che siano altri intoppi e puoi procedere con magiore celerità e non dimenticare di fare partecipe tutto il forum circa i risultati raggiunti e penso proprio che la sezione Megatopic sia il posto migliore per condividere il progetto.

In modo assolutamente non informale:
Ti è andata di culo che il datasheet del 23S17 è lo stesso del 23017 che devo usare io, che quindi prima poi dovevo leggere. :smiley-mr-green:

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

gamby

Ottimo! grazie per le delucidazioni!
In ogni caso mi fa piacere che tu dica le cose come stanno... Ormai ho capito che è inutile scrivere programmi bypassando i problemi sfruttando pezzi di codice trovati qua e la... Vista l'esperienza con questo MCP23S17 mi sembra chiaro che è meglio andare a fondo e capire cosa c'è dietro a un semplice programmino di 10 righe.

Un paio di riflessioni tra me e me, anche se il thread tratta di tutt'altro.

Partiamo dall'IDE... Personalmene ho provato un po' di tutto sia per quanto riguarda i sistemi operativi sia per l'ambiente di programmazione: per il primo corso di C ho usato il vecchio Dev-C++ sotto windows, ma in quella fase era veramente solo questione di scrivere qualche ciclo e eseguire operazioni di base.
Dopodichè sono passato a linux e per il corso più "evoluto" consigliavano di scrivere il programma con uno dei vari editor standard di linux (Vim,nano,gedit e simili) e compilare con GCC. Ho poi provato per qualche tempo eclipse, più per curiosità che per necessità.
Ora sono principalmente su MacOS, anche se ho a disposizione ancora linux su macchina virtuale e windows su una partizione secondaria.
La scelta più ovvia sarebbe continuare ad usare eclipse sotto MacOS.

Non ho però capito come dovrei utilizzare un IDE diverso da Arduino. Sarebbe soltanto un'interfaccia più completa da sostituire alla solita interfaccia standard "verde e bianca" oppure mi permetterebbe di sviluppare tutto il software, compilarlo e caricarlo sulla scheda sempre dalla stessa interfaccia? Mi sembra di intuire che dovrei caricare tutte le librerie di Arduino nel nuovo IDE, ma non capisco come un diverso IDE si dovrà interfacciare con la scheda Arduino connessa al mio PC.

gamby

Come non detto... Nel frattempo sono andato a cercare qualche informazione e mi sono schiarito un po' le idee...
Ho visto che esistono dei plugin per estendere le funzionalità dei vari IDE al nostro AVR. Si tratta ora di capire se Eclipse va d'accordo con qusti plugin sotto Mac OSX... Altrimenti proverò a cercare un'altrnativa.

MauroTec


Ottimo! grazie per le delucidazioni!
In ogni caso mi fa piacere che tu dica le cose come stanno... Ormai ho capito che è inutile scrivere programmi bypassando i problemi sfruttando pezzi di codice trovati qua e la... Vista l'esperienza con questo MCP23S17 mi sembra chiaro che è meglio andare a fondo e capire cosa c'è dietro a un semplice programmino di 10 righe.

Un paio di riflessioni tra me e me, anche se il thread tratta di tutt'altro.

Partiamo dall'IDE... Personalmene ho provato un po' di tutto sia per quanto riguarda i sistemi operativi sia per l'ambiente di programmazione: per il primo corso di C ho usato il vecchio Dev-C++ sotto windows, ma in quella fase era veramente solo questione di scrivere qualche ciclo e eseguire operazioni di base.
Dopodichè sono passato a linux e per il corso più "evoluto" consigliavano di scrivere il programma con uno dei vari editor standard di linux (Vim,nano,gedit e simili) e compilare con GCC. Ho poi provato per qualche tempo eclipse, più per curiosità che per necessità.
Ora sono principalmente su MacOS, anche se ho a disposizione ancora linux su macchina virtuale e windows su una partizione secondaria.
La scelta più ovvia sarebbe continuare ad usare eclipse sotto MacOS.

Non ho però capito come dovrei utilizzare un IDE diverso da Arduino. Sarebbe soltanto un'interfaccia più completa da sostituire alla solita interfaccia standard "verde e bianca" oppure mi permetterebbe di sviluppare tutto il software, compilarlo e caricarlo sulla scheda sempre dalla stessa interfaccia? Mi sembra di intuire che dovrei caricare tutte le librerie di Arduino nel nuovo IDE, ma non capisco come un diverso IDE si dovrà interfacciare con la scheda Arduino connessa al mio PC.


Mi sono spiegato male o hai capito male ma non importa il risultato sempre quello è.
Quote
Consigli:
Trova un IDE decente con cui ti trovi bene, questo deve essere in grado di avviare il compilatore nativo, cioè crea codice per la piattaforma su cui è eseguito il compilatore e l'ide. Io uso GNU/Linux e come ide uso QtCreator.


Deve essere in grado di avviare il compilatore nativo:
        Il compilatore nativo genera codice per la stessa piattaforma su cui viene eseguito, detto alla carlona "compili codice che gira
        sul PC.
Il compilatore non nativo è il cross-compiler il quale "gira" sul PC ma genera codice binario per una piattaforma diversa dal PC.
Si è più semplice dire che avrgcc gira sul pc e genera codice binario specifico per architettura AVR quindi è un cross-compiler.
Però avrgcc può anche essere compilato per girare su architettura "ARM" e quindi può essere eseguito su ARM ma genera codice per AVR.

Insomma nel cross-compiler la piattaforma su cui viene eseguito e diversa da quella per il quale genera codice binario.

Quindi io *non* ti ho consigliato di cambiare IDE per arduino, ma ti consiglio di usare il PC per testare codice che poi andrai a compilare con arduino. In questo modo per prendere confidenza con le classi ecc non devi flashare ma basta che usi le printf del C
o cin cout di C++ per fare debug. Puoi testare le bitwise, le macro, i calcoli per settare i timer ecc.

Per Mac puoi usare anche QtCreator come pure per windows, solo che per linux tutto si risolve con l'installazione di pacchetti pronti, per Mac e windows non credo che sia così immediato, in quanto mancano tutte le dipendenze, cioè il compilatore gcc per windows o Mac, make ecc che mi pare si trovino tutte in un unico file compresso da scaricare e sistemare nel filesystem manualmente. Mentre per Qt e QtCreator ci sono gli exe autoinstallanti e per Mac non lo so.

Ciao.



AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

gamby

Ah beh... Ora è chiaro! Avevo interpretato male la cosa.
Pensavo che il consiglio di utilizzare un altro IDE fosse più che altro per un fatto di "leggibilità" del codice, ma non mi ero posto il problema del testare il codice senza flashare, cosa che in effetti sarebbe molto ma molto comoda.

A questo punto parto subito con qualche test...

Grazie di nuovo!

Go Up