Show Posts
Pages: [1] 2 3 ... 5
1  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!!

2  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.
3  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



4  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
5  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
6  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
7  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
8  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
9  International / Software / creare impulso per relè bistabile on: March 20, 2014, 03:59:28 pm
Buona sera a tutti,
sto "giocando" con otto relè bistabili, comandati da due ULN2803 che a loro volta vengono pilotati da due mcp23017.
Praticamente tramite codice binario eseguo una sequenza di comandi che mi eccitano i relè in uno stato o nell'altro a seconda del codice generato.
Essendo dei relè bistabilii, non è necessario che l'alimentazione ai capi della bobina sia persistente, basta quindi attivare solo degli impulsi. Durante le prime prove, quando utilizzavo due pulsanti la cosa riusciva perfettamente, mi servivo di due variabili di stato e di una funzione "if", ma ora che ho l'esigenza di introdurre un encoder non riesco più a creare quanto mi serve.

Code:

#include "Wire.h"
int encoderPin1 = 2;
int encoderPin2 = 3;
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
long lastencoderValue =0;
;


void setup(){
  Wire.begin();
  Wire.beginTransmission(0x27);
  Wire.write(0x01);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.beginTransmission(0x20);
  Wire.write(0x00);
  Wire.write(0x00);
  Wire.endTransmission();
  pinMode(encoderPin1, INPUT);
  pinMode(encoderPin2, INPUT);
  digitalWrite(encoderPin1, HIGH);
  digitalWrite(encoderPin2, HIGH);
  attachInterrupt (0, updateEncoder, CHANGE);   
  attachInterrupt (1, updateEncoder, CHANGE);
}

void loop(){
 
 Wire.beginTransmission(0x27);
  Wire.write(0x13);
  Wire.write(encoderValue);
  Wire.endTransmission();
  Wire.beginTransmission(0x20);
  Wire.write(0x12);
  Wire.write(encoderValue);
  Wire.endTransmission();
  delay(100);
}

//****************************************************************
//****************************************************************
//****************************************************************

void updateEncoder(){
  int MSB = digitalRead(encoderPin1);
  int LSB = digitalRead(encoderPin2);
 
  int encoded = (MSB << 1)  |LSB;
  int sum = (lastEncoded << 2)  |encoded;
 
  if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011)
  encoderValue ++;

if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000)
  encoderValue --;

lastEncoded = encoded;
}

Nel codice che ho postato è evidente che le uscite che si trovano in uno stato alto, rimango in quello stato sino a che un nuovo codice generato le riporta a 0, io invece vorrei che che le uscite non fossero sempre attive, ma siano appunto degli impulsi.
Prima di chiedere aiuto ho eseguito svariati tentativi e ricerche, ma non riesco proprio a trovre la quadra.
Qualcuno potrebbe darmi qualche input??

grazie

Meluino
10  International / Generale / Re: tester per valvola proporzionale on: March 09, 2014, 12:19:25 pm
@Leo72  smiley-red smiley-red smiley-red
Volevo chieder venia per la pessima figura che ho fatto, era meglio che, come avevo scritto, facessi prima le prove e poi eventualmente esporre le domande.
Ho eseguito sullo sketch i consigli che mi hai dato e ovviamente........vanno benissimo  smiley-mr-green.
Grazie mille!

11  International / Generale / Re: tester per valvola proporzionale on: March 09, 2014, 09:33:19 am
Il sensore di pressione è un Telemecanique XMLP010BD71V ed il DS è reperibile a questo link http://docs-europe.electrocomponents.com/webdocs/0ff9/0900766b80ff9e01.pdf
12  International / Generale / Re: tester per valvola proporzionale on: March 08, 2014, 11:00:39 am
Per il DS, vorrei aspettare domani per avere il modello preciso del sensore, per quanto concerne l'uscita sono sicuro dei 10V a 10Bar, tra l'altro in attesa del DS allego una serie di misure che ho fatto prima di intraprendere il progetto. I valori in tensione sono presi dal partitore.
13  International / Generale / Re: tester per valvola proporzionale on: March 08, 2014, 07:02:50 am
Che modello di sensore di pressione è montato nel sistema?

Ho provato a ricercare il sensore in RS, dove è stato acquistato, ma non sono riuscito a trovarlo, non avendolo ordinato io.......  smiley-mr-green
Comunque riprendo a lavorare domenica pomeriggio e ti do il modello preciso!!
14  International / Generale / Re: tester per valvola proporzionale on: March 07, 2014, 11:56:20 am
Mmmmmhhh.....mi sa che ho scritto una caspiterata vero? Un valore o è int o è byte, tu intendevi solo di aggiunger const durante la dichiarazione. Giusto?!
15  International / Generale / Re: tester per valvola proporzionale on: March 07, 2014, 11:28:06 am
I pin dichiarali così:
Code:
const byte pin = numero;
Così il compilatore mette il numero di pin come costante in flash e non usa memoria Ram.

Leo, scusa la mia ignoranza, se ero al lavoro con il circuito in mano avrei fatto delle prove prima di chiedere, ma per capire i tuoi consigli volevo sapere se quanto scritto sotto è giusto:

da
Code:
int valConf=0;

a
Code:
const int byte valConf=0

Intendi così?

Quote
Come var di stato, al posto di usare un int per "state" usa un byte e cambiagli valore con uno XOR, risparmi un byte di Ram e semplifichi il processo:
Code:
byte state = 1;
state ^= 1; //diventa 0
state ^= 1; //torna ad 1

questo consiglio non riesco a svilupparlo!!  smiley-sad-blue
Pages: [1] 2 3 ... 5