Show Posts
Pages: [1] 2 3 ... 6
1  International / Software / Re: wordWrite() per MCP23017 on: May 14, 2014, 05:16:42 pm
Gli esempi li avevo visti ma non vedevo nulla che mi potesse essere d'aiuto , tu dici che per impostare la porta posso utilizzare pin.Mode, ma così non vado ad impostare il singolo pin?
Nello specifico per impostare una porta con arduino e poi comandarla utilizzo questo metodo:

Code:

void setup()
{
  DDRD = B11111111;
}
 
void loop()
{
  PORTD = B11110000;
  delay(1000);
}

Nell'esempio vado ad impostare i pin della porta D come uscite e poi con PORTD le vado a comandare.
Ho provato questo metodo con adafruit, anteponendo a DDRB e PORTB l'oggetto "mcp." ma ottengo degli errori in fase di compilazione.
2  International / Software / Re: wordWrite() per MCP23017 on: May 13, 2014, 10:42:18 am
 smiley-red smiley-red smiley-red

Sono sicuro che un tecnico del tuo livello, Leo, quando apre un file.h non ha alcun problema a capirne i vari significati, purtroppo la cosa non vale per quelli come me!!  smiley-cry
Ho provato a guardare il file, ma come ben immaginavo, a parte qualche comando il resto rimane incomprensibile, nello specifico non riesco a capire come configurare/comandare le due porte dell'MCP.

Con "Wire" faccio questo ad esempio per configurare i pin della porta A come uscite:

Code:
Wire.beginTransmission(0x20);
Wire.write(0x00);
Wire.write(0x00);
Wire.endTransmission);

Questo poi per comandarle:

Code:
Wire.beginTransmission(0x20);
Wire.write(0x12);
Wire.write(0b11001100);
Wire.endTransmission);

Ho cercato in giro anche esempi, ma nulla che mi venisse d'aiuto!

Ribadisco comunque che utilizzando lowByte e highByte ho ottenuto l'aiuto che cercavo, quindi sono "a posto" per le prove che sto eseguendo, sarebbe poi un di più (molto gradito) capire se adafruit possa venire in aiuto per ottimizzare righe di programma!

Grazie

Meluino

