Go Down

Topic: Melodien Soundsequenzen mit dem arduino wieder geben (Read 2 times) previous topic - next topic

DennisD

ok danke schon mal für die info ich kurze es mal noch mehr und versuche es dann auch nochmal

mkl0815


Also Eines ist schon mal klar - Arrays, deren Inhalt im Programmtext definiert wird - so wie du das gemacht hast (und ich zur Überprüfung auch), haben eine Begrenzung in der Größe. Den genauen Wert habe ich noch nicht gefunden, Tests haben ergeben, dass bei ca. 1750 Werten Schluss ist. Danach macht der Arduino nur noch Unsinn ...

Das liegt daran, das eine Variable immer Speicher im SRAM belegt und davon hat der Uno gerade mal 2kB. Mit einem char-Array (oder Byte-Array) mit 1750 Werten verbräts Du schon mal 85% der verfügbaren Speichers. Verwendest Du nun zusätzlich noch die Serial-Ausgabe, braucht die noch RAM für Ihren Puffer. Dazu kommen sämtliche andere Variablen die Dein Programm so benötigt. Der µC verwendet auch noch das untere Ende vom RAM als Stack, der gegen den Anfang des Speichers wächst, z.B. bei Funktionsaufrufen.
Mario.

qualidat

#12
Jan 01, 2013, 09:48 pm Last Edit: Jan 01, 2013, 09:54 pm by qualidat Reason: 1
Quote
Das liegt daran, das eine Variable immer Speicher im SRAM belegt und davon hat der Uno gerade mal 2kB. Mit einem char-Array (oder Byte-Array) mit 1750 Werten verbräts Du schon mal 85% der verfügbaren Speichers. Verwendest Du nun zusätzlich noch die Serial-Ausgabe, braucht die noch RAM für Ihren Puffer. Dazu kommen sämtliche andere Variablen die Dein Programm so benötigt. Der µC verwendet auch noch das untere Ende vom RAM als Stack, der gegen den Anfang des Speichers wächst, z.B. bei Funktionsaufrufen.
Mario.


Ja, das klingt logisch. Die Lösung steht hier, habe ich aber selber noch nicht gemacht, muss ich erstmal ausprobieren:

http://arduino.cc/en/Reference/PROGMEM

Hier noch ein Beispiel:

http://stackoverflow.com/questions/12169374/arduino-progmem-byte-array

DennisD

so hab jetzt die daten menge auf die hälfte reduziert uns es kommt auch was aus dem Lautsprecher zwar verzerrt und leicht unsauber aber es kommt schon mal was

qualidat

#14
Jan 02, 2013, 03:27 am Last Edit: Jan 02, 2013, 03:29 am by qualidat Reason: 1
Ich habe nochmal in meinen Verzeichnissen gewühlt und ein Beispiel wiedegefunden. Mit dem folgenden Code habe ich Musik (8k Samplingrate) per serieller Schnittstelle an den Arduino gesendet und per Lautsprecher in erstaunlich guter Qualität ausgegeben. Du musst nur noch das Problem mit der Datenmenge lösen (PROGMEM). Im Programmspeicher ist so viel Platz, da könntest du durchaus besser gesampelte oder gar verschiedene Sounds hinterlegen. In diesem Beispiel bestimmt das Tempo der Seriellen die Ausgabegeschwindgkeit - bei Dir ist es das Delay in der For-Schleife ...

Code: [Select]
//------------------------ DEFINE --------------------------
#define PWM_Pin 11
byte buf;
//------------------------- SETUP --------------------------
void setup()
{
 Serial.begin(57600);
 int pwm_freq=1;
 TCCR2B = (TCCR2B & 0xF8) | pwm_freq;
 pinMode(PWM_Pin, OUTPUT);
}
//------------------------ LOOP -----------------------------
void loop()
{
   //...................... serial input .....................
 if (Serial.available() > 0)
   {
     buf = Serial.read();
   }  
   analogWrite(PWMPin,buf); 
}

Go Up