Kann mir einer verständlich erklären, welcher Zusammenhang zwischen Prozessortakt und PWM-Frequenz besteht?
Beispiel:
Ich missbrauch nen Attiny45 als PWM(Dimmer).
// Attiny 45 Code PWM
int analog1 = A3; //Analog In
int pwm1 = 0; // PWM out
void setup() {
pinMode(analog1, INPUT); // Pin Defitintion
pinMode(pwm1, OUTPUT);
}
void loop() {
int an1 = analogRead(analog1);
delay(10);
int an2 = analogRead(analog1);
delay(10);
int an3 = analogRead(analog1);
delay(10);
int an4 = analogRead(analog1);
delay(10);
int an5 = analogRead(analog1);
delay(10); // 5 mal gemessen
int an = ((an1 + an2 + an3 + an4 + an5) / 5 ) / 4;
analogWrite(pwm1, an);
}
Brenne ich den Bootloader auf 1Mhz und den Sketch in 1MHz messe ich als PWM-Frequenz 238Hz.
1Mhz / 8Mhz : 30,30Hz
8Mhz / 1Mhz : 50,0Hz
8MHz / 8 Mhz : 243,9Hz.
Wenn ich nun mit dem 45er einen Motor ansteuern will hab ich also keine Chance, aus dem Hörbaren Frequenzbereich in den kHz-Bereich zu takten?
Beim ATmega328 gibt es nur 5-6 Teiler die den Systemtakt auf die PWM-Frequenz herunterteilen.
Die Einstellung erfolgt über ein Register des Kontrollers.
Ich vermute verhält es sich ähnlich beim ATtiny.
Wenn Du den Sketch für den falschen Prozessortakt kompilierst sind Zeitabhängige Vorgänge falsch wie zB Millis und Micros, delay, Baudrate Serielle Schnittstelle, I2C und SPI ...
uwefed:
Ich vermute verhält es sich ähnlich beim ATtiny.
Die ATtiny25/45/85 sind besser als die Atmegas was PWM betrifft. Da hat man auf Timer1 eine riesige Auswahl an Prescaler Optionen:
Seite 88-90
Außerdem gibt es einen Aysynchron-Modus in dem statt dem Systemtakt der höhere Takt der PLL Clock als Zeitbasis genommen wird (32 oder 64MHz). Damit sind PWM Frequenzen von mehreren 100 kHz möglich! Siehe Seite 83