Frequenz 5000hz

Hallo zusammen :) hab erst kürzlich mit dem ArduinoDue angefangen. Ich möchte gerne eine Frequenz bis 5000 Hz ausgeben, leider habe ich im WorldWideWeb nichts gefunden das mich in meinem Projekt weiterbringt. Mein Programm ist eine abgeänderte Form von diesem hier: https://www.arduino.cc/en/Tutorial/DueSimpleWaveformGenerator

Danke für eure Hilfe :)

Brauchst du Sägezahn, Dreieck, Sinus ? Oder nur ein 5 kHz Rechteck ? Die Grenzen des verlinkten Tutorial-Beispiels

170 Hz is the maximum freq

hängen hauptsächlich am dauernden analogRead des Potis, fürchte ich, sowie an #define maxSamplesNum 120.

Eine reines Rechtecksignal geht ohne größere Änderungen schonmal 60-fach schneller. ( 10kHz )

Danke für die Rückmeldung. Ich habe nur den Sinus und das Poti hab ich rausgenommen und durch einen einzelnen Wert ersetzt. Auch habe ich die Werte des Sinus halbiert und komme bei #define maxSamplesNum 60. Leider hat dies bei mir fast keine Auswirkung auf die Frequenz. Muss ich den Sinus noch kleiner machen dass ich höher komme?

freundliche grüsse

Hallo,

ich habe keinen Due, das vorweg. Ich denke bedeutend schneller wird das so nicht gehen. 40µs benötigt ein analogread laut Beschreibung. Das multipliziert mal die Anzahl der Samplewerte die im Array stehen. Das ergibt grob deine Periodendauer + Overhead vom restlichen Code usw. und damit die Frequenz. Eine Verkleinerung des Array erhöht die Frequenz, aber um so weniger Auflösung hast du. Jeden zweiten Wert mal temporär rausnehmen und testen. Die Ressourcen sind irgendwann gerade bei sowas begrenzt. Rechtecksignale sind bis in den MHz Bereich möglich. Man muß ja nur umschalten lassen. Easy. Analoge Signalformen reduzieren den möglichen Takt drastisch. Weil innerhalb einer Periode viele viele Zwischenwerte ausgegeben werden müssen. Dafür gibts dann Spezial ICs. MAX038 zum Bsp. Oder von Analog Devices die AD9000 Reihe. Stichwort: Direct Digital Synthesis Fertige "Leiterplattenbausteine" mit den AD's habe ich auch schon mal gesehen.

Soweit mir bekannt kann man die DMA, getrieben von einem Timer, dazu überreden das Ganze automatisch zu machen. So sollten auch deutlich mehr als 5kHz drin sitzen. ohne Gewähr

Aber direkt unterstützt von der IDE ist das nicht. Also fleißig das Datenblatt zum Prozessor studieren......

Doc_Arduino: Dafür gibts dann Spezial ICs. MAX038 zum Bsp. Oder von Analog Devices die AD9000 Reihe. Stichwort: Direct Digital Synthesis Fertige "Leiterplattenbausteine" mit den AD's habe ich auch schon mal gesehen.

Ja, geht oft einfacher und liefert ein sauberes Signal.

z.B. AD9850:

Anleitung: http://www.nmea.de/schaltung/sch-dds9850.html

Gruß, Jürgen

Die Tabelle muß man zum Probieren nicht ändern, es reicht die Schrittweite zu erhöhen. Man könnte dann auch die Schrittweite mit der Frequenz umschalten, und bei niedrigeren Frequenzen mehr Elemente verwenden.

Mich hätte mal der Wert von sample interessiert, wie lange wird denn delayMicroseconds(sample)?

Wenn die 5kHz wirklich nicht erreicht werden, sollte man vielleicht noch die Zeit für das analogWrite() abziehen.

Wie hoch wird denn die Frequenz ganz ohne Delay? Damit könnte man doch feststellen, wie groß das wave[] Array werden darf.

Schau mal hier:

http://forum.arduino.cc/index.php?topic=117425.0 https://code.google.com/archive/p/arduino-pwm-frequency-library/downloads