Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3029
|
 |
« Reply #15 on: January 11, 2013, 11:26:32 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
God Member
Karma: 2
Posts: 724
|
 |
« Reply #16 on: January 11, 2013, 12:43:08 pm » |
Ho letto il link alla spiegazione della libreria ma non riesco a capire perchè hai messo nel codice il pin 53 a low... Negli esempi non dice di impostarlo a low o almeno non ho visto scritto in merito . Poi ho letto che per impostarlo in output puoi semplicemente scrivere pinMode(LOW);
|
|
|
|
« Last Edit: January 11, 2013, 12:45:33 pm by tonid »
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #17 on: January 11, 2013, 01:36:37 pm » |
Il pin 53 sarebbe lo slave select per SPI... Non deve essere messo LOW per abilitare la periferica? Per la funzione pinMode la guida della libreria riporta questo, che però da quanto ho capito imposta un pin per volta: onechip.pinMode(4, HIGH); // sets pin 4 as an input Mentre questo imposta tutti i pin in un solo comando twochip.pinMode(0B0000111100001111); // sets pins 1-4 and 9-12 as input, 5-8 and 13-16 as output Non ti torna? 
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
God Member
Karma: 2
Posts: 724
|
 |
« Reply #18 on: January 11, 2013, 01:46:07 pm » |
Il pin 53 sarebbe lo slave select per SPI... Non deve essere messo LOW per abilitare la periferica? Se usi la Spi si...ma in questo caso potrebbe essere la lib stessa che gestisce il tutto,anche guardando gli esempi non mostra impostazione a LOW del pin ss (select slave) che chiamiamo cs. Non ti torna? Si,mi torna ma dice anche che se vuoi semplicemente settare tutti i pin allo stesso modo puoi semplicemente fare onechip.pinMode(LOW); Mentre se hai bisogno di impostare un solo pin come output onechip.pinMode(4,LOW); ed invece nel caso ti servisse una svariata configurazione usi il set sui singoli pin direttamente con i bit corrispondenti twochip.pinMode(0B0000111100001111);
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #19 on: January 11, 2013, 03:05:08 pm » |
Ok forse adesso ho un po' più chiara la situazione... Appena riprendo in mano il circuito provo a modificare un po' di cosette nel programma e vedo i risultati.
Grazie!
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
God Member
Karma: 2
Posts: 724
|
 |
« Reply #20 on: January 11, 2013, 03:07:52 pm » |
Facci sapere,ciao.
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #21 on: January 16, 2013, 01:25:26 pm » |
mmm... Niente da fare...
Ho provato a fare le correzioni consigliate e cioè: - tolto la gestione del pin per lo slave select, ma eliminandola non funziona proprio nulla. Però credo che sia perchè sto usando arduino mega che ha il CS sul pin 53. Quindi per ora ho gestito manualmente la cosa, cosa che dovrò fare comunque avendo più periferiche su SPI. - cambiato l'istruzione pinMode come consigliato con: switcher.pinMode(LOW); Anche qui nulla di differente.
Comunque ho analizzato un po' meglio cosa succede "ad orecchio": in pratica come ho già detto funziona solo metà expander, quindi si sentono le commutazioni di metà dei relay collegati. Quando dovrebbero commutare gli altri invece si sente sempre un rumore di bobina più debole, come se tentasse di nuovo di commutare, ma sempre proveniente dai relay funzionanti (se non ho sbagliato a sentire, poichè i relay sono molto vicini. E' come se prima commutasse i primi 7 relay, dopodichè invece di commutare gli altri 7 sembra che tenti di commutare ancora i primi... E' possibile?
Devo ancora provare a misurare le tensioni sulle uscite dell'expander e vedere se succede qualcosa di strano sui pin non funzionanti rispetto a quelli funzionanti
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #22 on: February 09, 2013, 09:40:36 am » |
Finalmente sono riuscito a fare ancora qualche prova, ma purtroppo il circuito non ne vuole sapere di mettersi a funzionare.
La cosa perggiore è che quel poco che adesso funziona magari fra un'ora non funziona più. Vi spiego: ho collegato il tutto questa mattina per misurare le varie tensione di LOW e HIGH su ciascun pin dell'expander e ciascun relay. Ho iniziato dai pin che sapevo essere funzionanti e ho rilevato: - sulle uscite dell'expander LOW a 1,4V e HIGH a 4,8V - Sul relay (uscita dell'ULN2003) LOW a 0,8V e HIGH variabile da 5,7 a 6,2V
Dopodichè ho spento. Dopo un'ora torno, accendo e nemmeno quei pin commutano più: ottengo sull'expander LOW a 0V e HIGH a 0,1V !!!!! Il tutto semplicemente avendo scollegato l'alimentazione e ricollegato un'ora dopo!!! Come può essere?!?!? Escludo problemi di alimentazione perchè misurando i vari chip sono tutti alimentati correttamente.
In questo modo non riesco nemmeno a fare dei test, poichè i risultati sono del tutto inconcludenti! Ma non so nemmeno dove andare a parare per tentare di risolvere il problema.
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #23 on: February 10, 2013, 10:43:36 am » |
Sessione di test 348593bis...  Ho giocato un po' con le alimentazioni, eliminando l'alimentazione da USB dell'arduino e alimentando il tutto con un'unica fonte: alimentatore da 12V che va ad arduino e ad un regolatore da 5V che alimenta i relay... Anche quì nulla da fare. Al che mi sono messo a giocare con il solo MCP23S17 scollegato da ULN2003 e relay, e in questo modo in effetti le uscite sono corrette, 0V pe LOW e 4,9V per HIGH. Conclusione: le uscite dell'expander non vanno d'accordo con l'ingresso dell'ULN2003... Ma perchè??? Da datasheet l'ingresso sembrerebbe semplicemente un transistor con la sua resistenza di base da 2K7, mentre l'unico dato che ho trovato sulle uscite dell'expander è che possono erogare max. 25mA.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 9
Posts: 2191
Arduino rocks
|
 |
