Hlavní přehled   |   Info a nápověda Přihlásit   |   Registrovat
 
 
Příspěvek umístěný v tematickém vlákně:    Generátor Figuera - Koncepční detaily, odborná diskuze   (str. 62)
 
Barbucha    Uživatel podléhá schvalovacímu režimu
02.12.2024 09:11
Bydliště: Pod mostem v Praze
539 30 385 
  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
}

Zvláštní ocenění za úsilí nebo přínosPozitivní ohlasyOznačit příspěvek
  Přejít na příspěvek do vlákna      

 
 
Omforum.cz   |   Nápověda   |   Pravidla fóra   |   Podpořte chod fóra   |   Vytvořil: 2015-2026 Adam Benda
 
 
CC BY-NC-ND 3.0 CZ
Licence Creative Commons
Toto dílo podléhá licenci Creative Commons Uveďte původ-Neužívejte komerčně-Nezpracovávejte 3.0 Česká republika License