Piezo Piep mit (analogWrite,128)

Gast #6119786
Habe auf dieser Webseite gelesen, dass die PWM-Pins
zwei unterschiedliche Frequenzen haben.
https://www.hackerspace-ffm.de/wiki/index.php?title=ArduinoVariablePWMFrequenz
Ist bei Arduino festgelegt welcher PWM Pin 490Hz bzw 980Hz hat?

Momentan habe ich den Piep an Pin11 und der hat 490Hz.
Natürlich wären mir 980Hz lieber, weil besser hörbar.

LG
old.
1
betaetigt =(!(hoch || runter) & (boola || boolb)); 
2
if((betaetigt || initpiep) == HIGH){analogWrite(piep,128);}                                                // Piep
3
  else{analogWrite(piep,0);}
Gast
"Die PWM-Ausgaben auf Pins 5 und 6 werden höhere Zyklen als erwartet 
haben. Dies passiert, weil die Funktionen millis() und delay() den 
gleichen internen Timer nutzen, um diese PWM-Ausgaben zu generieren. In 
kleinen Zyklen (z.B. 0 bis 10) ist der Effekt am stärksten und kann dazu 
führen, dass der Wert 0 die Spannung auf Pin 5 und 6 nicht komplett 
wegnimmt, d.h. dass z.B. bei Wert 0 die LED trotzdem leuchtet."

Mit "Zyklen" ist was gemeint?

Bisher ist es noch nicht vorgekommen, das die Motoren bei "0"
noch irgendwie bestromt werden.

LG
old.
Gast
Aus der W. schrieb:
> Natürlich wären mir 980Hz lieber, weil besser hörbar.

Was hindert dich daran, die PWM-Frequenz zu erhöhen. delay() und 
millis() hängen am Timer0. Falls dein Arduino mehr Timer hat, steht es 
dir frei, einen davon zu verwenden, ohne o.g. Funktionen zu 
beeinflussen. Vielleicht müsstest du dich von der Idee verabschieden, 
dies über die in Arduino bereit gestellte Funktion analogwrite() zu 
erreichen und selber eine geeignete Funktion schreiben, so wie es der 
von dir verlinkte Artikel beschreibt. Was dein µC an Hardware zur 
Verfügung hat, verrät dir dessen Datenblatt.
Gast
Wolfgang schrieb:
> Was hindert dich daran, die PWM-Frequenz zu erhöhen.

Bin ich zu dumm für. Ich hatte versucht über micros()
mit einem Software-Multivibrator 1KHz in der void loop
zu erzeugen. Klappte auch gut, bis die loop zu umfangreich
wurde. Deshalb habe ich dafür analogWrite(piep,128)
verwendet. Funktioniert so und piept halt mit 490Hz,
hört man noch laut genug.

LG
old.
Gast
1
betaetigt =(!(hoch || runter) & (boola || boolb)); 
2
if((betaetigt || initpiep) == HIGH){tone(piep,1000);}                                                // Piep
3
  else{noTone(piep);}

Vielen Dank !!!
Von der Funktion wusste ich gar nichts.

Helmut H. schrieb:
> Das belegt Timer 2, d.h. PWM auf Pins 3 und 11 kann nicht verwendet
> werden.

Wenn es piept ist die PWM=0. Daher scheint das zu funktionieren.

Ich habe mal testweise einen Dauerton programmiert.
(Der wird dann genau so verwurschtelt wie mein micros()-Piep
in der loop).
Die PWM-Funktion auf 5 und 6 bleibt erhalten.

Der Ardino fährt Tischbeine hoch und runter. Der Piep
kommt nur wenn er nicht fährt. Also kein Problem.

Jetzt könnte ich den Funktionen auch noch unterschiedliche
Tonhöhen zuordnen. Bin Entzückt.

LG
old.
Gast
Helmut H. schrieb:
> https://www.arduino.cc/reference/de/language/functions/advanced-io/tone/
>
> Das belegt Timer 2, d.h. PWM auf Pins 3 und 11 kann nicht verwendet
> werden.

Ich sehe gerade, ich verwende die Pins 5,6 und 9 für PWM.

Deshalb klappt das bei mir.
Das sich der Piep nicht gut anhört, liegt daran,
dass nur Nadelimpulse raus kommen.

>> Generiert einen Ton mit der angegebenen Frequenz
>> (und 50% duty cycle) auf einem Pin.

Kann ich nicht bestätigen. Weder auf Pin 11 noch auf Pin7.
Deklaration als OUTPUT spielt keine Rolle.

Ich gehe erstmal wieder auf analogWrite(piep,128).

LG
old.
Gast
Aha !
1
betaetigt =(!(hoch || runter) & (boola || boolb)); 
2
if(betaetigt == HIGH){tone(piep,1000);}                                                                    // Piep
3
  else if(initpiep == HIGH){tone(piep,440);}
4
  else if(ueberlastmf == HIGH){tone(piep,2000);}  
5
  else{noTone(piep);}

Jetzt weiß ich auch wofür man else if braucht.

Alles bestens,

LG
old.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.