« Reply #24 on: February 10, 2013, 06:51:32 pm » |
miiiiiiii, ancora impantanato con sto problema sei?  Però sembra di capire che ne sei venuto a capo o quasi. Sei sicuro che l'ULN è adatto a segnali TTL, no perchè c'è anche la versione CMOS con tensione variabile che parte almeno da 6 volts a salire. Nel dubbio prova a pilotare un ingresso del ULN con una tensione di 3.5 volts e vedi se commuta il relè correttamente, dovrebbe anche communtare con tensione di 3 volts secondo le specifiche TTL. Oppure posta la sigla completa del tuo ULN. Ciao.
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #25 on: February 11, 2013, 09:02:48 am » |
Hehe si... ancora impantanato...  Per la verità non ci ho perso poi così tanto tempo, ci sto lavorando a sessioni di mezz'ora nel fine settimana!  Per lo meno sono arrivato a capire il punto in cui si presenta il problema, concludendo che il software funziona e l'MCP risponde correttamente (almeno a vuoto). La sigla completa è ULN2003AN. Il datasheet indica: - ULN2001 general purpose DTL-TTL-PMOS-CMOS - ULN2002 14-25V PMOS - ULN2003 5V TTL, CMOS - ULN2004 6-15V CMOS La lettera A indica la versione DIP, mentre non so a cosa si riferisca la N. Non appena riesco a fare qualche prova in più con gli ULN riferirò i risultati!
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3029
|
 |
« Reply #26 on: February 11, 2013, 09:54:19 am » |
L'ultima lettera indica l'impedenza termica del package e altre caratteristiche. Vedi pag. 4 --> http://www.ti.com/lit/ds/symlink/uln2003a.pdf
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #27 on: February 11, 2013, 11:44:22 am » |
Ah perfetto grazie, sul datasheet che ho in mano non è indicato. Tornando al discorso... Ho dedicato ancora un'oretta ai test ma purtroppo nemmeno oggi ho concluso qualcosa, anzi... Ho provato a ricaricare il primissimo sketch che ho scritto per iniziare i test, e che riporto: #include <SPI.h> #include <MCP23S17.h>
MCP switcher(0);
void setup() { pinMode(53, OUTPUT); digitalWrite(53,LOW); switcher.pinMode(0B0000000000000000); switcher.digitalWrite(0B1111111111111111); }
void loop() { int i; for (i=1;i<=16;i++) { switcher.digitalWrite(i, LOW); delay(100); } delay(200); for (i = 1; i <=16; i++) { switcher.digitalWrite(i, HIGH); delay(100); } delay(200); } Con questo codice come dicevo in passato funzionano solo metà dei relay, cioè quelli appartenenti al primo "ottetto" di uscite dell'expander. In realtà il circuito è piuttosto instabile: spesso appena tocco qualcosa con i puntali del tester il ciclo si ferma. Ma questo secondo me potrebbe essere causato dai fili di collegamento dell'SPI volanti. Più tardi tempo permettendo rifaccio tutti i collegamenti con dei cavetti schermati. Comunque... In questa situazione ho provato a smontare gli ULN2003 e fare qualche misura: come previsto solo le prime 8 uscite commutano passando da circa 0 a circa 5V. Poi, in questa situazione ho provato diverse modifiche al programma: interferenze e instabilità a parte ho sempre il secondo ottetto di uscite fermo immobile, non si schioda dai 0V... E quì ho veramente il dubbio che sia un problema software o di librerie. Non saprei quale altra prova effettuare su questo circuito. L'unica cosa che potrei fare è costruire un altro ciruito su breadboard eventualmente con un atmega328 invece dell'arduino mega. Così potrei innanzitutto escludere problemi software o incompatibilità con la mega. Come al solito porterò notizie al più presto.
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3029
|
 |
« Reply #28 on: February 11, 2013, 11:47:23 am » |
Appena ho un attimo di tempo, rileggo da capo la discussione, perché mi sono un po' perso. 
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Jr. Member
Karma: 0
Posts: 56
|
 |
« Reply #29 on: February 11, 2013, 12:34:44 pm » |
Hehe, anch'io mi sono perso... Tra un tentativo e l'altro, uno più inconcludente dell'altro, non ci sto capendo più una mazza...  Faccio un riassunto della situazione. Innanzitutto il progetto è costituito da una catena di relay comandati attraverso un expander MCP23S17 su bus SPI. Fanno da tramite due ULN2003. La scheda è alimentata a 5V ottenuti da un regolatore switching, e il cervello è una scheda Arduino Mega. Ho già testato il bus SPI su un circuito che controlla dei display a 7 segmenti con un MAX7221, quindi sono sicuro che il bus SPI funziona, mentre non sono per nulla sicuro che funzioni altrettanto bene la libreria MCP23S17.h Dai test fatti sembrerebbe che la prima metà dell'expander sia funzionante(prime 8 uscite), mentre la seconda metà non si schioda dallo zero logico (uscite 9-16). Il tutto è un po' instabile ma credo che ci sia da lavorare sulla schermatura dei collegamenti SPI. Le ultime conclusioni mi avevano portato a dire che l'uscita dell'expander non andasse d'accordo con l'ingresso dell'ULN2003, ma a quanto pare non è quello il problema perchè metà delle uscite commuta correttamente. Ora vorrei provare a costruire un circuito più semplice possibile con ATMEGA328, MCP23S17 e qualche led per testare in modo sicuro il funzionamento della libreria e dello sketch.
|
|
|
|
|
Logged
|
|
|
|
|
|