MCP23S17 per comandare dei relay

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

Ciao.