Attiny45 PWM Motorsteuerung

Hallo Leute,

ich habe diesen Code zusammengebastelt und komme einfach nicht ans Ziel! :frowning:

#define sensorPin  A3    //input pin für den Poti - phisikalisch Pin 2
#define pwmPin  0 // Port B0 wähle den Pin der an den Motor geht - phisikalisch Pin 5

void setup() {
 
  TCCR0B = TCCR0B & 0b11111000 | 0x01;

  pinMode(pwmPin, OUTPUT);
}
void loop() {
  analogWrite(pwmPin, map(analogRead(sensorPin),0,1023,0,255));
  
  delay(10);
}

Leider bekomme ich bei einem 8MHz Takt nur eine PWM-Frequenz von ca. 3KHz
Für mein Projekt benötige ich aber eine Frequenz von min. 30KHz

Kann mir da jemand vielleicht mit seiner Expertise weitehelfen?

eddy-ray:
Kann mir da jemand vielleicht mit seiner Expertise weitehelfen?

Ich sehe ehrlich gesagt nicht so richtig, wo Dein Problem ist. Hier kannst Du sehen, wie ich mit absolut popligem Code knapp 40 kHz hinbekomme. Na gut, da ist kein PWM drin, aber das zu realisieren ist nicht sonderlich schwer. Was für ein PWM (Auflösung bzw. PWM-Stufen) benötigst Du überhaupt?

Gruß

Gregor

Ich bekomme die Warnung "suggest parentheses around arithmetic in operand of '|' [-Wparentheses]"

Ohne Warnung:

TCCR0B = (TCCR0B & 0b11111000) | 0x01;

Unabhängig von den Klammern bekomme ich eine Frequenz von 32,4 kHz:

Der Fehler liegt also nicht im Programm.

Bei einer erhaltenen Frequenz von 4 kHz würde ich darauf tippen, daß Du den ATtiny nicht auf 8 MHz eingestellt hast, also "Bootloader brennen" vergessen hast. Durch "Bootloader brennen" wird beim ATtiny45 ein leerer Bootloader "gebrannt", gleichzeitig aber die Fuses gesetzt. Mit den Fuses kann der interne Oszillator auf 8 MHz gestellt werden.

gregorss:
Hier kannst Du sehen, wie ich mit absolut popligem Code knapp 40 kHz hinbekomme.

Auch wenn ich Deine Seiten durchaus schätze, so kann man das beim ATtiny45 gut mit PWM per Hardware machen. So ein Timer möchte doch auch was zu tun haben :slight_smile:

agmue:
Ich bekomme die Warnung "suggest parentheses around arithmetic in operand of '|' [-Wparentheses]"

Ohne Warnung:

TCCR0B = (TCCR0B & 0b11111000) | 0x01;

Unabhängig von den Klammern bekomme ich eine Frequenz von 32,4 kHz:

Der Fehler liegt also nicht im Programm.

Bei einer erhaltenen Frequenz von 4 kHz würde ich darauf tippen, daß Du den ATtiny nicht auf 8 MHz eingestellt hast, also "Bootloader brennen" vergessen hast. Durch "Bootloader brennen" wird beim ATtiny45 ein leerer Bootloader "gebrannt", gleichzeitig aber die Fuses gesetzt. Mit den Fuses kann der interne Oszillator auf 8 MHz gestellt werden.
Auch wenn ich Deine Seiten durchaus schätze, so kann man das beim ATtiny45 gut mit PWM per Hardware machen. So ein Timer möchte doch auch was zu tun haben :slight_smile:

Hallo Tesla Member,

du hattest Recht. Das Problem lag am Bootloader brennen. Hab ich irgendwie vergessen. Jetzt ist alles i.O.

Danke an alle für die schnellen Antworten und Tipps die mich ans Ziel gebracht haben! Ihr seid die Besten!

Gruß, Eddy

Danke für die Rückmeldung :slight_smile: