Kurzimpuls-Erzeugung mit Arduino Uno Teil 2: GPIO-Register-Zugriff Impulsbreite
Wenn Sie den folgenden Code verwenden, um digitale Impulse mit dem Arduino Uno zu erzeugen (cli() und sei() um Interrupts zu deaktivieren und zu aktivieren, um eine konsistente Impulsbreite zu gewährleisten), können Sie die kürzestmöglichen Impulse erzeugen, begrenzt durch die 16MHz Taktfrequenz des Atmega328p:
gpio_pulse.ino
#define PORT11 PORTB
#define PIN11 3
#define PIN11_MASK (1 << PIN11)
void loop() {
cli(); // Disable interrupts
PORT11 |= PIN11_MASK; // Turn pin 11 on
PORT11 &= ~PIN11_MASK; // Turn pin 11 off
sei(); // Enable interrupts again
delay(10); // Wait 10ms
}Basierend auf der 16 MHz Taktfrequenz des ATMega328p erzeugt dies Impulse von fast genau 125ns Länge. Dies entspricht zwei Taktkreisen des 16 MHz-Master-Takts.

Vollständiges Beispiel
full_example.ino
#include <Arduino.h>
#include <avr/io.h>
#define PORT11 PORTB
#define PIN11 3
#define PIN11_MASK (1 << PIN11)
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
cli();
PORT11 |= PIN11_MASK;
PORT11 &= ~PIN11_MASK;
sei();
delay(10);
}Check out similar posts by category:
Arduino, Electronics
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow