 | Barbucha 02.12.2024 09:11 Bydliště: Pod mostem v Praze
|
| Antena napsal(a): ..... Podle mě pomocí PWM to v arduinu nejde napsat, protože se neustále mění střída. |
digitalWrite je poměrně pomalá instrukce. Možná by jsi měl lepší jít rovnou přes registry. To je daleko rychlejší.
#define Q1_PIN 12 // Výstup na Arduino Nano
#define Q2_PIN 13
void setup() {
DDRB |= (1 << PB4) | (1 << PB5); // Nastavení pinů jako výstupy
}
void loop() {
PORTB |= (1 << PB4); // Zapnutí Q1
_delay_us(50); // Počkej 50 µs
PORTB &= ~(1 << PB4); // Vypnutí Q1
}
a Použit hardwarové časovače:
ATmega328P obsahuje několik hardwarových časovačů, které mohou generovat přesné časy a přerušení bez zpoždění v hlavním programu. Příklad s použitím časovače:
void setup() {
pinMode(Q1_PIN, OUTPUT);
pinMode(Q2_PIN, OUTPUT);
// Nastavení časovače 1 pro řízení Q1
TCCR1A = (1 << COM1A0); // Toggle OC1A (Q1_PIN) při přetečení
TCCR1B = (1 << WGM12) | (1 << CS11); // CTC režim, dělička 8
OCR1A = 1999; // Nastavení periody pro 2 kHz (OCR1A = F_CPU / (2*prescaler*f) - 1)
}
void loop() {
// Druhý výstup (Q2) řízený v hlavní smyčce
}
|
|