Sinus erzeugen

Hallo,

beim Versuch eine Sinuswelle zu erzeugen
habe ich meinen Code erst einmal auf rechteck umgestellt.

Leider habe ich an Pin 6 knapp unter 1000Hz
und nicht wie berechnet 25Hz.

Kann jemand helfen?

void loop(){
  analogWrite(5,sinPWM[0]);
  for(int i=0;i<312;i++){
    analogWrite(6,sinPWM[255]);   //Taskwert an Pin 6
    delayMicroseconds(64);        //für 25Hz
  }
  analogWrite(6,sinPWM[0]);
  for(int i=0;i<312;i++){
    analogWrite(5,sinPWM[0]);     //Taskwert an Pin 5
    delayMicroseconds(64);        //für 25Hz
  }
}

Hallo,

Der Arduino hat keinen DAC, sondern kann einen analogen Wert nur durch PWM simulieren. Pin 5 und 6 haben beim Uno eine PWM-Frequenz von 980Hz. Die misst du. Man kann aber durch einen RC-Filter das Signal so glätten, dass man ein analoges 25Hz-Signal erhält.

Siehe: http://www.loetstelle.net/grundlagen/pwm/pwm.php

Hallo,

Dieses Tutorial sollte Dir helfen.

static int waveformsTable[maxWaveform][maxSamplesNum] = { // Sin wave
  {
    0x7ff, 0x86a, 0x8d5, 0x93f, 0x9a9, 0xa11, 0xa78, 0xadd, 0xb40, 0xba1,
    0xbff, 0xc5a, 0xcb2, 0xd08, 0xd59, 0xda7, 0xdf1, 0xe36, 0xe77, 0xeb4,
    0xeec, 0xf1f, 0xf4d, 0xf77, 0xf9a, 0xfb9, 0xfd2, 0xfe5, 0xff3, 0xffc,
    0xfff, 0xffc, 0xff3, 0xfe5, 0xfd2, 0xfb9, 0xf9a, 0xf77, 0xf4d, 0xf1f,
    0xeec, 0xeb4, 0xe77, 0xe36, 0xdf1, 0xda7, 0xd59, 0xd08, 0xcb2, 0xc5a,
    0xbff, 0xba1, 0xb40, 0xadd, 0xa78, 0xa11, 0x9a9, 0x93f, 0x8d5, 0x86a,
    0x7ff, 0x794, 0x729, 0x6bf, 0x655, 0x5ed, 0x586, 0x521, 0x4be, 0x45d,
    0x3ff, 0x3a4, 0x34c, 0x2f6, 0x2a5, 0x257, 0x20d, 0x1c8, 0x187, 0x14a,
    0x112, 0xdf, 0xb1, 0x87, 0x64, 0x45, 0x2c, 0x19, 0xb, 0x2,
    0x0, 0x2, 0xb, 0x19, 0x2c, 0x45, 0x64, 0x87, 0xb1, 0xdf,
    0x112, 0x14a, 0x187, 0x1c8, 0x20d, 0x257, 0x2a5, 0x2f6, 0x34c, 0x3a4,
    0x3ff, 0x45d, 0x4be, 0x521, 0x586, 0x5ed, 0x655, 0x6bf, 0x729, 0x794
  }

Quelle: gennantes Tutorial.

Grüße,
Donny