Go Down

Topic: Berechnung einer Sinuswelle (Read 1 time) previous topic - next topic

Marfel

Hallo,
ich will eine Sinusspannung über einen MCP4921 12bit DAC auszugeben, dieser wird über I2C angesteuert.

Die Werte für die Sinusspannung werden aus einem array ausgelesen, bis dahinn funktioniert das ganze auch wenn ich die Wwerte per Hand in das array schreibe.
Weil ich bei 12bit allerdings 4095 Werte per Hand eintragen müsste, sollen die Werte in einer forschleife berechnet und automatisch in das array geschrieben werden was allerdings nicht so recht funktioniert.

Ich hab noch keine großen Erfahrungen mit dem Arduino oder dem programmieren in C, deshalb kann mir von euch vielleicht jemand helfen.
So sieht das ganze aus:

for (i=0;i<84;i++)
    if (i>=84) i=0;
    unsigned char Sinus85[85]={127*(sin(float(2*3.14/84*i)))};

Joghurt

Prinzipiell müsste was in der Gegend funtkionieren:
Code: [Select]
unsigned char sinus85[85];
for (byte i=0;i<84;i++)
    sinus85[i] = 127*(sin(float(2*3.14/84*i)));


Warum musst Du überhaupt ein Array benutzen?
Übergibst Du dem DAC das Array und er arbeitet das dann selbstständig kontinuierlich ab oder wie funktioniert das?

Warum 85?

uwefed

Achtung!! Der Arduno hat nicht soviel RAM um 4096 integer Werte zu speichern.
Welche Frequenz soll die Sinuswelle haben? Brauchst Du überhaupt 12 bit Auflösug?

Eien Sinuswelle würd ich auch über ein paralelles PROM (EPROM) und einen paralellen DAC, einen 12 bit Zähler und einen Oszyllator realisieren.
Grüße Uwe

robtillaart


Ich habe eine Tabelle basierten Version des Sinus vor kurzem untersucht. Vielleicht dass es Ihnen helfen kann. Ich habe zwei Tabellen, 8 bit und 16 bit gemacht, und es nutzt Interpolation für floating Werte. Sehen Sie - http://arduino.cc/forum/index.php/topic, 69723.0.html -

(Entschuldigung, Deutsch ist nicht meine Muttersprache)
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up