Dynamischer Kurzimpuls-Generator mit Arduino Mega2560 und serieller Steuerung
English
Deutsch
Dies ist eine vereinfachte Version unseres hybriden statischen/dynamischen Impuls-Generators. Auf der Arduino Mega2560-Plattform ermöglicht er die Erzeugung von Impulsen von 750ns bis zu nahezu beliebigen Längen (begrenzt nur durch die Integer-Breite) mit einer Auflösung von ca. 437,5ns.
Um die Impulsbreite zu steuern, öffnen Sie eine serielle Schnittstelle und tippen Sie +, um die Impulsbreite zu erhöhen, oder -, um die Impulsbreite zu verringern.
dynamic_pulse_serial.ino
#include <Arduino.h>
#include <avr/io.h>
#include <ArduinoJson.h>
const int pulseAPin = 11;
#define PORT11 PORTB
#define PIN11 5
#define PIN11_MASK (1 << PIN11)
int pulseLength = 0;
/**
* Pulse the output pin, for very short pulses.
*/
void PulseDynamic(int n) {
cli();
PORT11 |= PIN11_MASK;
// Dynamic for loop
for (;n >= 0; n--) {
_NOP();
}
PORT11 &= ~PIN11_MASK;
sei();
}
void setup()
{
Serial.begin(115200);
Serial.setTimeout(25);
pinMode(pulseAPin, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
PulseDynamic(pulseLength);
// Process serial
while(Serial.available() > 0) {
int c = Serial.read();
if(c == '+') {
pulseLength++;
Serial.println(pulseLength);
} else if(c == '-') {
pulseLength--;
if(pulseLength < 0) {pulseLength = 0;}
Serial.println(pulseLength);
}
}
delay(50);
}If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow