Loading...
Pages: 1 [2] 3 4   Go Down
Author Topic: MCP23S17 per comandare dei relay  (Read 1380 times)
0 Members and 1 Guest are viewing this topic.
Cagliari
Offline Offline
Faraday Member
**
Karma: 49
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek
Logged

IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85
Ultimi acquisti:
CodeBender: http://codebender.cc/register/?referrer=PaoloP

Torino
Offline Offline
God Member
*****
Karma: 2
Posts: 720
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
pinMode(LOW);
« Last Edit: January 11, 2013, 12:45:33 pm by tonid » Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
onechip.pinMode(4, HIGH); // sets pin 4 as an input
Mentre questo imposta tutti i pin in un solo comando
Code:
twochip.pinMode(0B0000111100001111); // sets pins 1-4 and 9-12 as input, 5-8 and 13-16 as output


smiley-eek

Non ti torna?  smiley-mr-green
Logged

Torino
Offline Offline
God Member
*****
Karma: 2
Posts: 720
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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.
Quote
Non ti torna? 
Si,mi torna ma dice anche che se vuoi semplicemente settare tutti i pin allo stesso modo puoi semplicemente fare
Code:
onechip.pinMode(LOW);
Mentre se hai bisogno di impostare un solo pin come output
Code:
onechip.pinMode(4,LOW);
ed invece nel caso ti servisse una svariata configurazione usi il set sui singoli pin direttamente con i bit corrispondenti
Code:
twochip.pinMode(0B0000111100001111);
Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 2
Posts: 720
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Facci sapere,ciao.
Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sessione di test 348593bis...  smiley-confuse

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
Online Online
Edison Member
*
Karma: 7
Posts: 2158
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

miiiiiiii, ancora impantanato con sto problema sei? smiley-eek

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

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

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hehe si... ancora impantanato...  smiley-cry
Per la verità non ci ho perso poi così tanto tempo, ci sto lavorando a sessioni di mezz'ora nel fine settimana!  smiley-red

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 Offline
Faraday Member
**
Karma: 49
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85
Ultimi acquisti:
CodeBender: http://codebender.cc/register/?referrer=PaoloP

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
#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 Offline
Faraday Member
**
Karma: 49
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Appena ho un attimo di tempo, rileggo da capo la discussione, perché mi sono un po' perso.  smiley-neutral
Logged

IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85
Ultimi acquisti:
CodeBender: http://codebender.cc/register/?referrer=PaoloP

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hehe, anch'io mi sono perso... Tra un tentativo e l'altro, uno più inconcludente dell'altro, non ci sto capendo più una mazza...  smiley-eek-blue

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

Pages: 1 [2] 3 4   Go Up
Print
 
Jump to: