Show Posts
Pages: [1] 2 3 4
1  International / Software / Re: MCP23S17 per comandare dei relay on: April 30, 2013, 09:12:45 am
ARGGHHHH... Come non detto...

Ho scoperto che si era creato un duplicato del modem USB nelle impostazioni di rete del sistema operativo, praticamente erano comparso oltre a "Arduino Mega 2560" anche un "Arduino Mega 2561". Una volta eliminati e reinstallato quello corretto è tornato tutto a funzionare...

... Questa me la segno per la prossima volta

  smiley-cool
2  International / Software / Re: MCP23S17 per comandare dei relay on: April 30, 2013, 08:26:17 am
Ma non è possibile!!!

Ho provato poco fa ad effettuare le modifiche alla libreria, e subito ha funzionato tutto alla perfezione...
Quindi sono passato alla fase successiva, cioè scrivere un semplice programma che alla pressione di un tasto abilita, una per volta, le uscite del mio expander.
Nulla di più semplice, se non fosse per il fatto che adesso non so per quale strano motivo, senza aver toccato nulla e senza aver modificato le impostazioni dell'IDE, non esegue più l'upload!!!

Sotto windows funziona tutto perfettamente, mentre sotto mac osx (il mio sistema operativo principale) non c'è verso di flashare anche il più misero sketch...
Mi da il seguente errore:

Code:
avrdude: Version 5.11, compiled on Sep  2 2011 at 18:52:52
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/michele/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/tty.Bluetooth-PDA-Sync
         Using Programmer              : wiring
         Overriding Baud Rate          : 115200
avrdude: wiring_open(): releasing DTR/RTS
avrdude: wiring_open(): asserting DTR/RTS
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

avrdude done.  Thank you.

Ripeto che con Windows funziona tutto correttamente, quindi escludo un problema alla scheda, in più anche scollegando l'usb non chiede più come prima di scegliere la porta, ma da lo stesso identico errore.
Ho anche provato a cancellare e ri-installare l'IDE, cancellare la cartella delle mie librerie e dei miei progetti, ma nulla. Non ho nemmeno trovato altri files di configurazione sparsi.

Sicuramente è un problema banalissimo, ma non riesco a venirne a capo! Metto apposto un tassello e se ne rompe un altro!!!  smiley-confuse
3  International / Software / Re: MCP23S17 per comandare dei relay on: April 30, 2013, 02:55:46 am
Ottimo! Grazie per il suggerimento, lo leggo molto volentieri!
4  International / Software / Re: MCP23S17 per comandare dei relay on: April 30, 2013, 02:50:22 am
Ringrazio entrambi per i consigli e la disponibilità. Purtroppo anche per me il tempo è poco, sto approfittando di un paio di giorni di ferie e del brutto tempo per riprendere in mano il progetto, ma in queste poche ore a disposizione preferisco completare la parte hardware, di cui mi manca veramente poco, dopodichè proseguire con calma con test vari e un software fatto bene.
Ora mi interessava appunto capire se fosse possibile e come spostare questo benedetto pin SS per poi fare tutti gli altri collegamenti del caso e testare il funzionamento dell'hardware... Senza dubbio mi metterò più avanti a capire meglio il protocollo e proverò sicuramente a migliorare qualcosa.

Nel frattempo mi devo limitare alle piccole modifiche suggerite... Tornando appunto al discorso "PORTG" io mi sono limitato a seguire la logica della libreria originale, che appunto usava gli operatori &= e |= per assegnare il valore al pin richiesto, ma assegnando comunque gli 8 bit.
Non avevo invece assolutamente calcolato il problema di settare PG5 come output, e non conoscevo il comando DDR... Ora mi sto leggendo la guida sul port manipulation dal sito di Arduino, e più tardi farò qualche test con queste modifiche...

Nel frattempo grazie a tutti, mi farò sentire spero con buone notizie!
5  International / Software / Re: MCP23S17 per comandare dei relay on: April 29, 2013, 11:26:55 am
Di nuovo alle prese con il famoso MCP23S17...
Ormai è passato parecchio tempo da quando avevo fatto svariate prove con SPI e Slave Select. Avevo compreso abbastanza a fondo il funzionamento del comando di slave select della libreria con l'assegnazione tramite PORTB. Sfruttando il pin 53 del mega come Slave Select (appunto il pin SS predefinito) avevo ottenuto un funzionamento corretto e stabile. Avevo anche eseguito un buon numero di test con i vari comandi messi a disposizione dalla libreria ottenendo risultati positivi.

Ora per proseguire il progetto ho bisogno di spostare il pin di Slave Select di questo MCP su un altro pin, poichè il 53 è occupato dalla shield di uno schermino LCD.
Ho scelto per ora il "Digital pin 4" che sul ATMEGA 2560 corrisponde a PG5...

Detto fatto: ho sostituito nella libreria le due assegnazioni per abilitare e disabilitare il pin 5 della porta G:
PORTB &= 0b11111110   -->   PORTG &= 0b11011111
PORTB |= 0b00000001   -->   PORTG |= 0b00100000

Così facendo però il mio MCP non funziona correttamente, ho degli scatti "random" sui relay, stessa situazione che si era creata quando non avevo impostato correttamente PORTB nei primi tentativi... Ma cosa sbaglio in questo caso???
6  International / Software / Re: MCP23S17 per comandare dei relay on: February 23, 2013, 06:40:05 am
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!
7  International / Software / Re: MCP23S17 per comandare dei relay on: February 22, 2013, 04:12:10 pm
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.
8  International / Software / Re: MCP23S17 per comandare dei relay on: February 22, 2013, 02:45:21 pm
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.
9  International / Software / Re: MCP23S17 per comandare dei relay on: February 20, 2013, 12:33:51 pm
In effetti mi sto rendendo conto che un po' di pratica vale molto più di tante ore passate sui libri.
Ho già fatto i corsi di base sul C all'università, ma vedo che la teoria è molto diversa dalla pratica... Cioè un conto è scrivere un programmino con qualche ciclo, usare la ricorsione, le funzioni delle librerie standard, ecc, e un conto è mettersi a scrivere software, seppur semplice, per far funzionare qualcosa di reale.
Per non parlare di "trucchetti" (messo tra virgolette perchè mi rendo conto che per un programmatore sono cose basilari), vedi la tilde per invertire i bit di cui non ricordavo minimamente l'esistenza.

Per punizione mi ci metto volentieri a imparare un po' di cosette  smiley-mr-green
Sono ben accetti consigli su cosa iniziare a studiare.

Tornando alle cose importanti... Quasi quasi lo spumante lo stappo davvero!!!  smiley-evil
10  International / Software / Re: MCP23S17 per comandare dei relay on: February 18, 2013, 01:09:25 pm
YESSSSSSSSSS..... PERFETTO!!!!!

 smiley-grin smiley-grin smiley-grin smiley-grin

Inizio a capire la logica... Non avevo capito che quel "PORTB" era riferito al registro dell'ATMEGA, pensavo fosse ancora del 23S17!
Praticamente ho sostituito il valore binario di PORTB in tutta la libreria in questo modo:

Code:
PORTB |= 0b00000001
PORTB &= 0b11111110

Ora funziona correttamente. Non ho fatto dei test intensivi ma a quanto pare il ciclo for del mio programmino di test funziona correttamente!
Grazie a tutti per il supporto, specialmente a MauroTec per essere andato a studiare datasheet e libreria...

