aiuto sketch, contare impulsi su un ingresso digitale

ho un timer rtc che mi genera un impulso al secondo e un impulso al minuto, su 2 uscite distinte

io voglio mettere questi 2 segnali in 2 ingressi digitali (o anche analogici, non e' importante)

non so come si fa a fargli contare tot impulsi e raggiunto la cifra impostata nello sketch deve darmi un high su un altra uscita digitale

mi bastano le basi dello sketch :slight_smile:

O usi un interrupt (non so usarli) oppure la pulse in....

//variabili
int sigPin = 7; //signal pin
int state; //the state of the input
int oldstate;
unsigned long t; //timer
unsigned long s; //samples
unsigned long c; //count
unsigned long f; //frequency


void setup()
{
  pinMode(sigPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  c = 0;

   t = millis(); // read time at start of sampling
   for(s=0; s<10000; s++){ //take a number of samples
	state = digitalRead(sigPin); //read state
	if (state != oldstate){ //if state changes:
	   c++; //increment counter
	   oldstate = state; //and reset current state
	}

   }
   t = millis() - t; //read time at end of sampling

   c = c/2; // need to divide by 2 because counter incremented on each change - two changes per cycle

   f = 1000*c/t; //calculate frequency

  Serial.println("frequenza");
  Serial.println(f);
  delay(500);
}

ringrazia garinus :wink:

grazie garinus, anche se non ti conosco :sweat_smile:

ratto, e' un misuratore di frequenza? molto interessante, ora vado a prendere il generatore di forme d'onda e lo provo

devo studiarmi il programma per quello che volevo fare, e' il suggerimento giusto;)

si è proprio un frequenzimetro... io l' ho provato e tiene dfino a 38-39Khz non di più poi svalvola :stuck_out_tongue:
an e legge onde quadre... da 0 a +5V

son qui che lo sto provando ma non mi legge...

l'ho attaccato ad un gen di frequenza, vorrei fargli leggere 500Hz

massa con massa, uscita del generatore al 7

onda quadra tra 0 e +5volt (alta impedenza)

frequenza zero...

dove sbaglio?

Risolto, tolta la massa del segnale mi da la frequenza, ma non capisco perche' cosi' vada???

frequenza zero.... boh a me funzia....
prova ora.... sembra uguale ma non lo è....

void setup()
{
  pinMode(sigPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  c = 0;

   t = millis(); // read time at start of sampling
   for(s=0; s<100000; s++){ //take a number of samples   ///////se non va aumenta il valore da 10000 a 100000 però ti avviso si pianta.. fa una lettura ogni due tre secondi...
	state = digitalRead(sigPin); //read state
	if (state != oldstate){ //if state changes:
	   c++; //increment counter
	   oldstate = state; //and reset current state
	}

   }
   t = millis() - t; //read time at end of sampling

   c = c/2; // need to divide by 2 because counter incremented on each change - two changes per cycle

   f = 1000*c/t; //calculate frequency

  Serial.println("frequenza");
  Serial.println(f);
  delay(500);
}

comunque sia non dovrebbe dar alcun problema :roll_eyes:

ratto, ho aggiunto sotto al mess precedente, funziona ma ho dovuto lasciare separate le massa del generatore e di arduino

ho solo il filo del segnale ad onda quadra, cosi' e' preciso solo tra 10kHz e 60kHz, oltre i 60k non va, sotto i 10k e' troppo impreciso

non capisco xche' non va con le masse in comune??

sinceramente non ti so rispondere......
probabilmente gli basta la terra oppure ha qualche disturbo....
e quasi di sicuro riesce a leggerla comunque perchè sono freq alte non in radiofrequenza ma quasi prossimi....
domani provo e ti so dire... io mi leggevo gli NE ed i generatori di squola senza problemi da freq molto basse 100-150Hz a 38-39Khz....

spe, sicuro ho problemi di massa/terra, devo fare qualche prova, in caso metto tutto sotto il gruppo di continuita' e gli stacco l'alimetazione, l'uscita dell'apc e' 1000 volte piu' pulita del 220enel, domani provo

cmqe programmino molto utile :wink:

HEHE :P:P 8)

Mi accodo a questa discussione perchè mi serve si un frequenzimetro ma per basse frequenze. mi serve sapere la frequenza al minuto di un impulso su ingresso digitale, nel mio caso al pin due, però la frequenza mi serve in tempo reale senza aspettare il conteggio allo scadere del minuto ma conteggiando il tempo fra un impulso e l'altro e il risultato dev'essere subito rilevabile e risettato con la misurazione del impulso sucessivo e cosi via.

Poi inserirò il risultato su display grafico, ma questo lo gestirò con le dovute librerie con le quali ho già fatto qualche prova con sucesso.

Ho già fatto delle prove su sketch ma senza sucesso, non riesco a gestire il risultato della frequenza con la lettura fra i due impulsi.

Qualcuno ha mai fatto un contaimpulsi simile?

ciao
so che con l'utilizzo di un interrupt si ottengono risultati migliori

Stefano

stefa24:
ciao
so che con l'utilizzo di un interrupt si ottengono risultati migliori

Stefano

Ciao Stefano & C:
Non ho mai usato gli interrupt, ci darò un'occhiata ai manuali e vedrò di buttar giù qualche riga di programma.

Qualcuno li hai mai usati per utilizzi simili?

Saluti.....

Come frequenzimetro c'è quello progettato da Michele Menniti e anche pubblicato sulla rivista Elettronica IN.
Qui una vecchia anteprima --> http://www.elettronicain.it/MyMain/riviste/Anteprime/Frequenzimetro/frequenzimetro.pdf