salve raga , sto provando a far funzionare mcp23s17 con un esempio della libreria , pero se provo a compilare mi da errore e dice che gli manca il such file nella directory , gentilmente qualcuno puo illuminarmi ??
- dove hai preso la libreria?
- quale versione di IDE Arduino usi?
- quale S.O. usi? Wndows/Linux?
- puoi postare la sequenza esatta degli errori segnalati dall'IDE ?
- hai messo la libreria nella cartella giusta? (dove l'IDE salva i progetti c'e' una Libraries, deve stare li sotto)
allora uso win8 come s.o , ho provato con due versioni bdi ide la 1.4 e la 1.0 in entrambi i casi danno lo stesso errore , la libreria lo scaricata dal sito di arduino ,cioe e quella originale , e la cartella lo posizionata nella cartella libraries, nella cartella mcp23s17 ci sono i seguenti file : mcp23s17.cpp, mcp23s17.H , manual.txt , keywords.txt , .ds_store e la cartella example , all interno ci sono 3 cartelle con 1 esempio ciascuno con estensione .pde
il "such file" non è il nome del file, ma un pezzo dell'errore. posta tutto il mesaggio di errore con un bel copia incolla.
In file included from mcp23s17_byte_bit_example.cpp:29:
D:\Software\elettronica\Arduino\arduino-1.0\libraries\MCP23S17/MCP23S17.h:73:22: error: WProgram.h: No such file or directory
relinquished:
In file included from mcp23s17_byte_bit_example.cpp:29:
D:\Software\elettronica\Arduino\arduino-1.0\libraries\MCP23S17/MCP23S17.h:73:22: error: WProgram.h: No such file or directory
E' perché è scritto per una vecchia versione dell'IDE ... prova a sostituire quel WProgram.h con Arduino.h ...
Guglielmo
Edit : O, ancora meglio :
#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
si, ma poi ti ritrovi molto probebilmente anche erroi con la write al posto della send etc..
meglio se cerchi una libreria aggiornata, e riusumare questa antichità solo se realmente necessario.
ma ho scaricato anche la libreria presa da github , ma lo stesso non funziona
... prova a fare la modifica che ti ho detto ... io ho provato e così compila correttamente, usando l'IDE 1.04, gli esempi che sono allegati
Guglielmo
... e magari scarica anche quello che trovi qui : GitHub - adafruit/Adafruit-MCP23017-Arduino-Library: Arduino Library for Adafruit MCP23017 ... che, anche loro, ne hanno una aggiornata per il nuovo IDE
Guglielmo
ok ho risolto questo problema , pero ora ho provato gli esempi della libreria e non funziona , anche se non sono neanche che dovrebbe fare , pero in teoria collegando dei led si dovrebbero accendere dei led .
questo e il codice che sto usando ,
#include <SPI.h> // We use this library, so it must be called here.
#include <MCP23S17.h> // Here is the new class to make using the MCP23S17 easy.
MCP inputchip(1); // Instantiate an object called "inputchip" on an MCP23S17 device at address 1
MCP outputchip(2); // Instantiate an object called "outputchip" on an MCP23S17 device at address 2
void setup() {
inputchip.pinMode(0xFFFF); // Use word-write mode to set all of the pins on inputchip to be inputs
inputchip.pullupMode(0xFFFF); // Use word-write mode to Turn on the internal pull-up resistors.
inputchip.inputInvert(0xFFFF); // Use word-write mode to invert the inputs so that logic 0 is read as HIGH
outputchip.pinMode(0x0000); // Use word-write mode to Set all of the pins on outputchip to be outputs
}
void loop() {
int value; // declare an integer to hold the value temporarily.
value = inputchip.digitalRead(); // read the input chip in word-mode, storing the result in "value"
outputchip.digitalWrite(value); // write the output chip in word-mode, using our variable "value" as the argument
// outputchip.digitalWrite(inputchip.digitalRead()); // this one line replaces the three above, and is more efficient
}
mi dite quale puo essere il problema ??
devo avere due MCP, uno lo setti con indirizzo 1 e uno con indirizzo2.
A questo punto lo sketch legge l'MCP1 e accende i pin corrispondenti sull MCP2...
dato che sono un po inesperto mi potresti spiegare come fare a modificare il firmware per fare accendere tutti i led di una porta del mcp
finalmente lo sto facendo funzionare ora sembra molto piu semplice , cmq volevo chiedere un altra cosa sto analizzando il protocollo spi tramite un terminale , acquisisco 40 byte alla volta ed ho notato che che lancia parecchi byte prima di ripetersi , ora quello che vorrei capire ma devo per forza inviare di nuovo tutti i valori di tutti i registri , o posso riscrivere solo il registro desiderato??
in teoria credo solo quello desiderato, poi vedi da datasheet.
be il data dice che mcp pio operare in 2 modalita sequenziale e classica , dove sequenziale utilizza un contatore interno che incrementa in automatico il registro , quindi se noi manderemo per esempio 4 byte cioe opcode/addr/data/data per esempio 64/19/255/240 sapro che il primo byte e lindirizzo fisico del mcp , il secondo byte e il registro di partenza dove inseriremo il valore di 255 e poi il contatore interno da solo passera al registro sucessivo cioe 20 dove si inserira il 4 byte cioe il valore di 240 , oppure nella modalita classica dove gli manderai solo 3 byte cioe opcode/addr/data in modo da poter leggere o scrivere un singolo registro , il problema e che non riesco a capire la libreria che tipo di modalita usa
ma da quel che capisco ne sai... anzi direi che orami ne sai abbastanza per SCRIVERLA TU la libreria. alla fne è anche semplice se usi la SPI!
il problema e che per quanto ne ho capito non riesco a farlo funzionare come voglio
bhe cosa vuoi e come lo vorresti fare?
ok ci sono riuscito , alla fine il problema era che non utilizzavo il chip select , dato che lo collegavo direttamente a massa , ed era questo il mio problema , ora lo sto utilizzando a modo mio inviando i comandi che dico io al mcp , e per controllarlo ho usato sia arduino che un pic16f887 che una stm32 discovery , ora devo solo far funzionare il raspberry