Moin, wir schreiben an einem Programm zur ausgabe von musik über einen Atmega16 Wir haben das ganze so realisiert das wir unsere musik datei in einen c-header umwandeln der ein array enthält in dem alle werte stehen. Das programm gibt die werte dann aus. Es kommt aber nur rauschen. Wir haben schon alles mögliche ausprobiert aber nicht hilft. Nun wollte ich hier mal anfragen ob variablen im ram oder im falsh abgelegt werden? Das array hat eine gesamtgröße von ca. 5kb bis 10kb. Kann es sein das der compiler es in den ram schreibt und ein großer teil der daten einfach ins nirvana verschwindet? Oder wird das array vom compiler mit in den flash geschrieben? Damit haben wir nämlich geplant weil sonst der speicher nicht ausreicht. Gruß, Prophet
Ähm Variablen sollten im besten Falle variabel sein ;) Diese Vorraussetzung kann das FLASH nicht (ganz) erfüllen.. Deshalb landen Variablen (sowohl statisch, als auch lokal) im RAM. Wie groß ist denn das Sound-Array?
Das array ist ca. 5-10kb groß je nach datei die wir konvertieren. Dafür reicht der ram ja niemals... Aber warum gibt der compiler keine warnung aus? Wie kriege ich das ganze denn in den flash speicher? Muss ich dann eine riesige listen von ausgaben machen? Aber selbst wenn der kompiler die auf eine assamble anweisung optimiert wird dadurch die die benötigte größe verdoppelt oder sogar verdreifacht... EDIT: Bringt es was wenn ich das array als const definiere? Oder wird damit nur der pointer konstant? Würde eine const variable in de flash geschrieben? EDIT2: Kann ich dem array vll wie bei EPRom variablen eine modifizierer verpassen der den compiler veranlasst es mit in der falsh zu schreiben?
Ich habe gerade gelesen das man mit PROGMEM eine variable im flash ablegen kann. Kann ich das ganze dann so realisieren wenn ich das array damit "markiere" und per pgm_read_... darauf zugreife?
Sieht so aus als programmierst du da AVRs? Anscheinend unter C: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
@ P. P. >wir schreiben an einem Programm zur ausgabe von musik über einen >Atmega16 Wir haben das ganze so realisiert das wir unsere musik datei in >array hat eine gesamtgröße von ca. 5kb bis 10kb. Kann es sein das der >speicher nicht ausreicht. Mit 5-10kb RAM ist der MEAG16 ein "klein" wenig überfordert. Der Compiler müsste da auch meckern. MFg Falk
Hallo P.P. könntest Du den C-Header mit den Musikdaten hier mal posten? Ich interessiere mich auch für das Thema und würde gerne versuchen, die Noten mit einem anderen Programm auszugegen. Gruss, ajax
Hi, das sind die header. Habe den PROGMEM modifizierer noch nicht eingefügt. Werde es wahrscheinlich auch erst irgendwann die nächsten tage testen. Dem konvertierer fehlen noch zwei semikola, die musst du selber eintragen. Ich muss dazu aber noch sagen das wir den laautsprechen über einen externen DA-Wandler an der atmega16 angeschlossen haben. >Mit 5-10kb RAM ist der MEAG16 ein "klein" wenig überfordert. Der >Compiler müsste da auch meckern. Leider sagt er uns gar nichts zu diesem Problem. Der nimmt das einfach hin und gibt uns eine hexdatei. Gruß, Prophet
> Würde eine const variable in de flash > geschrieben? Was ist eine "const variable"??? Vielleicht solltest Du mal den Unterschied zwischen Variable und Konstante ergründen. In einem ähnlichen Projekt lege ich die Sounddaten in den Flash und lese sie (timersynchron) mittels LPM aus. Allerdings in ASM. ...
Hallo P.P. gerade habe ich mir das "sound.zip" File mal angeschaut. Wie sind die Daten zu interpretieren? Sind die Daten Abtastwerte, die an den AD-Wandler ausgegeben werden, oder sind die Daten als Tonhöhe zu interpretieren? Wenn es Abtastwerte sind, dann wird der Speicher eines Atmega nicht für eine Soundausgabe reichen, sondern Ihr braucht einen zusätzlichen externen Speicher. Falls die Daten als Tonhöhe zu interpretieren sind: Welchem Ton enspricht der Wert 128,129 usw. Gruss, Christoph
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.