Pages: [1]   Go Down
Author Topic: [RISOLTO]quante volte mandare HIGH/LOW un pin in un ciclo  (Read 593 times)
0 Members and 1 Guest are viewing this topic.
piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 654
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
...
i=1;  
    while(digitalRead(posB)==0 && fase1==1)
    {
      if(i=1)
      {
      digitalWrite(outA,1);
      delay(ritardo);
      digitalWrite(outA,0);
      i=0;
      }
}
...

o questa

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

voi cosa dite?

stefano
« Last Edit: July 03, 2013, 01:18:12 pm by stefa24 » Logged


Cagliari, Italy
Online Online
Tesla Member
***
Karma: 110
Posts: 6979
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vuoi fare un blink devi aggiungere un ritardo anche allo spegnimento
Code:
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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: July 03, 2013, 10:17:59 am by vectorel » Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 500
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 654
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Switzerland
Online Online
Faraday Member
**
Karma: 112
Posts: 5900
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol smiley-mr-green smiley-lol

Guglielmo
Logged

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21267
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 654
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

stefano
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
      if(i=1)
Attento che l'uguaglianza si fa con 2 segni uguale, quindi ==  smiley-wink


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.
Logged


piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 654
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

stefano
Logged


ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4649
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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à?  smiley-grin
(Sorry io non c'e' l'ho. Era un dubbio che mi era venuto anche a me.)
Logged

my name is IGOR, not AIGOR

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21267
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21267
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: