Arduino Nano 16 bit PWM

Hey,

Ich würde gerne einen Rechteck frequenzgenerator erstellen, welcher mir Frequenzen von 1Hz bis ca. 15 kHz ermöglicht. Ich weiß, dass man die timer direkt über den atmega adressieren kann, habe aber sehr wenig Erfahrung damit. 16 bit benötige ich deshalb, da ich die Frequenzen ziemlich präzise einstellen will, da ich Kameras damit ansteuern will. Vielleicht habt ihr ein kleines Beispiel oder ein gutes Tutorial um mein Ziel zu erreichen.
Vielen Dank im voraus!

Das habe ich bereits geschafft:
void setup() {
Serial.begin(115200);

// Set-up fast PWM on the Arduino UNO at 1Hz on Digital pin D9

pinMode(9, OUTPUT); // Set digital pin 9 (D9) to an output
TCCR1A = _BV(COM1A1) | _BV(WGM11); // Enable the PWM output OC1A on digital pins 9
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS12); // Set fast PWM and prescaler of 256 on timer 1
ICR1 = 1; // Set the PWM frequency to 1Hz: 16MHz/(256 * 1Hz) - 1 = 62499
OCR1A = ((ICR1 + 1) / 2) - 1; //50% duty cycle

}

Hallo,

ICR1 = 1;                                              
OCR1A = ((ICR1 + 1) / 2) - 1;

Sei vorsichtig mit solchen Formeln. Je niedriger TOP umso höher die Frequenz und dann entscheidet noch der Prescaler darüber was hinten anliegt.

Nimm einen Timermode womit beide Compareregister gepuffert sind. Achte darauf das die Werte für Kanal B (ggf. C) nicht größer wie Kanal A sind.

Grundlagen und Bsp. zu Timern von mir hier im Forum oder du suchst mit Google danach und/oder du nimmst parallel dazu das Manual vom µC dazu.
https://forum.arduino.cc/index.php?topic=519208.msg3538992#msg3538992

was älteres
https://forum.arduino.cc/index.php?topic=430670.msg2979548#msg2979548

was neues eingekürztes
https://forum.arduino.cc/index.php?topic=667214.msg4552525#msg4552525

Doc_Arduino:
Grundlage zu Timern oder Google

!mit

[edit]

oder mit

Ich dachte eher an "ohne"
(und Autokorrektur)

Nochmal ändere ich das nicht.

Super vielen Dank für die Hilfe, sry für die Frage, aber was meinst du damit, dass beide Comparerregister gepuffert sind? Ist für mich komplettes Neuland.

Gruß,
Kimble

Hallo,

Beiträge gelesen? Timermodi mit gepufferte Compareregister haben den Vorteil das ein Update in das eigentliche Timer Compareregister von der Timer-Unit automatisch zum richtigen Zeitpunkt erfolgt und nicht zufällig irgendwann mittendrin, wenn man keine eigenen Maßnahmen ergreift.
ICRn ist bspw. nie gepuffert. Kann man natürlich auch ändern, erfordert jedoch mehr Aufwand zur Laufzeit.
Was wann welche Register wie verfügbar und notwendig sind steht in einer schönen Tabelle in Manual.