Gestione degli Interrupt

Salve a tutti,
sto realizzando un contapezzi e mi sono scontrato con la mia profonda ignoranza ::slight_smile: Sto cercando di usare la tecnologia ISR ma sto avendo grosse perplessità, sicuramente perché non sono in grado di comprendere a pieno questo sistema di funzionamento.
Ho provato ad implementare il codice allegato, ma con scarsi risultati.
Il mio intento è quello di iniettare una 5v direttamente nel pin 3 al fine di stimolare l’intervento della funzione isr_func che incrementa un contatore che viene mostrato ogni secondo sul monitor seriale.
Il risultato è che il contatore non incrementa mai, come se la funzione ISR non venisse mai chiamata.
Non riesco a capire in cosa sto sbagliando, sarebbe molto utile un vostro suggerimento
Grazie mille
Stefano

ISR_Test.ino (329 Bytes)

Il codice, quando è così corto, inseriscilo direttamente nel post, usando gli appositi tag CODE, così:

int pin = 3;
volatile unsigned long count;

void setup() {
 pinMode(pin, INPUT);
 digitalWrite(pin, HIGH);
 Serial.begin(9600);
 attachInterrupt(digitalPinToInterrupt(pin), isr_func, RISING );
 count = 0;
}

void loop() {
 Serial.print("Stato: ");
 Serial.println(count);
 delay(1000);
}

void isr_func() {
 count++;
}

... detto questo vedo che inizi il setup() con :

pinMode(pin, INPUT);

digitalWrite(pin, HIGH);

che è equivalente a scrivere:

pinMode(pin, INPUT_PULLUP);

In questo modo il pin è sempre mantenuto HIGH e quindi, dando un segnale a +5V in realtà NON hai alcun "RISING" dato che il pin è già HIGH.

Togli quindi quella "digitalWrite(pin, HIGH);" (che attiva la pull-up) metti una resistenza di pull-down verso massa da 10KΩ e riprova.

Guglielmo

Oddio, se gli inietta un segnale ( dall'altro Arduino ) va bene anche come ha fatto lui, con la resistenza interna di PullUp

Il codice e' corretto, quindi se non ti conta vuol solo dire che non gli arriva il segnale sul Pin.

Brunello: Oddio, se gli inietta un segnale ( dall'altro Arduino ) va bene anche come ha fatto lui, con la resistenza interna di PullUp

Non so se sta già usando i due Arduino (... di cui all'altro thread) o ... un semplice pulsante :D

Guglielmo

Guglielmo ha visto giusto! Oggi mi è arrivato il secondo arduino e proverò. In effetti usavo un becero pulsante :D

Volevo aggiornarvi sui miei progressi: funziona tutto correttamente impostando la resistenza internda di PullUp. L'interrupt lavora perfettamente senza indecisioni. Grazie mille a Guglielmo e a Brunello