UN ESEMPIO FUNZIONANTE CON INTERRUPT E COMUNICAZIONE SERIALE CON ARDUINO

Click to rate this post!
[Total: 1 Average: 5]

Il presente esempio mette in evidenza le grandi capacità di Arduino nel gestire gli interrupts.

In questo esempio una variabile di uscita segue una variabile di ingresso con un ritardo di pochissimi microsecondi

UN ESEMPIO FUNZIONANTE CON INTERRUPT E COMUNICAZIONE SERIALE  

Con il presente programma, l’Arduino genera dalla funzione loop un impulso di 20us. Questo impulso entra in un altro ingresso dell’Arduino. Tramite un interrupt da questo secondo ingresso viene generato un comando seriale e viene ricavata una nuova uscita.  Dalla seriale si ottiene un 1 per ogni impulso e la nuova uscita rappresenta un’onda quadra i cui fronti sono gli istanti degli impulsi.

// A simple sketch to read GPS data and parse the $GPRMC string 
// see http://www.ladyada.net/make/gpsshield for more info

#include <NewSoftSerial.h>
NewSoftSerial mySerial =  NewSoftSerial(2, 3);
#define GPSRATE 4800
//#define GPSRATE 38400
int pbIn = 0;                  // Interrupt 0 is on DIGITAL PIN 2!
int ledOut = 13;                // The output LED pin
volatile int state = LOW;      // The input state toggle
int ledPin = 8;

void setup()  { 

   pinMode(ledPin, OUTPUT);      // sets the digital pin as output
   // Set up the digital pin 2 to an Interrupt and Pin 4 to an Output
  pinMode(ledOut, OUTPUT);

  //Attach the interrupt to the input pin and monitor for ANY Change
  attachInterrupt(pbIn, stateChange, RISING);
  Serial.begin(GPSRATE);
  mySerial.begin(GPSRATE);
} 
 
 
void loop()  { 
  
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delayMicroseconds(17);        // waits for 17ms
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // wait for 1s with tune
}

void stateChange() {
  Serial.print("1");
  state = !state;
  digitalWrite(ledOut, state);
}

Applicazioni

Arduino con questo codice può essere utilizzato come generatore di impulsi tramite un cavo coassiale e nello stesso tempo inoltrare verso la seriale (USB) un messaggio di flag verso un PC. Questo flag può essere letto da un SW creato nel PC (per esempio con C++) che invia verso una diversa porta seriale un apposito segnale sincronizzato con gli impulsi.

Questo e’ il tipico esempio di un simulatore di un ricevitore GPS che fornisce coordinate posizione e tempo tramite la seriale associati all’instante del impulso 1PPS.

AMPLIFICATORE DI ONDE QUADRE DA 5 A 10V AD ALTA FREQUENZA

Spesso il segnale di impulso del ricevitore GPS è di 10 V: 10V 1pps invece l’output del Arduino è di 5V pertanto è necessario anche sviluppare un piccolo amplificatore da 5V a 10V descritto in questo post

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x