Per chi dovesse incappare nello stesso problema dopo di me allego la libreria corretta (non ho usato le #define perchè in realtà i valori sono due).
11  International / Software / Re: MCP23S17 per comandare dei relay on: February 17, 2013, 01:02:59 pm
Rieccomi...
Ho dato un'occhiata al datasheet e alle librerie di questo benedetto MCP23S17, ma ho le idee ancora più confuse di prima.

Si parlava di Slave select e di quel valore "PORTB |= 0b00000100" che corrisponderebbe al pin slave select sul ATMEGA328.
Ma come faccio a modificarlo per dare la corrispondenza al relativo pin sul ATMEGA2560? A quanto vedo non è sufficiente ricavare il valore binario corrispondente al pin SS.

Quei pin A0,A1,A2 identificano l'indirizzo del 23S17. Vanno settati HIGH o LOW in base all'indirizzo che si vuole dare al chip. In questo modo è possibile collegare fino a 8 dispositivi in parallelo con un solo pin SS, e attivare quello corretto attraverso l'indirizzo che lo identifica.
Nel codice l'indirizzo va inizializzato assieme al nome del chip.
Nel mio circuito ho messo i tre pin a massa, quindi ho inizializzato il componente con l'indirizzo zero in questo modo:
Code:
MCP switcher(0);
Così che in seguito nel codice farò riferimento a quel chip con il nome switcher che identifica il dispositivo con indirizzo zero.
12  International / Software / Re: MCP23S17 per comandare dei relay on: February 12, 2013, 01:36:06 pm
Sto facendo riferimento a questa pagina: http://playground.arduino.cc/Main/MCP23S17

A un certo punto è scritto:
Quote
The class does include several more methods that can be used to simplify configuration in the same "Arduino-ish" way, methods for writing/reading 8-bit registers (configuration and I/O ports) at once, as well as writing/reading consecutive registers (allowing all 16 bits to be read or written with one method call)

Quindi se non ho capito male sarebbe possibile impostare i pin da 1 a 16 senza preoccuparsi dei due registri. Cosa che io ho prontamente evitato  smiley-twist
Non avevo invece controllato la presenza del pin SS nella libreria. Avevo cambiato da 10 a 53 nella #define ma non avevo notato che non era presente nel codice.

Però ho anche provato ad assegnare manualmente il segnale al pin 53 con un semplice digitalWrite(53,LOW).
Non ricordo se lo avevo letto o se è una mia convinzione, ma non è la stessa cosa? Anche perchè se così non fosse come si fa a controllare più slaves? Occorre modificare la libreria di ogni periferica per assegnare un pin di slave select diverso?

A questo punto devo provare a modificare quel "PORTB |= 0b00000100" per puntare al pin 53.
13  International / Software / Re: MCP23S17 per comandare dei relay on: February 12, 2013, 10:31:58 am
Altra prova rapida...

Con questo codice funzionano i famosi 8 ingressi, mentre gli altri restano fissi alcuni LOW e alcuni HIGH senza una logica apparente:

Code:
#include <SPI.h>
#include <MCP23S17.h>

MCP switcher(0);

void setup() {
  pinMode(53, OUTPUT);
  digitalWrite (53, LOW);
  switcher.pinMode(0B0000000000000000);
}

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 quest'altra sento delle commutazioni che non hanno niente a che vedere con ciò che c'è scritto nel programma: ho delle commutazioni sull'uscita 9 con tempi diversi da quelli scritti nello sketch e un'altra commutazione sull'uscita 7 che non so da dove arriva!!!

Code:
#include <SPI.h>
#include <MCP23S17.h>

MCP switcher(0);

void setup() {
  pinMode(53, OUTPUT);
  digitalWrite (53, LOW);
  switcher.pinMode(0B0000000000000000);
}

void loop() {

    switcher.digitalWrite(9, HIGH);
    delay(200);
    switcher.digitalWrite(9, LOW);
    delay(500);
}

Qui addirittura ho commutazioni su 4 relè diversi:

Code:
#include <SPI.h>
#include <MCP23S17.h>

MCP switcher(0);

void setup() {
  pinMode(53, OUTPUT);
  digitalWrite (53, LOW);
  switcher.pinMode(0B0000000000000000);
}

void loop() {

    switcher.digitalWrite(1, HIGH);
    delay(200);
    switcher.digitalWrite(1, LOW);
    delay(500);
}

Adesso ho anche sostituito i cavetti con un cavo a 4 poli schermato, ed in effetti sembra un po' meno sensibile ai disturbi del tester, delle mani, ecc.
Però non cambia il funzionamento.
14  International / Software / Re: MCP23S17 per comandare dei relay on: February 12, 2013, 08:42:53 am
Grazie dei suggerimenti.

La libreria funziona in diverse modalità:
- Impostando un pin per volta, ed i pin sono numerati da 1 a 16
- Impostando tutti i pin in un solo colpo con una stringa di 16 bit (esempio 0B1111111111111111 per impostare tutti i pin a HIGH) oppure con una word esadecimale (0xFF se non ricordo male per tutti HIGH).
Non ho ancora ben chiaro se ci siano anche altri modi di funzionamento. Sono partito da questi perchè sono i più semplici e proprio per questo non vedo perchè non dovrebbero funzionare.
Ho già fatto anche un po' di prove per eccitare tutto insieme, o un pin singolo, o una sequenza. Ieri sera ho anche provato senza relay, solo con led e resistenze collegati ad un singolo pin. Il risultato è sempre lo stesso... Alcuni pin vanno, altri no, il tutto sempre in modo molto instabile.

L'unica prova che devo ancora fare è sostituire i cavetti del bus SPI con qualcosa di schermato, ma ho i miei dubbi che sia una cosa risolutiva perchè a quanto pare il bus trasmette correttamente... Comunque potrebbe essere un passo avanti per rendere il tutto più stabile.
15  International / Software / Re: MCP23S17 per comandare dei relay 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...  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.
Pages: [1] 2 3 4