mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Störgeräusche bei tone mit Arduino


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Fred B. (racerfred)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin ganz neu hier und grüße erst einmal die ganze Gemeinde :-)

Bin auch erst zwei Tage Besitzer meines Arduino Uno, deswegen bitte 
evtl. dumme Fragen zu entschuldigen ;-)

Zum Problem:

Wenn ich mit dem Befehl "tone" eine Rechteckfrequenz ausgebe, dann hört 
sich das auf meinem Piezo bis ca. 5 kHz ganz normal an.
Gehe ich allerdings mit der Frequenz weiter hoch, so ab ca. 10 kHz, dann 
wird neben der ursprünglichen Frequenz ein deutliches gleichmäßiges 
"Knattern" hörbar (im Ultraschallbereich nur noch dieses, mit dem Ohr 
hörbar). Evtl. ist dieses auch bei der niedrigen Frequenz da, nur nicht 
durch den relativ lauten Ton der niedrigen Frequenz zu hören.

Der Testcode mit 10 kHz.



unsigned int frequenz=10000;

void setup() {
  tone(10,frequenz);
}

void loop() {
}



Weiß jemand, wo dieses herkommt bzw. wie man dieses umgehen kann, da ich 
nur die eigntl. Frequenz haben will (im Bereich von 10 bis 30 kHz)?

Gibt es eine andere Möglichkeit, eine Frequenz in diesem Bereich 
auszugeben ?

Bin um jeden Tipp dankbar.

Viele Grüße und einen schönen Feiertag

Fred

: Verschoben durch Moderator
Autor: Beo Bachta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird nie ein sauberer Ton da das Arduino Framework per
Timer Interrupt eine Millisekunden Zeitbasis erzeugt.

Dein Ton wird also dauernd unterbrochen, was sich in einem
zweiten Ton bemerkbar macht.

Wenn ohne Störung gewünscht dann bei Arduino beschweren
(wird nix helfen) oder selber von Grund auf programmieren
(z.B. void setup() und void loop() weglassen, dann gibt's
auch kein Framework).

Autor: Fred B. (racerfred)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Beo Bachta,

vielen Dank für die Info.

Ich habe mir schon in der Form etwas gedacht. Da wie gesagt, ein 
blutiger Anfänger, sind das so die ersten Erfahrungen.

Das "richtige" Programmieren wäre dann in Maschinensprache (C oder so)?

Liese sich das mit der Software "Bascom" bewerkstelligen?

Kennst Du eine Adresse, bei dem man sich (für einen Anfänger) in diese 
Sprache einarbeiten kann?

Ich weiß, dass das mit Sicherheit sehr umfangreich wird, aber wenn man 
nicht beginnt, kommt man auch nicht ans Ziel ;-)

Gruß Fred

Autor: Michael U. (amiga)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hallo,

Beo Bachta schrieb:
> Wenn ohne Störung gewünscht dann bei Arduino beschweren
> (wird nix helfen) oder selber von Grund auf programmieren
> (z.B. void setup() und void loop() weglassen, dann gibt's
> auch kein Framework).

geht prinzipiell auch innerhalb der Arduino-Geschichte. Freien Timer 
suchen, der CTC kann und den Wunschgemäß programmieren. Tone() hat wohl 
eher das Problem, daß sie es auf allen Pins irgendwie machen wollen.

Gruß aus Berlin
Michael

Autor: Peter D. (peda)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Um beliebige Pins zu benutzen erfolgt das Pin toggle in Software. Da der 
AVR keine Interruptlevel kann, gibt es zwangsläufig Jitter durch andere 
Interrupts.
Die Lösung ist, man nimmt einen der Pins, die mit einem Compareregister 
verknüpft sind. Dann geht das Toggle in Hardware, d.h. ohne Interrupt. 
Wie das geht, steht im Kapitel Timer im Datenblatt des jeweiligen AVRs.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.