3  International / Software / Re: wordWrite() per MCP23017 on: May 12, 2014, 06:28:32 pm
Sono riuscito solo ora a mettere in pratica quanto suggerito da Leo e devo dire che mi hai dato un'ottimo consiglio, sono riuscito ad ottenere quello che volevo ottenere, GRAZIE MILLE smiley
Poi mentre ricontrollavo il lavoro svolto ho fatto mente locale che comunque (come si può vedere nell'esempio del post precedente)  non stavo utilizzando la libreria adafruit, ma utilizzo ancora  le funzioni di "wire"! Sicuramente utilizzando adafruit eliminerei righe di programma, ma come faccio  a conoscere i vari comandi, voglio dire, non esistono degli esempi su come utilizzare questa libreria?

Grazie

Meluino
4  International / Software / Re: wordWrite() per MCP23017 on: May 11, 2014, 11:23:02 am
Allora ho cercato un po' in giro come usare le funzioni lowByte ed highByte, vediamo se ho capito!

Piccolo sketch d'esempio:

Code:
Int numero= 0x00FF;
byte  lo,hi;

void setup(){
lo = LowByte (numero);
hi = HighByte (numero);
}
void loop(){

Wire.beginTransmission(0x20);
Wire.write(0x12);
Wire.write(lo);
Wire.endTransmission();

Wire.beginTransmission(0x20);
Wire.write(0x13);
Wire.write(hi);
Wire.endTransmission();
}

Nello sketch di esempio ho inserito solo le parti d'interesse per capire il concetto, quindi se tutto va come penso debba andare l'integrato si comporta nel seguente modo:

Porta A: 11111111
Porta B: 00000000

Giusto?
5  International / Software / Re: wordWrite() per MCP23017 on: May 10, 2014, 04:50:22 pm
 smiley-cry smiley-cry smiley-cry
Sì, anch'io ho trovato solo questo!!
6  International / Software / Re: wordWrite() per MCP23017 on: May 10, 2014, 02:37:44 pm
Grazie per la risposta "mid"!!
Avevo visto in giro questa libreria, ma non ho idea di come poter richiamare la funzione che mi interessa!!
Qualche suggerimento  smiley-kitty smiley-kitty smiley-kitty  please........
7  International / Software / wordWrite() per MCP23017 on: May 09, 2014, 09:23:28 pm
Ciao a tutti,
   sto svolgendo delle prove con un MCP23017 e dei display a 7 segmenti e vorrei utilizzare le 16 uscite (nel mio caso uscite) in una stringa sola, praticamente, se non dico fesserie, utilizzare una word.
Cercando in rete ho trovato una funzione interessante nel Playground (http://playground.arduino.cc/Main/MCP23S17#wordWrite), la funzione "wordWrite()"!! Il Problema è che questa libreria si riferisce all' MCP23S17, vorrei sapere se esiste qualcosa di analogo anche per il fratello che utilizza l'I2C!
Visto i costi in gioco si farebbe sicuramente prima a cambiare integrato, però vorrei tentare di capire se vi è la possibilità con qualche altra libreria di ottenere lo stesso risultato, al momento l'MC23017 lo gestisco con la libreria "Wire" e mi sembra di capire che così non ci sia una scorciatoia!

Grazie

Meluino
8  International / Hardware / Re: Spiegazione sulle resistenze di pull-up e piccola precisazione on: April 06, 2014, 11:41:56 am
quindi col loop impostato così sarebbe corretto?
Code:
void loop() { 
  stato = digitalRead(bottone);
  if (stato == HIGH) { 
    digitalWrite(led, LOW);
  } 
  else { 
    digitalWrite(led, HIGH);
  } 
}

Se vuoi accendere il led ad ogni pressione del pulsante va bene (col secondo schema) però io normalmente non utilizzo le resistenze interne, non so è una mia fissa, magari qualche utente più esperto può spiegare meglio se è preferibile utilizzare un metodo piuttosto che l'altro!!

9  International / Hardware / Re: Spiegazione sulle resistenze di pull-up e piccola precisazione on: April 05, 2014, 01:20:51 pm
ma l'effetto è contrario, ovvero il led è sempre acceso e se pigio il bottone si spegne

L'effetto è contrario perché nel primo schema porti +5v quando premi il pulsante, nel secondo invece porti gnd quando premi.
10  International / Hardware / Re: Spiegazione sulle resistenze di pull-up e piccola precisazione on: April 05, 2014, 01:15:58 pm
Mi pare di ricordare che su una scheda Arduino in particolare il pin 13 fosse dotato di resistenza interna e quindi si può evitare di usare quella esterna, ma ciò vale solo per il pin 13 e quella particolare scheda.

Se non ricordo male su arduino uno solo il pin 13 è dotato di una resistenza da 1k.

Ma rimane il fatto che non riesco ancora bene ad afferrare il concetto... Cioè se io non prendessi queste accortezze cosa può succedere?

Tornando al tuo schema (il primo), nel momento in cui premi il pulsante porti al pin 7 il valore logico 1 (5V), questo fa accadere qualcosa, a seconda dello sketch caricato. Quando rilasci il pulsante il valore logico al pin 7 è 0 (0V) perché colleghi a quel pin la massa tramite una resistenza denominata di pull-down (ovvero forzi il valore logico 0), anche in questo caso a seconda dello sketch caricato si ha una conseguenza sul circuito. Se tu non forzassi questo 0 logico ai capi del pin non avresti una tensione di 0V ma delle tensioni variabili, e queste potrebbero essere interpretare da arduino come se avvenisse  una pressione del pulsante che in realtà non c'è.

Se leggi sul link che ti ho postato prima trovi una spiegazione sicuramente più esauriente.

Meluino



11  International / Hardware / Re: Spiegazione sulle resistenze di pull-up e piccola precisazione on: April 05, 2014, 10:53:59 am
Ciao, provo, per quanto sia nelle mie capacità, a spiegartelo io. La resistenza di pull-up o di pull-down (come nel tuo esempio)  serve per tenere l'ingresso di arduino ad uno stato logico ben preciso quando il pulsante si trova col contatto aperto. Se non si portasse l'ingresso verso "ground" questo risulterebbe "flottante" e percepirebbe vari segnali che in alcuni casi scambierebbe come se venisse premuto il pulsante, quindi vedresti accendersi e spegnersi il led in maniera casuale.
Ovviamente non si può portare l'ingresso direttamente a massa, perché nel momento in cui si preme realmente il pulsante si avrebbe un bel corto-circuito, per questo motivo si interpone una resistenza, di solito da 10k.
Spero di essere stato utile, inoltre ti consiglio di leggerti questa pagina: http://it.wikipedia.org/wiki/Resistenza_pull-up.

ciao

Meluino
12  International / Generale / Re: Protezione codice on: March 25, 2014, 05:12:36 pm
so che sono passati molti anni ma volevo dire la mia.
al posto di proteggere da lettura e copia basta utilizzare una scheda in SMD, tirare fuori e segnali utilizzati ed inserire il tutto in un a bella colata di resina....oppure usare direttamente il solo chip e rasare il codice scritto sopra...hai voglia a cercare di cosa si tratta.
Fabio
 smiley-evil

 smiley-eek-blue

.......e che cos'è la NASA......

Anch'io vorrei dire la mia, giusto perché di questo argomento se ne "discuteva" non più di un mese fa con dei miei colleghi.
Partendo dal presupposto che ignoro completamente cosa dice la licenza di arduino e sinceramente non sono nemmeno interessato a conoscerne il contenuto, reputo che chi si vuol basare su questo tipo di piattaforma e ne vuole nascondere a tutti il codice commette, dal mio punto di vista, un'azione "ideologicamente" scorretta e del tutto opinabile!

Come dicevo prima ne "discutevo" con una persona che in seguito ad un progetto realizzato, il tester per valvole proporzionali, ne voleva nasconder il codice! A parte che un programmatore anche di medio-basso livello che si mette a leggere quel codice probabilmente si mette a ridere, ma non è questo il punto, se siamo riusciti ad ottenere un minimo di risultato è stato grazie alla condivisione che altri utenti hanno fornito dei loro codici. Codici che magari in alcuni punti ho copiato o leggermente modificato, ma che senza di essi non sarei riuscito a combinare nulla, perciò rimango sempre molto basito quando vedo che qualcuno utilizzando arduino vuole tracciare qualsivoglia segreto!
Senza tener conto del fatto che uno dei principi che sta alla base della nascita di questo favolo prodotto è la didattica!!

So che l'utente "volcane" ha lui stesso affermato di chiedere qualcosa che va contro la fisolofia vigente e ribadisco il fatto che questa opinione si riferisce solo ad arduino e non alla disavventura dalla lui raccontata, però ci tenevo particolarmente ad intervenire.

Meluino
13  International / Software / Re: creare impulso per relè bistabile on: March 24, 2014, 09:48:18 am
 smiley-sweat

Sono riuscito nell'impresa, però, nonostante ci abbia provato, non ho utilizzato "millis" (non sono stato in grado di ottenere un risultato utile).
Ho immesso un'altra variabile che ho comparato con encoderValue ed il risultato è stato quello desiderato:

Code:
If (encoderValue -encoderValue1 == 0) {
//metto tutto a 0
} else{
//le uscite prendono il valore di encodeValue e encoderValue1 diventa uguale ad encoderValue
}

Dal punto di vista funzionale "funziona" ma dal punto di vista di programmazione è corretto?

Meluino
14  International / Software / Re: creare impulso per relè bistabile on: March 23, 2014, 05:08:06 am
Leo72, grazie per le dritte che dai, come sempre sei di grandissimo aiuto per chi come me non è un programmatore ma vuole comunque provarci!
Devo dire che non ho ancora avuto la possibilità di eseguire i suggerimenti quindi spero di evitare pessime figure, come ho fatto nell'ultimo topic!!  smiley-razz smiley-mr-green
Per quanto concerne la funzione "switch", non credo possa essermi utile, in quanto il progetto finale prevede l'utilizzo di 8 relè, quindi se non vado errato una combinazione totale di 256 casi, nella struttura che ho postato io faccio eseguire queste combinazioni mettendo il valore di encoderValue in "Wire.write".

Code:
Wire.write(encoderValue);

Ora dal punto di vista software non so cosa succede, questo sicuramente me lo potrai spiegare tu, però il risultato è quello desiderato!! Quindi credo che sull'attivazione delle uscite questa sia la strada giusta, sottolineo credo!!  smiley-roll-sweat

Per quanto concerne "millis" è una funzione che non conosco, o per lo meno ho utilizzato solo se faceva parte di sketch già esistenti, quindi non so bene come possa venirmi utile, se qualcuno vuole darmi qualche dritta non mi offendo mica eh....  smiley-grin.
Detto questo ho cercato sul Playground e la spiegazione che mi da mi lascia un po' dubbioso: "utilizzata per restituire il numero di millisecondi dall'inizio del programma Arduino. overflow (tornare a zero), dopo circa 50 giorni."
 smiley-roll smiley-roll smiley-roll Ma questo a cosa mi serve per spegnere delle uscite???????
Il perché l'ho trovato cercando un po' in giro, ora non so se faccio una cosa consentita, però ho trovato alcuni link dove viene spiegato molto bene come utilizzare questa funzione, quidi vorrei postarli credendo di far cosa gradita a tutti coloro che navigano nlle mie stesse condizioni.
Uno è sicuramente il blog di Leo72: www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/
L'altro è suggerito da Mauro Alfieri ed è di Vittorio Zuccalà: http://zuccala.blogspot.it/2010/01/multitasking-arduino-millis-parte-1.html

Meluino


Edit modificato link
15  International / Software / Re: creare impulso per relè bistabile on: March 21, 2014, 02:50:13 pm
Vediamo se ho capito.
Hai bisogno di mandare 2 impulsi allo stesso relé a distanza di breve tempo: col primo impulso attivi il relé, col secondo impulso riporti il relé nel precedente stato. E' giusto?

Non proprio, ma il problema è che mi sono spiegato decisamente male!!
Allora, metto da parte per un attimo i relè, supponiamo che sto comandando solo un mcp23017, due uscite qualsiasi.
Utilizzo un pulsante, lo premo e creo sulle due uscite la sequenza 0-1 (0 su un'uscita e uno sull'altra) lo rilascio e le uscite si riportano allo stato di 0-0, dopo ripremo il pulsante e le uscite si portano nella combinazione 1-0, rilascio il pulsante e si riportano 0-0, e così via! Ora utilizzando il pulsante questo tipo di ragionamento riesco a ricrearlo, il problema è che voglio riprodurre la stessa cosa con l'encoder.
Giro di uno scatto l'encoder e ottengo la combinazione  0-1, rimane attiva per X ms e le uscite si riportano a livello 0-0. La combinazione 1-0 deve attivarsi solo al secondo scatto dell'encoder, ed anche in questo caso via via sino al limite da me imposto.

Forse sono un po' contorto nella domanda , sicuramente è più facile la soluzione del quesito che capire quello che voglio intendere.   smiley-razz

Grazie

Meluino
Pages: [1] 2 3 ... 6