Piezo Piep mit (analogWrite,128)

Gast #6119786
Lesenswert?
• ▲
▼
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 #6119821
Lesenswert?
• ▲
▼
"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 #6119835
Lesenswert?
• ▲
▼
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 #6119890
Lesenswert?
• ▲
▼
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 #6119971
Lesenswert?
• ▲
▼
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 #6120328
Lesenswert?
• ▲
▼
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 #6120500
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.