Arduino R4 - DAC-Tutorial - wir erzeugen eine Sinuswelle und spielen damit eine Melodie

Arduino R4 verfügt über einen integrierten 12-Bit-DAC (Digital-Analog-Wandler), was bedeutet, dass er ein analoges Signal erzeugen kann, ohne zusätzliche Module anzuschließen. Das ist ein großer Fortschritt, denn bei den älteren Uno R3 und ähnlichen Boards mussten wir einen externen DAC wie den MCP4725 anschließen und diese meist über SPI oder I2C ansteuern, um eine Sinuswelle zu erhalten. Und hier kann man sie direkt aus Pin A0 generieren. In diesem Thema werde ich kurz zeigen, wie man einen DAC auf dem Arduino R4 betreibt, und einen Blick auf das erzeugte Signal auf einem Oszilloskop werfen.
DAC - Sinuswelle auf Arduino R4
Betrachten wir ein Beispiel aus der Arduino-Dokumentation. In diesem Beispiel wird der Spannungswert vom Potentiometer gelesen und in die Frequenz der erzeugten Sinuswelle am DAC umgewandelt. Das Potentiometer dient als Spannungsteiler, die äußersten Pins liegen an VDD und GND und die mittleren Pins am ADC. Nachfolgend der korrigierte Code, da zum Zeitpunkt des Verfassens des Themas ein Fehler in der Arduino-Dokumentation vorlag, es wurde einmal ein falscher Pin verwendet - A0 statt A5.
Code: C / C++
Das Potentiometer ist an A5 angeschlossen und an A0 gibt es einen DAC-Ausgang.
Die Map-Funktion ordnet, wie der Name schon sagt, den vom ADC gelesenen Wert, der im Bereich von 0 bis 1024 (10-Bit-ADC) liegt, der Frequenz zu, deren Bereich wir von 0 bis 10 kHz gewählt haben.
Hier ist das Ergebnis:


Die Oszillogramme zeigen sehr schön, wie der DAC eine für viele Anwendungen ausreichende Annäherung an die Sinuswelle erzeugt. Wenn wir eine weitere Funktion generieren möchten, haben wir außerdem folgende Möglichkeiten:
Code: C / C++
oder
Code: C / C++
Mit DAC von Arduino lassen sich beispielsweise Melodien erzeugen, hier der Code aus der offiziellen Dokumentation:
Code: C / C++
Der obige Code generiert die Melodie „Frere Jacques“, spielt eine Folge von Noten und Rhythmen ab und nutzt die AnalogWave-Bibliothek zur Erzeugung von Schallwellen. Die Melodie wird über einen DAC und Audioverstärker (LM386) auf dem Lautsprecher abgespielt und Parameter wie Tonhöhe, Melodie, Rhythmus, Tempo und Notenlänge werden im Code definiert.
Die vollständige Spezifikation des Arduino R4 (in den verfügbaren Versionen) sind auf der Arduino-Website zu finden:
https://docs.arduino.cc/hardware/uno-r4-wifi
https://docs.arduino.cc/resources/datasheets/ABX00087-datasheet.pdf
Zusammenfassung
Man kann kaum widersprechen, dass der typische Anfänger mit dem Arduino R4 viel zum Laufen und Spielen haben wird. An Bord dieser Platine ist viel mehr als im kultigen R3, es bietet sogar den hier besprochenen DAC, der es ermöglicht, eine Sinuswelle zu erzeugen, ohne externe Module anzuschließen. Es genügen wenige Kontaktkabel.
Dennoch frage ich mich, wie oft diese DACs nützlich sein könnten? Habt Ihr in Ihren Projekten DACs verwendet und wenn ja, welche? Oder ist es in R4 vielleicht nur eine unnötige Funktion?
Kommentare