Forum: Mikrocontroller und Digitale Elektronik 1kHz PWM mit Arduino


von Dennis (Gast)


Lesenswert?

Guten Tag,
ich benutze im Moment ein Adruino Pro Mini Board für die Generierung 
einer PWM.
Die von mir genutzte Funktion analogWrite() erzeugt eine PWM mit einer 
Frequenz von ca 490Hz.
Nun brauche ich aber eine PWM mit einer Frequenz von 1kHz.

Wie kann ich dies erreichen ?
Kann es sein das die Ausgänge des Boards gar nicht schnell genug sind?

von Christopher G. (cbg)


Lesenswert?

Nicht die Arduino API verwenden, die diese absolut alles per Software 
realisiert, sondern selber ein Programm in C, ASM oder Bascom 
programmieren. Siehe z.B. AVR-GCC-Tutorial.

von Tassilo B. (big_t)


Lesenswert?

Falls Wert auf die Arduino-Umgebung gelegt wird:
http://www.arduino.cc/playground/Code/Timer1

Tassilo

von Dennis (Gast)


Lesenswert?

Danke Tassilo Böhr,
das genau das was ich suche.
1
pwm(pin, duty, period)

Um diese Funktion in einzubinden muss ich doch zunächt einmal die 
Zip-Datei herunterladen und ihren Inhalt unter "libraries" ablegen?
Anschließend habe ich in meinem Programm noch unter "Sketch/Import 
Library" die neue Library hinzugefügt:
1
#include <TimerOne.h>
2
#include <TimerThree.h>
3
4
int PWMout = 9;                 // LED connected to digital pin 9
5
int PWMsoll = A0;               // Eingang Poti
6
int PWMsollValue = 0;           // Value Poti
7
int t = 1000;                      // t in microseconds 
8
9
10
void setup()  { 
11
} 
12
13
14
void loop()  {      
15
    // Einlesen des Potis (0-1023)
16
    PWMsollValue = analogRead(PWMsoll);
17
    
18
    //analogWrite(PWMout,PWMoutValue); 
19
    pwm(PWMout, PWMsollValue, t);  
20
}

Will ich nun jedoch kompilieren bekomme ich die Fehlermeldung:
"'pwm' was not declared in this scope"

Was mache ich falsch ?

von Dennis (Gast)


Lesenswert?

Ok habe den Fehler selber gefunden.

So geht es:
1
#include <TimerOne.h>
2
3
int PWMout = 9;                 // LED connected to digital pin 9
4
int PWMsoll = A0;               // Eingang Poti
5
int PWMsollValue = 0;           // Value Poti
6
int t = 1000;                      // t in microseconds 
7
8
9
void setup()  { 
10
} 
11
12
13
void loop()  {      
14
    // Einlesen des Potis (0-1023)
15
    PWMsollValue = analogRead(PWMsoll);
16
    
17
    //analogWrite(PWMout,PWMoutValue); 
18
    Timer1.pwm(PWMout, PWMsollValue, t);  
19
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.