Go Down

Topic: [RISOLTO]quante volte mandare HIGH/LOW un pin in un ciclo (Read 906 times) previous topic - next topic

stefa24

Jul 03, 2013, 04:46 pm Last Edit: Jul 03, 2013, 08:18 pm by stefa24 Reason: 1
ciao
mentre scrivevo uno sketch mi sono trovato a dover decidere tra due soluzioni, mostrate sotto, mi sono posto la domanda, se mettere un pin HIGH più volte all'interno di un ciclo, finché non esce, è indifferente, o è sconsigliato

Code: [Select]

...
i=1;  
   while(digitalRead(posB)==0 && fase1==1)
   {
     if(i=1)
     {
     digitalWrite(outA,1);
     delay(ritardo);
     digitalWrite(outA,0);
     i=0;
     }
}
...


o questa

Code: [Select]

...
   while(digitalRead(posB)==0 && fase1==1)
   {    
     digitalWrite(outA,1);
     delay(ritardo);
     digitalWrite(outA,0);
    }
...


voi cosa dite?

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

PaoloP

Se vuoi fare un blink devi aggiungere un ritardo anche allo spegnimento
Code: [Select]
digitalWrite(outA,1);
delay(ritardo);
digitalWrite(outA,0);
delay(ritardo);

altrimenti il pin rimane acceso il tempo del delay e spento il tempo necessario per reiniziare il ciclo: pochi microsecondi.
Poi dipende da te, se vuoi comandare il ciclo dall'esterno aggiungi una variabile di supporto, se non serve usa la seconda soluzione.
Il ciclo vita del pin credo sia di qualche migliaia a di ore.

vectorel

#2
Jul 03, 2013, 05:15 pm Last Edit: Jul 03, 2013, 05:17 pm by vectorel Reason: 1
Non credo ci siano problemi. Semplicemente nel primo caso il led si accende e si spegne una volta, nel secondo va ad intermittenza finchè digitalRead(posB)==0 e fase1==1

nel secondo caso però devi aggiungere un delay(ritardo); alla fine del while prima di chiuderlo

paulus1969

Vuoi sapere se si può mandare HIGH un pin che è già HIGH?

stefa24

quello che vorrei sapere è se ha senso mandare continuamente un pin del micro HIGH, all'interno di un ciclo, dal punto di vista della sua resistenza

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

gpb01

Stefano guarda che mica è un relé meccanico eh ... stiamo parlando di semplici semiconduttori ... prova a pensare ad un banale generatore di onde quadre ad alta frequenza ... hai idea di quante volte vada HIGH - LOW al secondo ???  :smiley-mr-green: XD :smiley-mr-green: XD

Guglielmo
Search is Your friend ... or I am Your enemy !

uwefed

Non ci sono problemi se metti HIGH un pin che é giá HIGH. L'unico problema puó essere che visto che il digitalWrite() é un po lento il codice potrebbe essere piú veloce se non lo rimetti a HIGH.

Ciao Uwe

stefa24

ok grazie
la mia era uno scrupolo
della velocità del digitalWrite non sapevo pensato, devo verificare il comportamento

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

leo72


Code: [Select]

      if(i=1)


Attento che l'uguaglianza si fa con 2 segni uguale, quindi ==  ;)


Quote

voi cosa dite?


Un digitalWrite con segnale HIGH è semplicemente mettere ad 1 il bit di un registro. Se tale bit è già ad 1, l'operazione a livello elettrico credo sia ininfluente, nel senso che non dovrebbe sortire effetto. Servirebbe però un oscilloscopio e vedere se sul pin si rileva qualche variazione di stato. In questo il datasheet mi pare lacunoso perché non affronta esplicitamente il caso.

stefa24

si hai ragione if(i==1) è la sintassi giusta, è per questo che all'inizio non mi funzionava poi me ne sono accorto

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

nid69ita


Un digitalWrite con segnale HIGH è semplicemente mettere ad 1 il bit di un registro. Se tale bit è già ad 1, l'operazione a livello elettrico credo sia ininfluente, nel senso che non dovrebbe sortire effetto. Servirebbe però un oscilloscopio e vedere se sul pin si rileva qualche variazione di stato. In questo il datasheet mi pare lacunoso perché non affronta esplicitamente il caso.


Interessante come dubbio. Chi ha un oscilloscopio? Chi fa un test per la comunità?  :D
(Sorry io non c'e' l'ho. Era un dubbio che mi era venuto anche a me.)
my name is IGOR, not AIGOR

uwefed

Non ho fatto misure ma non dovrebbe generare delle interferenze sul Pin il fatto che il registro viene ricaricato con lo stesso valore.

Ciao Uwe

leo72

Non parlavo di interferenze, ma proprio di impercettibili cambi di stato. Cioè, volevo capire se scrivendo "1" su un bit di una porta già impostato ad "1" il microcontrollore effettuasse lo stesso l'operazione di attivazione del segnale HIGH oppure se ignorava la cosa perché non c'era cambio di stato nel registro. Magari con un oscilloscopio si poteva capire se il micro tentava lo stesso l'operazione oppure no.

uwefed

Se ci fossero sarebbero piú brevi di un ciclo di clock. Percui non misurabili con gli oscilloscopi amatoriali o semiproffessionali (un spike di qualche decina di ns ogni 10 o 100µs)
Ciao Uwe

Go Up