Forum: Mikrocontroller und Digitale Elektronik Datenspeicher voll - Alternative ?


von Fe L. (lurchieee)


Lesenswert?

Hallo,
ich lasse auf einem Atmega324PA eine FFT (Elm Chan) laufen. Aber schon 
bei der minimalen Zahl an samples (64) ist mein Datenspeicher fast voll.

"Device: atmega324pa
    Program:    8142 bytes (24.8% Full)
    (.text + .data + .bootloader)
    Data:       1575 bytes (76.9% Full)
    (.data + .bss + .noinit)"

Kann ich die FFT Daten irgendwo anders ablegen ? Oder ist das shcon im 
Ansatz zum scheitert verurteilt ?

Programmspeicher? EEPROM ?
externe Speicher stehen nicht zur Verfügung.


Besten Dank
Grüße
Luchieee

von hans (Gast)


Lesenswert?

nimm an flash

von Sean G. (atmega318)


Lesenswert?

Hallo
EEPROM ginge, sind aber auch nur 1024 Bytes. Programmspeicher wäre 
vermutlich die bessere Alternative, weil du da noch über 20kb hast. Es 
sei denn dein Programm wird noch deutlich grösser...
LG

von Purzel H. (hacky)


Lesenswert?

Aeh. Ja. Ein 644 waer im selben Gehause... mit doppeltem RAM. Ich denke 
trotzdem sollten mehr Samples moeglich sein. ... diese 64 Samples und 
FFT Koeffizienten sind Double ?

Ich denk es sollte auch mit Integern gehen. Und daher wuerd ich bei 2k 
RAM mindestens 1kbyte davon fuer nutzbare Zahlen erwarten, das waeren 
dann bei 16bit Integern, 2 mal 256 Samples.

von Davis (Gast)


Lesenswert?

1,5 KBytes SRAM für eine FFT64 ist ziemlich viel. Bist du sicher, dass 
es nur 64 Samples sind? Poste doch bitte den Code.

von Michael A. (Gast)


Lesenswert?

Den hast du schon durch?
Beitrag "ELM Chan FFT mit AVR Studio 6"

von Fe L. (lurchieee)


Lesenswert?

Danke für die schnelle Hilfe:

int16_t capture[FFT_N];      /* Wave captureing buffer */
complex_t bfly_buff[FFT_N];    /* FFT buffer */
uint16_t spektrum[FFT_N/2];    /* Spectrum output buffer */
uint8_t i;            //Vec Zahler

Wie geschrieben ist FFT_N 64,
bei 128 hab ich 98,8% Auslastung.

Wie richte ich den Programmspeicher ein ? Nur "PROGMEM" an meine arrays 
hängen?

von Davis (Gast)


Lesenswert?

Fe Li schrieb:

> int16_t capture[FFT_N];      /* Wave captureing buffer */
> complex_t bfly_buff[FFT_N];    /* FFT buffer */
> uint16_t spektrum[FFT_N/2];    /* Spectrum output buffer */

2 Bytes * 64    128
4 Bytes * 64    256
2 Bytes * 32     64
               -----
                448
               =====

Wofür geht der Rest des Speichers drauf?

> Wie geschrieben ist FFT_N 64,
> bei 128 hab ich 98,8% Auslastung.

> Wie richte ich den Programmspeicher ein ? Nur "PROGMEM" an meine arrays
> hängen?

Funktioniert nicht, da viel zu langsam im Zugriff und nicht beliebig oft 
beschreibbar.

von Fe L. (lurchieee)


Lesenswert?

Hm... ansonsten sinds fast nur "kleine" hilfsvariablen.

char value_str[3];          //LCD Ausgabewert
uint8_t capture_norm;        //Für Anzeige normiert
uint8_t max_capture;

Einen Cast vom ADC:

capture[i]=((int16_t)ADCH-127);

sonst nur 3 char-arrays zum Debuggen.

von Fe L. (lurchieee)


Lesenswert?

Davis schrieb:
> Wofür geht der Rest des Speichers drauf?

Wie find ich den verlorenen Speicher am besten? Kann der durch Header 
o.Ä. aufgefressen worden sein?

von Purzel H. (hacky)


Lesenswert?

Allenfalls das ASM Listing anschauen. Der Linker sollte wissen was wor 
hinkommt.

von Davis (Gast)


Lesenswert?

Poste die .map Datei, in ihr ist die Speicherbelegung abgelegt.

von Thomas E. (thomase)


Lesenswert?

Fe Li schrieb:
> ich lasse auf einem Atmega324PA eine FFT (Elm Chan) laufen. Aber schon
> bei der minimalen Zahl an samples (64) ist mein Datenspeicher fast voll.
Atmega1284 - 16K RAM.

mfg.

von Fe L. (lurchieee)


Angehängte Dateien:

Lesenswert?

Da ist das Ding ! ;-)

von hp-freund (Gast)


Lesenswert?

*(.bss*)
 *(COMMON)
 COMMON         0x00800106      0x400 Includes/lcd.o
                0x00800106                lcd_framebuffer
 COMMON         0x00800506       0x60 Includes/uart.o
                0x00800506                uart_outfifo

Ja, Bilder brauchen viel Platz...

von Fe L. (lurchieee)


Lesenswert?

hp-freund schrieb:
> *(.bss*)
>  *(COMMON)
>  COMMON         0x00800106      0x400 Includes/lcd.o
>                 0x00800106                lcd_framebuffer
>  COMMON         0x00800506       0x60 Includes/uart.o
>                 0x00800506                uart_outfifo
>
> Ja, Bilder brauchen viel Platz...

wieviel denn ^^?
Ist die erste Hexe die Adresse und die 2. eine Angabe in Byte?

von hp-freund (Gast)


Lesenswert?

0x400 -> 1kB

von 0x00800106 bis 0x00800505

von Fe L. (lurchieee)


Lesenswert?

Ok,
das erklärt einiges. Werde versuchen das ding ohne Komplikationen 
rauszuwerfen.

Besten Dank für die Hilfe.

Lurchieee

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
Noch kein Account? Hier anmelden.