Forum: Digitale Signalverarbeitung / DSP / Machine Learning Schnelle FFT in Assembler


von Benedikt (Gast)


Lesenswert?

Es wurde ja schon häufiger nach einem Spektrum Analyser gesucht.
Hier ein schneller Code für den mega8:
http://elm-chan.org/t/akilcd.zip
http://elm-chan.org/t/sa01.avi
http://elm-chan.org/t/sa02.avi

Leider ist das Programm für zwei LCDs mit je einem SED1520 (für Wave
und Spektrum Darstellung). Ich versuche gerade den Code für ein T6963
umzuschreiben, aber das ist nicht gerade einfach und bisher läuft noch
nicht viel, außer den Initialisierung...

von Sebastian (Gast)


Lesenswert?

Cool. Die AVIs sind ja sehr vielversprechend. Schade, dass die
LCD-Routinen nicht in C geschrieben sind, das würde sie viel einfacher
portierbar machen. Ich habe z.B. eine Lib für den KS0108-Controller
geschrieben. Wenn ich jetzt eine geeignete Schnittstelle hätte, würde
ich ja glatt mal versuchen, die FFT-Routinen bei mir einzubinden.

von Benedikt (Gast)


Lesenswert?

Ich habe immer noch kein LCD zum laufen gebracht, aber mal schnell ein
virtuelles Display am PC gebastelt.
Die FFT Routine ist echt beeindruckend. Nicht nur, dass diese sehr
schnell ist (ein vergleichbares C Programm ist um den Faktor 10-100
langsamer !!!!), sondern auch gleich eine Glättung beim FFT und eine
Filterung beim Oszilloskop ist eingebaut.

von Berti (Gast)


Lesenswert?

Gibts einen Anschlussplan wie das Audiosignal dem AVR zugeführt
wird(Signalkonditionierung)

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Der Software nach wird das Signal über einen MAX292 Switched Capacitor
Tiefpass Filter an ADC6 eingespeist (-> SMD Version des mega8)
Für den Anfang reicht auch ein einfacher Tiefpass, oder man kann das
Signal auch direkt einspeisen, allerdings erscheint dann alle
Frequenzen über 4,7kHz gespiegelt.
An AREF wird eine externe Refernzspannung eingespeist, aber man kann es
ja auch auf interne Umschalten.

Ich werde damit jetzt einen "kleinen" Spektrum Analyser mit LEDs
bauen und zwar 32x16.
Hier schonmal ein kleiner Test.

von Berti (Gast)


Lesenswert?

Zum Thema direkt einspeisen:
Wie bring i den Sttischen level von 2.5V zusammen um auch die negative
Halbwelle des Audiosignals erfassen zu können?

von Benedikt (Gast)


Lesenswert?

Am einfachsten geht es wenn man VREF auf AVcc schaltet (per Software).
Ein Spannungsteiler aus zwei gleichen Widerständen zwischen AVcc und
GND und man hat die 2,5V. Mit einem kleinen Kondensator koppelt man das
Audiosignal ein.

von Berti (Gast)


Angehängte Dateien:

Lesenswert?

Passt die Schaltung so in Etwa?

Werte für C?
R1=R2 schätzomativ 4k7

von Erik (Gast)


Lesenswert?

Für das C würde ich etwa 100 nF nehmen, R1 & R2 ehner hochohmiger,
resperktiv vom Spannungsteiler nochmals 100k und dan auf den Eingang
--> weniger Rauschen.

von Berti (Gast)


Lesenswert?

@Benedikt:

Gibt es irgendwo einen Pseudo Code für die FFT
Oder a Flussdiagramm
Ich würd das gerne in C nachproggen aber das ASM entschlüsseln...

Das wär des Rätsels Lösung

von Benedikt (Gast)


Lesenswert?

@Berti
google mal

Für C findest du einiges (z.B. fft.c), aber das ist alles verdammt
langsam (so 1/10 bis 1/100 der Geschwidnigkeit von dem ASM Programm)und
hat ehrlich gesagt bei mir noch nie richtig gut funktioniert.

von Berti (Gast)


Lesenswert?

Ich google schon seit 3 Tagen finde auch einiges aber nix mit
ordentlicher Beschreibung...
Ein schöner C Code hilft wenig wenn man nicht weis was mit welchem
Parameter übergeben wird.
Ich habs mit den Numerical recipes in C versucht bin aber auch dort auf
keinen Grünen zweig gekommmen.

von Benedikt (Gast)


Lesenswert?

Im Prinzip ist das immer dasselbe:
Ein Array mit den Wave Daten wird übergeben, fft läuft und man erhält
ein Array mit den Frequenzamplituden zurück. Einmal der Realteil in der
unteren Hälfte und der imaginär Teil in der oberen. Manchmal wird auch
nur der Betrag zurückgegeben.
Bei einigen Funktionen muss man auch noch die Länge mit angeben.

Eine einfache Erklärung dafür gibt es nicht. Ich habe es meistens nach
der zweiten Seite aufgegeben zu verstehen wie FFT wirklich
funktioniert...

von Berti (Gast)


Lesenswert?

g Ja is sehr komplex das ganze... werd mal versuchen mit einem
fertigen Quellcode was anzufangen...

von DerMax (Gast)


Lesenswert?

Ich hatte mal einen funktionierenden C-Code, leider war der wohl eher
für PC gedacht und verwendete Fließkommarechnung. Ich habs spaßes
halber mal auf nem AVR ausprobiert hat auch funktioniert aber ich
schätze mal der lag Performance-Mäßig noch nen ganzes Stück unter 1/100
von diesem hier.
Ich hab bisher noch keinen funktionierenden C-Code gefunden der mit
Integer-Arithmetik auskommt.

Ohne Verständnis der zu Grunde liegenden Mathematik hat man da denke
ich auch keine Chance irgendwas selber zu schreiben.
Ansonsten ist Asm imho eh der einzige Weg um da was halbwegs schnelles
aus nem AVR rauszuholen.

Bei diesem ist auch das Frequenzspektrum recht geschickt gewählt. Ich
hab früher mit voller Audio-Frequenz (44kHz) gesampled und dann die
höheren Frequenzbänder zusammengerechnet um einen logarithmischen
Frequenz-Maßstab zu bekommen. Das hat dann aber immer von den
Amplituden her nich richtig gepasst. Weiteres Problem war das man, um
die nötige Auflösung im niedriegen Frequenzbereich zu bekommen eine FFT
mit 512 oder besser sogar 1024 Punkten bräuchte wo dann der AVR
irgendwann endgültig das Handtuch schmeißt. Die oberen Bereiche sind
aber eigentlich eh uninterresant (jedenfalls wenn nur schön aussehen
soll) Und im unteren Bereich tuts dann auch ein linearer Maßstab so
kann man ne ganze Menge Performance sparen.

von Benedikt (Gast)


Lesenswert?

512 Punkte wären ja kein Problem, es wären immernoch über 25
Messungen/s:

;----------------------------------------------------------;
; Spectrum analyzer
;----------------------------------------------------------;
; 16bit fixed point FFT performance with megaAVR @16MHz
;
;  Points:  Input,    FFT, Output,   Total: Throughput
;   64pts:  .17ms,  1.9ms,  1.4ms,   3.5ms:   18.3kpps   (expected)
;  128pts:  .34ms,  4.4ms,  2.6ms,   7.3ms:   17.5kpps   (measured)
;  256pts:  .68ms, 10.1ms,  5.2ms,  16.0ms:   16.0kpps   (expected)
;  512pts:  1.4ms, 22.6ms, 10.4ms,  34.4ms:   14.8kpps   (expected)
;
; Input: Input waveform into butterfly table with applying window
; FFT: Execute butterfly operations
; Output: Descramble and output the spectrum as scalar values

Nur leider habe ich keine Ahnung wie die dazu passende Hamming Tabelle
usw. aussehen muss.
Ich habe die Samplerate verdoppelt und so die Frequenz bis auf 10kHz
erhöht. Die 64 Werte werden "Pseudologarithmisch" zu 32 Werten
zusammengefasst. Da hatte ich anfangs auch das Problem wie ich die
Werte am besten zusammenfasse: Bilde ich Mittelwerte ist die Amplitude
bei 4 Mittelwerten maximal 1/4 wenn nicht alle 4 Frequenzen vorkommen.
Daher suche ich jetzt den Maximalwert aus den 4 Werten, was auch ganz
gut passt.
Eventuell werde ich später (falls es mal eine neue Version des FFT
Programms gibt) auf 256 oder 512 Punkte erhöhen um im unteren Bereich
eine höhere Auflösung zu erzielen. 156Hz sind nicht gerade das beste.
Mit 512 Punkten wären es immerhin 39Hz...
Die zusammengefassten Werte werden per UART an einen zweiten uC
übertragen der als Display Controller für eine 32x16 LED Matrix
arbeitet.

von Matthias (Gast)


Lesenswert?

Hi

Hamming-Fenster berechnet sich ganz simpel nach
http://www.uni-regensburg.de/Fakultaeten/nat_Fak_IV/Physikalische_Chemie/Schmeer/PDF_Files/DSP06.pdf
Seite 14.

Matthias

von Benedikt (Gast)


Lesenswert?

Dann bleibt nur noch die unterste Tabelle, die mir überhaupt nichts
sagt.
Die Cosinus Tabelle muss ich auch auf die enstpreche Länge umrechnen,
oder ?

; These tables must be rebuilt when change FFT_N

t_cos_sin:  ; {cos(x),sin(x)} table (0 <= x < pi, in 64 steps)
  .dw  32767, 0, 32727, 1607, 32609, 3211, 32412, 4807
  .dw  32137, 6392, 31785, 7961, 31356, 9511, 30851, 11038
  .dw  30272, 12539, 29621, 14009, 28897, 15446, 28105, 16845
  .dw  27244, 18204, 26318, 19519, 25329, 20787, 24278, 22004
  .dw  23169, 23169, 22004, 24278, 20787, 25329, 19519, 26318
  .dw  18204, 27244, 16845, 28105, 15446, 28897, 14009, 29621
  .dw  12539, 30272, 11038, 30851, 9511, 31356, 7961, 31785
  .dw  6392, 32137, 4807, 32412, 3211, 32609, 1607, 32727
  .dw  0, 32767, -1607, 32727, -3211, 32609, -4807, 32412
  .dw  -6392, 32137, -7961, 31785, -9511, 31356, -11038, 30851
  .dw  -12539, 30272, -14009, 29621, -15446, 28897, -16845, 28105
  .dw  -18204, 27244, -19519, 26318, -20787, 25329, -22004, 24278
  .dw  -23169, 23169, -24278, 22005, -25329, 20787, -26318, 19519
  .dw  -27244, 18204, -28105, 16845, -28897, 15446, -29620, 14009
  .dw  -30272, 12539, -30851, 11038, -31356, 9511, -31784, 7961
  .dw  -32137, 6392, -32412, 4807, -32609, 3211, -32727, 1607

t_hamming: ; Hamming window (for 128 samples)
  .dw  2621, 2639, 2693, 2784, 2910, 3073, 3270, 3502
  .dw  3768, 4068, 4401, 4765, 5161, 5587, 6042, 6525
  .dw  7036, 7571, 8132, 8715, 9320, 9945, 10588, 11249
  .dw  11926, 12616, 13318, 14031, 14753, 15482, 16216, 16954
  .dw  17694, 18433, 19171, 19905, 20634, 21356, 22069, 22772
  .dw  23462, 24138, 24799, 25443, 26068, 26673, 27256, 27816
  .dw  28352, 28862, 29345, 29800, 30226, 30622, 30987, 31319
  .dw  31619, 31885, 32117, 32315, 32477, 32603, 32694, 32748
  .dw  32767, 32748, 32694, 32603, 32477, 32315, 32117, 31885
  .dw  31619, 31319, 30987, 30622, 30226, 29800, 29345, 28862
  .dw  28352, 27816, 27256, 26673, 26068, 25443, 24799, 24138
  .dw  23462, 22772, 22069, 21356, 20634, 19905, 19171, 18433
  .dw  17694, 16954, 16216, 15482, 14753, 14031, 13318, 12616
  .dw  11926, 11249, 10588, 9945, 9320, 8715, 8132, 7571
  .dw  7036, 6526, 6042, 5587, 5161, 4765, 4401, 4068
  .dw  3768, 3502, 3270, 3073, 2910, 2784, 2693, 2639

t_desc:  ; Descramble table (for 128 point FFT)
  .dw  0*4, 64*4, 32*4, 96*4, 16*4, 80*4, 48*4, 112*4
  .dw  8*4, 72*4, 40*4, 104*4, 24*4, 88*4, 56*4, 120*4
  .dw  4*4, 68*4, 36*4, 100*4, 20*4, 84*4, 52*4, 116*4
  .dw  12*4, 76*4, 44*4, 108*4, 28*4, 92*4, 60*4, 124*4
  .dw  2*4, 66*4, 34*4, 98*4, 18*4, 82*4, 50*4, 114*4
  .dw  10*4, 74*4, 42*4, 106*4, 26*4, 90*4, 58*4, 122*4
  .dw  6*4, 70*4, 38*4, 102*4, 22*4, 86*4, 54*4, 118*4
  .dw  14*4, 78*4, 46*4, 110*4, 30*4, 94*4, 62*4, 126*4

von Matthias (Gast)


Lesenswert?

Hi

die FFT würfelt bei Eingangsdaten der Form x[0], x[1], x[2] usw. die
Reihenfolge des Ergebnisfelds etwas durcheinander. Hier ist eine Grafik
wie das etwa aufgebaut ist:

http://www.kgw.tu-berlin.de/lehre/skript/ds/node36.html

Solltest du mit etwas Denken auf mehr Punkte ausbauen können.

Matthias

von Benedikt (Gast)


Lesenswert?

Mit etwas nachdenken wars klar:
Die Bitreihenfolge wird gedreht: 0->0, 1->128, 2->64, 4->32 usw

Jetzt habe ich zwar die Tabellen, aber es geht nicht. Ich hätte auch
eher drauf kommen können:
CaptBuf:.byte  FFT_N*2    ;Sampling buffer
BflyBuf:.byte  FFT_N*4    ;Butterfly operation table, Wave form buffer
LvlBuf:  .byte  FFT_N/2    ;Spectrum bar length

Bei 128 Punkten sind das schon 832 Bytes, bei 256 wären es 1664, aber
der mega8 hat nur 1kB SRAM.
Dann muss ich wohl einen mega8515 mit 32kb SRAM verwenden und den ADC
ebenfalls nach draußen verlagern...

von VHDL (Gast)


Lesenswert?

Die FFT lässt sich mit Bestimmtheit auch inplaced umbauen. Dann
benötigst du nur noch den BflyBuf: .Byte FFT_N*4 Buffer.

Falls du statt der Fixed Point/Floating Point FFT eine Integer FFT
benutzt so kannst du diesen Buffer auf FFT_N Bytes reduzieren.
Allerdings arbeiten fast alle Integer FFT's modular, also mit
Divisionen und diese sind langsammer. Es gibt zwei Ausnahmen, die
Montgomery basierte FFT die statt vieler modularer Divisionen eben
Multiplikationen in der sogenannten Montgomery Domain benutzt. Oder
eben die modulare Fermat FFT nach Schönhage/Strassen. Diese FFT
arbeitet modular 2^(N*M) und solche Divisionen zu dieser speziellen
Form der modularen Ringe kommen ganz ohne Multiplikationen und
Divisionen aus. Sie benötigen nur Shift Operationen , Additionen und
Subtraktionen. Allerdings dürfte dies für einen AVR eher schlecht sein
da die Multiplikation nur 2 Takte benötgt, dagegen aber eine beliebige
Shift Operation 1*i Takte benötigt.

Ich vermute das eine modulare Integer FFT wie die von Nussbaumer mit
Primzahlringen auf dem AVR der beste Kompromiss ist. Leider habe ich
persönlich mit diesen FFT's nur auf Intel PC's praktische Erfahrungen
gesammelt.

Gruß hagen

von Benedikt (Gast)


Lesenswert?

Ich verstehe zwar ehrlich gesagt nicht viel von dem was du geschrieben
hast, weshalb ich leider auch auf fertige Software angewiesen bin, aber
da diese Version so extrem schnell läuft, bin ich mit den ganzen
Kompromissen mit dem Speicherbedarf durchaus zufrieden.
Ich habe eine Application Note die eine FFT auf einem PIC beschreibt.
Dieser benötigt 100ms für eine 256Punkt FFT, während der AVR gerade mal
16ms benötigt.

von ape (Gast)


Lesenswert?

So ich hab jetzt auch mal ein bisschen mit dem Code rumexperimentiert.
Ich hab den LCD-Kram erstmal rausgeschmissen und sende jetzt die
Spektrum-Daten über UART an den PC. Ist schon sehr geil der Code.
Extrem schnell und das Spektrum sieht ganz gut aus (und das obwohl ich
im moment noch nichtmal einen Tiefpass davor hab :))
Ein paar Probleme hat mir die recht kleine Amplitude (auf die 32 pixel
Höhe vom im Original verwendeten LCD skaliert?) des Spektrums bereitet.
Ich hab jetzt die Zeile
  ldi  AH, 256/3
in make_bars durch
  ldi  AH, 255
ersetzt. Damit erreichen die Spektrum-Werte einen Maximal-Wert von
knapp 160, was für meine Zwecke ausreichend ist. Trotzdem wärs ganz
schön, wenn man 8 bit voll ausnutzen würde. Kennt da jemand ne Stelle
wo man noch dran drehen kann. (Ich bin so schon kein Freund von asm,
aber bei den Berechnungen dadrin blick ich nichts mehr...)

Der Plan sieht jedenfalls vor den Mega über TWI anzusprechen um dann
die Spektrum-Daten darüber auslesen zu können. Auf diese Weise kann
sich der Master noch um andere Dinge kümmern und ist nicht völlig mit
der FFT ausgelastet.
Außerdem werd ich mich auch mal an einer 256-Punkte FFT versuchen.
Allerdings werde ich dafür einen Mega32 verwenden. Der kostet auch
nicht mehr wie ein kleinerer Mega + SRAM und nimmt weniger Platz weg :)

von Matthias Waldhauer (Gast)


Lesenswert?

Was haltet ihr davon:

http://www.jjj.de/fft/int_fft.c

Sehr viel mehr zum Thema FFT gibt es direkt unter www.jjj.de zu finden.

von Matthias (Gast)


Lesenswert?

Hi

ist in C geschrieben. Die Fixkomma-Berechnungen werden wohl nicht mit
dem FMUL-Befehl gemacht werden. Das dürfte die Berechnungen dann doch
deutlich ausbremsen.

Matthias

von Matthias Waldhauer (Gast)


Lesenswert?

Ich habe es gepostet, weil jemand nach einem C-Code fragte, um den
Algorithmus besser verstehen zu können. Die oben verlinkte ASM-Version
soll dadurch natürlich nicht ersetzt werden.

von ape (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
da ich danach gefragt wurde hier mal mein editierter Code für den
mega8. Das AudioSignal wird mittels Koppel-Kondensator und
Spannungsteiler auf AVCC/2 gebracht (weiter oben ist es glaub ich
irgendwo nochmal genauer beschrieben) und an den ADC0-Channel
angeschlossen.
Die Daten werden übers UART mit 115kbps übertragen. Es existiert so gut
wie kein Protokoll. Es werden lediglich immer die 64 Werte des Spektrums
übertragen gefolgt von einem '\r'. Man sollte aber beachten dass auch
werte aus dem Spektrum den wert 13 (also '\r') haben können. Is halt
ein ganz billiger Prototyp, wer das wirklich verwenden will, sollte da
noch ein wenig dran arbeiten.
Außerdem verwende ich einen 18,432MHz Quarz (ich weiß damit ist der AVR
leicht übertaktet), wenn jemand einen anderen verwenden möchte, muss er
die Einstellungen für die UART Baud-Rate anpassen.
Alles andere hab ich erstmal rausgeschmissen. Also kein LCD, keine
Pause-Funktion, und auch keine Takterzeugung für den MAX293.

mfg
ape

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

@ape
Ich hatte es bei mir genauso gemacht:
18,432MHz Quarz an den AVR (selbst 24MHz machen die meisten noch mit),
Teiler für den ADC auf 64 um etwa 22kHz Samplerate zu erhalten, für
einen nutzbaren Bereich 0-10kHz (der brauchbare Teil des
Audiospektrums).
Im Anhang mal meine Software, bereits mit Tabellen für eine 256-Punkte
FFT. Das einzige was mir im Moment dazu noch fehlt ist der mega32 o.ä.
Wenn jemand noch für andere Werte die Tabellen braucht, kann ich diese
gerne erstellen.
Die Software überträgt die Werte ebenfalls über UART, aber nicht als 64
Werte, sondern als Grafikdaten, da ich damit ein 32x16 LED Display
ansteuere. Die Daten werden als 2x 32x 8bit übertragen: Erst die 32
Werte der oberen Hälfte der 16 LED Zeilen, dann nochmal 32 Werte für
die untere Zeile. Als Synchronisation dient Pin D.2. Die 64 Werte
werden pseudologarithmisch zu 32 Werten zusammengefasst: Im unteren
Frequenzbereich werden die Werte einzeln übertragen, dann immer zwei,
später drei und am oberen Ende dann vier Werte zusammengefasst zu
einem. Beim Zusammenfassen wird immer der Maximalwert der Einzelwerte
verwendet.
Aus irgendeinem, mir unerklärlichen Grund hängt sich die Software ab
und zu auf wenn man das Eingangssignal übersteuert, daher der Watchdog.

von ape (Gast)


Angehängte Dateien:

Lesenswert?

So hab nochma nen bissle an meinem Prog gebastelt
nach den 64 Werten wird jetzt der Wert 254 gesendet. So große Werte
nehmen die Spektrum-Werte nicht an, daher kann man sich darauf
synchronisieren.
Außerdem hab ich noch mein Java-Programm mit reingepackt was das ganze
aufm PC auswertet. Standardmäßig wird COM2 verwendet, für einen anderen
Port muss man die start.bat entsprehend anpassen.

@benedikt
Hab hier schon nen mega32 liegen, werd das gleich mal ausprobieren.
Bei der Sampling-Rate werd ich aber denke ich bei 11kHz bleiben. Mit
22kHz hat man auch bei 256 Punkten nur rund 80Hz Auflösung 40 find ich
da schöner und über 5kHz sind die Amplituden der Frequenzen auch nich
mehr sonderlich hoch, so dass es da auch nicht mehr all zu viel zu
sehen gibt.

von ape (Gast)


Lesenswert?

Mhmm also mit 128 Punkte FFT läuft das ganze jetzt aufm mega32 (nachdem
ich drauf gekommen bin das an bei den Interrupt-Vektoren jmp-Befehle an
Stelle der rjmp müssen). Für 256 Punkte muss man aber neben den Tabellen
auch noch alle Zähler die bis FFT_N zählen auf 16-Bit umbauen, damit sie
bis 256 zählen können und damit sind meine bescheidenen asm-Kenntnisse
leider erstmal etwas überfordert.

von Quark (Gast)


Lesenswert?

Hallo Benedikt,
Du machst doch viel mit dem M16C?
Lohnt es sich den FFT-Code zu portieren, dann hätte
man genug RAM für große Tabellen.
Was meinst Du, ist der Code schwer zu portieren?
Ich würde mich dann auch für den M16C interessieren.
Allerdings bringt Atmel auch immer schnellere, Codekompatible
MCs raus, brauche ichalso nur etwas zu warten.
Vielen Dank für Deine Meinung/Bewertung.
Grüüe
Quark

P.S. ich freue mich auch über die Meinung anderer.

von Benedikt (Gast)


Lesenswert?

M16C ist eben eine ganz andere Klasse als der AVR, nicht nur in der
Rechenleistung/Ausstattung, sondern auch im Preis und Gehäuse:
Unter 25€, 100 Pins bekommt man die normalen M16C nicht (es gibt
spezielle, abgespeckte Varianten, aber da hat man wieder das Problem
mit einer geeigneten Bezugsquelle).
Ich hatte schonmal einen C Code auf dem M16C ausprobiert und war
ehrlichgesagt enttäuscht. Eine 256 Punkt FFT hatte rund 0,5s gedauert,
obwohl nichtmal Fließkommazahlen verwendet wurden.
Auch von der Qualität her waren die Ergebnisse lange nicht so gut.

Ein speziell für den M16C optimierter Assembler Code müsste aber bei
24MHz mindestens doppelt so schnell laufen, wie auf dem AVR mit 16MHz,
nicht nur wegen den 16bit sondern auch daher, dass der M16 im gegensatz
zum AVR ein CISC uC ist, der u.a. über Barrelshifter o.ä. verfügt.

Falls es mal jemand versuchen sollte, ich wäre an dem Code
interessiert...

Andere Frage: Wo bekommt man eigentlich den MAX292 ?
Damit könnte man schön ohne aufwendige 256 Punkt FFT den gesamten
Bereich logarithmisch darstellen, indem man mehrere Messungen für
unterschiedliche Frequenzbereiche macht:
Eine 32 Punkt FFT für den Bereich <500Hz mit 16Hz Auflösung, dann
eine 32 Punkt FFT für den Bereich bis 10 oder 20kHz mit 300 oder 600Hz
Auflösung. Das sollte eine bessere Auflösung im unteren Bereich geben,
aber trotzdem schneller sein als ein 256Punkt FFT.

von Matthias (Gast)


Lesenswert?

Hi

ich bin mir nichtmla so sicher das der M16C soviel schneller ist als
ein AVR bei der FFT. Der AVR hat mit seinen schnellen FMUL-Befehlen ein
Möglichkeit zur sehr schnellen Multiplikation von Fixkommazahlen. Diese
fehlt dem M16C.

Matthias

von Benedikt (Gast)


Lesenswert?

Für eine 16x16 Multiplikation benötigt der AVR aber eine Menge Befehle,
für den M16 sind es weitaus weniger, es sollte daher schneller sein.
Ein großer Vorteil beim M16 ist die CPU Architektur mit einem sehr
schnellen Zugriff auf den SRAM und den Flash.
Der AVR benötigt für das Lesen eines Bytes aus dem Flash 187ns (bei
16MHz), beim M16C ist es nur die Hälfte für einen 16bit Wert. Insgesamt
sollte es also deutlich schneller werden, wenn man alles richtig
optimiert.

von Quark (Gast)


Lesenswert?

also ist das "Übersetzen" des Code nicht so einfach,
bzw. eine aufwendige Sache, schade, wäre interessant.
Was ein Barrelshifter frage ich hier lieber nicht
(ich suche mal selber (wiki)).
Sonst werde ich hier im Thread noch völlig OT.
Quark

von Benedikt (Gast)


Lesenswert?

Ein Barrelshifter ist im prinzip ein normaler Rechts/Linksshift, mit dem
Unterschied, dass man direkt angeben kann um wieviele Bits geschoben
werden soll. Das ist vor allem bei Multiplikationen/Divisionen mit 2^n
hilfreich und sehr viel schneller als Multiplikationen.
Ich weiß jetzt allerdings nicht, ob das für den FFT Code jetzt speziell
hilfreich ist, aber es sind eben die vielen Kleinigkeiten die alles
etwas beschleunigen.

von Matthias Waldhauer (Gast)


Lesenswert?

@VHDL:
Die meisten der von dir genannten Integer-FFT-Verfahren (und NTTs) sind
zwar gut geeignet, um z.B. große Integer-Zahlen (mod 2^n-1) zu
multiplizieren, aber für eine Frequenzanalyse leider ungeeignet.

Die hier oft zitierte "Integer-FFT" arbeitet ja nicht direkt mit
Integer-Werten, sondern mit per Integer-Datentyp repräsentierten
Festkommazahlen. Das hat sogar den Vorteil, daß z.B. Optimierungen im
Speicherlayout oder z.B. der Butterfly-Struktur (z.B. Split-Radix)
problemlos von Floating-Point-FFTs auf die Fixed-Point-Varianten
übertragen werden können.

von Winfried Alex (Gast)


Lesenswert?

Hallo,

falls einer das ganze mit dem MEGA64 oder 128 machen möchte (wegen mehr
RAM..) habe ich vor einiger Zeit kleine Adapterboards gemacht mit allem
drauf, was ein AVR zum Laufen benötigt. Eine zweite etwas größere
Version sogar mit ISP und JTAG-Steckverbinder. Alle Pins des AVR sind
auf Pfostenleisten gelegt, so daß auch mit Lochrasterplatinen
gearbeitet werden kann.

Infos dazu gibt es hier:
http://www.alex-elektronik.de/html/produkte.htm

Vielleicht hilft das ja jemandem von euch.
Gruß Winfried

von Matthias Asselborn (Gast)


Lesenswert?

ah wie ich sehe ist nun aus der digitalen Spec Analyzer Variante nun
doch was geworden g

von ape (Gast)


Angehängte Dateien:

Lesenswert?

So hab jetzt mal nen Versuchsaufbau mit LCD fertig (siehe Bild im
Anhang) Der mega32 auf dem Steckbrett macht die FFT (immernoch nur 128
Punkte) und sendet das Ergebnis an den mega128 auf dem STK500, welcher
dann das LCD ansteuert. Natürlich brauch man dafür keinen mega128 aber
der lag gerade rum :)
Das ganze würde sich natürlich auch von einem einzigen AVR erledigen
lassen (so wie beim Original), aber später soll der AVR der das Display
ansteuert noch eine ganze Menge mehr tun, so dass für die FFT nicht mehr
wirklich viel Zeit bleiben würde.
Der mega32 schafft übrigens 80 FFTs pro Sekunde, die auch alle auf dem
Display angezeigt werden.

von Paul (Gast)


Lesenswert?

Leider versteh ich von dem allen hier noch sehr wenig. Wäre mit einem
übertakteten AVR auch die anzeige von frequenzen um die 16-18khz
möglich? Ich wollte einen mono spectrumanalyzer mit 8-12Bändern von
40hz bis 16-18khz bauen, funktioniert sowas? oder sind die AVRs dazu
einfach zu langsam so dass ich auf analoge mittel zurückgreifen muss?

von ape (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal das Display aus der Nähe

@Paul:
um Frequenzen von 40Hz bis 18kHz anzeigen zu können bräuchtest du eine
1024 Punkte FFT (20kHz / 40Hz = 500 Schritte d.h. 1024 Samples) da ist
sicherlich auch dieser Code nicht mehr wirklich shcnell, außerdem
bräuchtest du ne Menge externes RAM.
Eine andere Möglichkeit wären 2 FFTs, eine hochauflösende für diue
niedrigen Frequenzen und eine grobe für die hohen, wie es Benedikt
vorgeschlagen hat. Damit könnte es funktionieren.

von Benedikt (Gast)


Lesenswert?

@Matthias Asselborn

Wo hast du eigentlich deine LEDs gekauft ?
Diese sind bei meiner Version eigentlich das teuerste (>60€ nur für die
LEDs, vor allem da Reichelt die Preise von 9 auf 12Cent pro LED erhöht
hat...). Die restlichen paar Transistoren und die zwei uC ändern da
fast nichts mehr am Preis.
Hast du normale LEDs verwendet, oder irgendwelche Superhellen ?

Ich bin noch am Überlegen was ich verwende (32 Frequenzen mit je 16
LEDs ergibt 512 LEDs !) Matte LEDs sehen warscheinlich besser aus, aber
da macht mir die Helligkeit Probleme da ich mit einem 1/32 Multiplex
arbeite. Daher müssten die LEDs mindestens 150mA Spitzenstrom schaffen
um auf etwa 5mA mittleren Strom zu kommen.

von ape (Gast)


Lesenswert?

@benedikt: LEDs gibs oft bei ebay sehr günstig

von Matthias Asselborn (Gast)


Lesenswert?

habe 2mA led s verwendet vom reichelt platinen in bulgarien ätzen lassen
!

habe aber daheim auch noch samsung led dot matrix displays 3 farbig...

von Matthias Asselborn (Gast)


Lesenswert?

sendest du mir bitte mal einen schaltplan deiner version mit µC das
würde mich nun brennend interessieren !

bzw layouts oder codes ?

von Benedikt (Gast)


Lesenswert?

@Matthias Asselborn

Den Schaltplan werde ich warscheinlich erst erstellen wenn alles
läuft.
Bisher habe ich nur einen mega8 aufgebaut der die FFT macht und die
Daten über den UART an einen zweiten uC sendet. Dieser zweite uC (ein
AT89C2051) arbeitet als LED Displaycontroller um über zwei 74HC4094
Schieberegister mit Latch die 16 LED Zeilen anzusteuern. Die 32 Spalten
werden dann mit zwei 4-zu-16 Dekoder und MOSFETs angesteuert, immerhin
fließen hier über 2A pro Spalte.
Sobald das Ding läuft werde ich den Schaltplan und die Software hier
reinstellen. Erste Tests mit einem simulierten 32x16 LED Display am PC
waren auf jedenfall sehr vielversprechend.

Das ganze hat eigentlich nicht wirklich ein Nutzwert, sondern es ist
nur ein Dekorationsobjekt, das ich mir als Art "High-Tech Bild" an
die Wand hängen werde. Warscheinlich werde ich noch eine weitere
Software programmieren, die auf der 32x16 LED Matrix Texte oder eine
Uhr anzeigt.

von Paul (Gast)


Lesenswert?

ich scheue mich nicht davor gleich 2 oder 3 AVR's zu verwenden da die
ausgabe sowieso auf LEDs erfolgt. Nur schaff ich damit noch 50-60fps?
30-40 fps wären auch noch ausreichend aber darunter fängt alles an zu
stocken und sieht unschön aus. Angenommen man lässt die AVRs mit 24mhz
laufen, würden die das schaffen? Ein frequenzspektrum von 40hz bis nur
10khz ist doch etwas mager.. bis 16khz wollte ich mindestens gehen
damit ich wirklich alle bänder drin hab. Notfalls könnte ich für die 3
bänder über 10khz jeweils einen eigenen AVR verwenden

mfg Paul

von Benedikt (Gast)


Lesenswert?

@Paul
Der Frequenzbereich ist kein Problem, allerdings muss man beim ADC
aufpassen, der schafft max. 30-40kHz Samplerate für etwa 8bit
Auflösung.
Verwendet man einen größeren Frequenzbereich (z.B. 0-20kHz) so wird
dieser in 64 Frequenzen aufgetrennt, man hat also eine Auflösung von
312Hz, was vor allem im unteren Bereich nicht gerade hochauflösend
ist.
50-60Hz ? Für was denn ? Selbst irgendein Winamp Plugin schafft das
gerade mal so. 10fps reichen für eine flüssige Darstellung aus, und das
schafft der AVR sogar mit 16MHz. Die FFT Routine benötigt 7,3ms zum
Berechnen der 64 Punkt, so dass theoretisch 137fps möglich sind.

von ape (Gast)


Angehängte Dateien:

Lesenswert?

So hab jetzt auch noch ein Peakhold eingebaut. Die Peakwerte fallen mit
steigender Geschwindigkeit nach unten (so wie bei WinAmp)

@paul:
Naja wenn du 2 AVRs verwenden möchtest könnte der erste mit 10kHz
samplen mit einer 256 Punkte FFT (so sie denn irgendwann funktioniert)
ergäbe sich dann eine Auflösung von 40Hz bis zu einer Frequenz von
5kHz. Der zweite könnte mit 32kHz samplen. Das Ergebnis ginge dann dann
bis 16kHz mit 125Hz Auflösung. Damit sollten dann 30fps möglich sein
(reiner Schätzwert...)
Abgesehen von der Berechnung musst du dir dann aber auch noch Gedanken
über die Aufbereitung der Daten machen. Immerhin müsstest du dan
30mal/s 256 Werte aus 2 AVRs übertragen, diese Daten zu den einzelnen
Bändern zusammenrechnen und dann noch auf einem Display anzeigen.

von Benedikt (Gast)


Lesenswert?

@ape
Könntest du mal die Software dazu posten ?
Was ist das für ein LCD ? irgendein KS oder T6963 ?
Ich habe gerade mein altes 120x48 LCD wieder gefunden, und bekam direkt
Lust das ganze mal auszuprobieren.
Vielleicht werde ich das ganze auch mal an einem 128x64 OLED
ausprobieren, aber da muss ich erstmal schauen ob der uC das schafft,
denn das OLED hat keinen Controller und ist deshalb etwas CPU lastig.

von Paul (Gast)


Lesenswert?

Naja das ganze soll wie gesagt über LED's ausgegeben werden..

nur mittlerweile bin ich an der überlegung ob das mit analogtechnik
nicht sogar einfacher geht?

Wenn ich zb. einen 32 Band spectrum analyzer nehme und über ein
sinussignalgenerator alle frequenzen gleichmäßig durchlaufen lass,
laufen die frequenzen gleichmäßig über das display drüber? In dem fall
würde mir ein AVR der mit 32 Bändern der den Frequenzbereich von
0-20khz abdeckt schon ausreichen.

mfg Paul

von ape (Gast)


Angehängte Dateien:

Lesenswert?

Hier meine aktuelle Software. Ich hab mich bemüht die Software fürs LCD
halbwegs zu kommentieren :)
Mein LCD hat ein KS0108 Chipset und ich verwende zwar meine Lib, es
sollte aber dennoch nicht schwer sein ein anderes einzubinden, da ich
sämtliche Daten direkt ans Display sende, alles andere ist zu langsam.

von Benedikt (Gast)


Lesenswert?

@ape
Danke, werde ich mir mal anschauen und auf T6963 bzw. OLED
umschreiben...

@Paul
>Wenn ich zb. einen 32 Band spectrum analyzer nehme und über ein
>sinussignalgenerator alle frequenzen gleichmäßig durchlaufen lass,
>laufen die frequenzen gleichmäßig über das display drüber?

Ja, schau dir mal die beiden Videos ganz oben an, da wird genau das
gemacht.

Mit LEDs will ich es auch machen: 32Bänder, zu je 16LEDs.
Das ganze kann man natürlich auch analog machen, das sieht dann so aus
und kostet eine Kleinigkeit mehr (irgendwo im Anhang sind ein paar
schöne Fotos von Matthias Asselborn):
http://www.mikrocontroller.net/forum/read-1-31511.html

von Paul (Gast)


Lesenswert?

ok dann ist ja wunderbar :) geht das mit einem einzelnen AVR? Der AVR
hat nur 8 Ausgänge wie splittest du die auf 32? und vor allem wie
steuerst du die jeweils 16 LED's an? LED-Treiber? Das wäre ja fast der
gleiche aufwand wie beim analogen :S

so ein Spectrum analyzer muss im Partykeller der Hit sein :)

mfg Paul

von ape (Gast)


Lesenswert?

oh ich seh gerade noch nen kleinen Bug, der oben definte Wert PEAK_SPEED
wird gar nicht verwendet. Der muss in Zeile 88 an Stelle der beiden 6
eingefügt werden.

von Benedikt (Gast)


Lesenswert?

Ich steuere die 32x16=512 LEDs im Multiplex mit einem zweiten uC an (1.
uC macht die FFT, der zweite die Displaysteuerung.)
Die 16 Zeilen steuere ich mit zwei 8bit Schieberegistern und 16
Transistoren, die Zeilen mit zwei 4 zu 16 Dekoder und 32 MOSFETs.
Insgesamt also 2 uC und 4 CMOS ICs neben ein paar Transistoren, MOSFETs
usw.
Und wenn du diese Schaltung mit der analogen vergleichst, erkennst du,
dass die mit uC viel einfacher ist...

Allerdings ist die Schaltung noch nicht fertig, im Moment verwende ich
noch 16x10 LEDs um schonmal die Schaltung testen zu können.

von ape (Gast)


Lesenswert?

Noch nen Bug :P
In Zeile 115 muss ein <= an Stelle eines < hin
es muss heißen:

if(j <= peak[i] && peak[i]-j < 8) {

Sonst verschwinden die Peak-Werte alle 8 Pixel kurz

von philip (Gast)


Lesenswert?

könntet ihr einen kompletten schalt plan für 16x64 leds machen also
64band, a 16LEds ?

so das man das ganze relativ einfach zusammen bauen kann ?


gruß philip

von Matthias Asselborn (Gast)


Lesenswert?

n 12x28 oder 32 würde ja auch schon reichen
aber das lässt sich ja variieren

von ape (Gast)


Lesenswert?

So hab jetzt die Kommunikation auf TWI umgestellt. Das Ergebnis der
letzten FFT kann jeder Zeit ausglesen werden, allerdings kann es
vorkommen, das während des Auslesen die nächste FFT fertig ist und dann
die erste Hälfte des ausgelesenen Spektrums von der letzten FFT stammt
und die zweite von der aktuellen, aber das fällt auch nicht weiter
auf.
Die Übertraung der 64 Spektrum-Werte dauert bei vollem TWI-Speed
(immerhin 512kHz bei 18,432MHz) gerade mal 1,3ms.
Dadurch das die Übertragung per UART wegfällt (die TWI-Übertragung
läuft im Gegensatz zu der Übertragung via UART interrupt-gesteuert im
Hintergrund ab) schafft der FFT-AVR jetzt knapp 85 Berechnungen pro
Sekunde und das auch nur, weil er warten muss bis der Sampling-Buffer
neu gefüllt ist, mit höherer Sampling-Rate wäre noch mehr drin.
Last but not least, macht das Display jetzt knapp über 70fps, da die
Übermittlung des Spektrums schneller von statten geht und die Wartezeit
bis zur nächsten Übertragung wegfällt.

@philip:
16x64 LEDs, das wären ja 1024 Stück...
viel Spaß beim "einfach zusammen bauen", von den Kosten und der
Stromaufnahme mal ganz zu schweigen :)

von philip (Gast)


Lesenswert?

hehe ja das habe ich auch grade gesehen... ^^ ups ja 64 kanal bekomme
ich net unter lach...

nein 12x32... oder 16x32... werde ich bauen das ist noch machbar...
strom verorgung währ kein problem ^^ ich werde vermutlich ein kelineres
PC netzteil verbauen.. habe noch eins ohne lüfter....
das ist schön leise und liefert genug :)

jetzt muss ich nur drauf warten das einer schalt pläne macht,
damit ich alles ätzen lassen kann :)

von Paul (Gast)


Lesenswert?

Für die LEDs empfehle ich so vielfachLEDfassungen da man die LEDs sonst
schwierig exakt gerade in eine reihe bekommt.

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

ach ja ich poste anbei mal Fotos @ Steuerung , Display !
Frontplatte usw...

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

anbei neue bilder von jetzt
gruß Matthias Asselborn

von Matthias Asselborn (Gast)


Lesenswert?

nun sollte die Frage beantwortet sein :-)
von wegen LED Fassungen....

von ape (Gast)


Angehängte Dateien:

Lesenswert?

So sitz jetzt gerade an der 256 Punkte Version... Den Zähler in der
adc_isr habe ich bereits umgebaut, der in do_window ist auch kein
Problem, in do_fft und make_bars wird immer nur FFT_N/2 geladen, das
ist also eigentlich auch kein Problem.
Dennoch funktioniert das ganze nicht. Ich vermute das das u (bzw. XH)
in do_fft der Übeltäter ist und im Verlauf der Schleifen bis FFT_N
zählt. Da wird die Sache dann aber wirklich gemein, da mit XH auch
multipliziert wird und ich nicht weiß wie man in asm eine
Multiplikation mit einem 16-bit Wert realisiert. Hat da jemand nen
Tipp?
Im Anhang mal mein momentaner Code.

von thkais (Gast)


Lesenswert?

mul AL,XH  ; T10L = u*4

Wenn der Kommentar  " u*4 " stimmt, kann man diese Multiplikation mit
zwei Shifts ersetzen (immer noch schneller als eine 16x16 Bit
Multiplikation).

Um mit einem 8-Bitter eine 16Bit-Multiplikation auszuführen, muß man
(um den Hardware-Mul-Befehl nutzen zu können) die Faktoren in  Summen
zerlegen, einzeln multiplizieren und dann wieder zusammensetzen.
Dann kommen aber 4 Mul-Befehle zusammen, nebst einigen 32-Bit -
Additionen. Wenn man den Wertebereich des Ergebnisses auf 16 Bit
begrenzen könnte, würde es einfacher werden.
Ob das 100% ig richtig ist, müßte ich aber erst mal nachlesen, ich habe
irgendwo ein Buch herumliegen, in dem der Algorithmus drinnen ist - aus
dem Kopf weiß ich ihn momentan nicht.

von ape (Gast)


Lesenswert?

mhmm wenn ich mir das nochmal genauer angucke is mir da sganze eh ein
ziemliches Rätsel wo kommt überhaupt das AL her, das wird in dieser
Routine vorher gar nich initialisiert und dann multipliziert er einfach
damit...
Naja ich denke ich werds dann jetzt doch erstmal bei den 128 Punkten
belassen und mal den von Benedikt vorgeschlagenen Weg mit 2 FFTs
ausprobieren, einer hochauflösenden für den unteren Bereich und einer
gröberen für die hohen Frequenzen.

von Hagen (Gast)


Lesenswert?

D.h. du sampelst mit 22Khz den Inputbuffer voll. Die hochauflösende 128
FFT geht über diesen Buffer. Die niedrig auflössende FFT geht dann zB.
über 4 solcher Buffers, wobei aber immer 4 Samples zu einem Sample
zusammengefasst wurden. Die effektive Samplingrate wäre dann
22Khz/4=5.5Khz mit 128 Punkten FFT. Der ADC sampled nur einen Kanal mit
22KHz. Pro 4 hochauflösende FFT's fällt eine niedrig auflösende FFT
an.

Oder wie möchtest du das machen ?

Gruß Hagen

von Benedikt (Gast)


Lesenswert?

Meine Idee ging anderst:
Wenn man einfach mit einer niedrigeren Samplerate aufzeichnet bekommt
man Störungen, da das Eingangssignal auf halbe Samplerate begrenzt sein
muss, daher war in der Orginalschaltung auch ein steiler Switched
Capacitor Tiefpass mit einem MAX292 eingebaut.
Um mit zwei unterschiedlichen Samplerates aufzuzeichnen muss man auch
die MAX292 Taktfrequenz verändern.
An sich kein Problem, aber wo bekommt man das IC zu bezahlbaren Preisen
?

von Philip (Gast)


Lesenswert?

warum baut ihr das ganze nicht einfach mit mehreren avrs auf ? ist doch
viel einfacher...

ein paar avrs um das signal zu verarbeiten (FFT) und dann einen avr der
das ganze dann zusammen fast... auf 1-2 avrs kommt es mit sicherheit
nicht an...

von ape (Gast)


Lesenswert?

Ziemlich genau so hatte ich mir das vorgestellt.
Ich nehme 2 Sample-Buffer. Im 1. Buffer landet jeder ADC Wert, im 2.
nur jeder 4. Wenn der erste buffer voll ist startet die erste (loRes)
FFT. Danach hatte ich ursprünglich vor einfach zu warten, bis der
zweite voll ist, aber es is natürlich sinnvoller die Zeit mit was
nützlichem zu verbringen und die loRes FFT upzudaten. Obwohl der
Controller nicht alle 4 schaffen dürfte, aber 2 Durchgänge sollten
schon drin sein. Wenn der zweite Buffer dann jedenfalls voll ist wird
die hiRes FFT berechnet und danach gehts wieder von vorne los.
Die hiRes FFT hätte dann jedenfalls einen Frequenzbereich von 0-2,75kHz
in 43Hz Schritten. Bei der loRes würden die Werte bis 11kHz in 172Hz
Schritten gehen.

von Benedikt (Gast)


Lesenswert?

Die AVRs sind nicht das Problem, sondern der Tiefpassfilter, der
ausreichend steil sein muss. Mit einem RC, bzw. LC Tiefpass kommt man
leider nicht sehr weit.
Auf dem oberen Video sieht man gut, dass der Balken beim Sinuston bis
ganz nach rechts läuft, und dann wieder ein Stück zuück bis er
verschwindet. Bei einem RC Tiefpass läuft der Balken 5-6 mal hin und
her, bis er annähernd verschwunden ist.

von Hagen (Gast)


Lesenswert?

@Ape: ok, das Vorgehen halte ich für die beste Lösung.

Du sampelst mit 22Khz jeweils 128 Samples in den Buffer der schnellen
FFT und führst diese wie bisher aus. Zusätzlich werden jeweils 4
succesive Samples in einer Variablen addiert und dann durch 4 geteilt.
Dieser Wert landet in einem zweiten 128 Samples Buffer. Wenn der voll
ist sind 4 schnelle FFT's vergangen und nun folgt noch eine 128 Punkte
FFT zusätzlich. Du benötigst also 25% mehr Rechenzeit relativ zu deinem
jetzigen Code. Dafür nichts mit zusätzlicher Hardware oder erhöhtem ADC
Aufwand.

Du könntest natürlich auch jweils 5, 6 usw. Samples zusammenfassen und
somit nur 1/5'tel oder 1/6'tel mehr Rechenzeit verbrauchen. Ich würde
aber 2,4 oder 8 Samples vorschlagen da sich damit besser der Duchschnitt
berechnen liese.

Alternativ könnte man auch die jeweils 4'te, 5'te usw. schnelle FFT
ausfallen lassen und statt dessen die FFT über den zweiten Buffer
berechnen. Das dürfte bei deinen jetzigen 70 fps nicht sehr auffallen.
Und gerade die tieferen Frequenzen folgen eher einem langsammeren
Rhythmus. Somit würde sich an der Performance garnichts ändern.

Gruß Hagen

von ape (Gast)


Lesenswert?

Ja stimmt der Tiefpass ist in der Tat nen Problem. Man kann nen 8th
Order Tiefpass auch diskret mit 4 Ops aufbauen, aber da ist dann halt
die Trenn-Frequenz nicht einstellbar.
Im übrigen würde ich die Verwendung mehrerer AVRs zum Berechnen gerne
vermeiden, obwohl es durch die Kommunikation über TWI sehr leicht zu
realisieren wäre.

von ape (Gast)


Lesenswert?

@Hagen: Ist eine Mittelwert-Bildung der letzten 4 Werte für den
langsamen Buffer wirklich nötig? Wenn ich den AD-Wandler Speed
runterdrehen würde würde ich auch immer nur den momentanen Wert
erhalten. Oder lassen sich durch die Mittelwertbildung die störenden
Auswirkungen der höheren Frequenzen verringern?

von Paul (Gast)


Lesenswert?

So langsam bin ich irritiert :D

Matthias Asselborn, wie hast du den eine so schöne Front
herbeigezaubert? ;)

Btw: ich versteh die LED ansteuerung noch nicht wie man so viele LEDs
mit nur so einer kleinen Leiste ansteuern kann. Ausserdem wie bekommst
du es hin dein Frequenzspektrum so genau aufzuteilen? Du hast da ja
sehr viele Frequenzen mit verschiedenem abstand zueinander.

Bei meinem wissensstand wird das wohl leider nie was :-/

mfg Paul

von Benedikt (Gast)


Lesenswert?

@Ape
Die von dir vorgeschlagene Methode, nur jeden 4. Wert zu nehmen
funktioniert wegen dem fehlen Tiefpass nicht, da dies nur Undersampling
aber kein richtiger Tiefpass ist. Man müsste daher aus den gesampleten
Werten über einen Software Tiefpass mit etwa 1-2kHz nur die tiefen
Frequenz rausfiltern, aber ich bin mir nicht sicher ob das nicht mehr
Rechenleistung benötigt als die eigentliche FFT.

Eine andere Lösung wären die zwei getrennte Opamp Tiefpässe (einer mit
10kHz für die normale FFT mit 20kS/s und ein zweiter Tiefpass mit 1kHz
der an einem anderen ADC angeschlossen wird für die FFT mit etwa
2,5kS/s. Das ergäbe dann eine Auflösung von 10Hz im Bereich <500Hz !

von Matthias Asselborn (Gast)


Lesenswert?

gewusst wie :-)

ich warte allerdings nur noch auf den source
einer fft
selber bin ich gerade beim thema furier analyse
evtl klärt sich dann was auf
die funktions weise usw...

von Benedikt (Gast)


Lesenswert?

@Matthias Asselborn
Ich vermute mal du hast analoge Filter verwendet. Irgendein AVR
digitalisiert die Werte und steuert die LEDs im Multiplex an ?

von Hagen (Gast)


Lesenswert?

die Mittelwertbildung ist unbedingt nötig ansonsten reduziert sich nicht
die Samplingfrequenz. Der Trick den du anwenden willst basiert ja auf
der Reduzierung der Samplingfrequenz.
22Khz Samplingfrequenz -> 11Khz / 128 = 86 Hz Bandbreite pro Schritt,
Grenzfrequenz 11Khz.
Reduzierung 22Kz/4 -> 2.75Khz / 128 = 21Hz Bandbreite pro Schritt,
Grenzfrequenz 2.75Khz.

Die ersten 32 Samples mit 11Khz werden durch die 128 Samples mit
2.75Khz überdeckt. Dein Display würde also 128 Samples mit 21Hz
Bandbreite plus 96 mit 81Hz Bandreite anzeigen -> 224 Samples. Die
ersten 128 Samples zeigen die tiefen Frequenzen bis 2750Hz, die
nachfolgenden 96 Samples zeigen die Frequenzen zwischen 2750-11000Hz.

Die Mittelwertbildung ist nicht die beste Methode aber die einfachste.

Wenn du mit einem ADC bei 22Khz samplest so arbeitet er pro Sample wie
ein Buffer der 1/22000 Sekunde den Analogwert buffert. Wenn du mit
5.5Khz sampelst so hält der ADC für 1/5500 Sekunde den analogen Wert.
Da die meisten ADC per succesiver Approximation arbeiten und so einen
Buffer benötigen verhält sich das wie eine Mittelwertbildung über den
Zeitbereich eines Samples.

Bei der Mittelwertbildung passwiert doch folgendes:
Stelle dir mal 11Khz bei 22Khz Sampling vor. Wir haben dann Werte im
Buffer wie 0,+127,0,-127, eben 11Khz. Nun bilden wir den Mittelwert zu
einem virtuellem Downsampling von 22Khz/4 = 5.5Khz. Sprich bilden den
Mittelwert von obigen 4 Werten -> 0 + 127 + 0 + -127 == 0 ! Eine 11Khz
Frequenz virtuell down-sampled auf 1/4 würde Samples aus lauter Nullen
ergeben -> ergo die 11Khz sind rausgefiltert worden.

Soweit habe ich das zumindestens verstanden :)

In deinem Falle stellt das ja kein großer Aufwand dar. Probiers doch
einfach :)

Gruß Hagen

von ape (Gast)


Lesenswert?

Jup das werd ich...
Hab übrigens gerade 2 MAX297 bekommen. Direkt bei Maxim als Muster
bestellt, da ich sie sonst wirklich nirgendsow gefunden habe. Ich hab
den 297 genommen weil der nur die halbe Frequenz benötigt.

von ape (Gast)


Lesenswert?

@Hagen: Du musst deine Werte alle durch 2 teilen, da ja bei einer FFT
immer nur halb so viele Werte rauskommen wie man reinsteckt, in diesem
Falle also 64 ;)

Habe jetzt jedenfalls 2 FFTs nach obigem Schema laufen. Auf dem Display
werden alle 64 Werte der hochauflösenden FFT und die letzten 48 Werte
der zweiten FFT dargestellt (der Frequenzbereich der ersten 16 Werte
wwird ja von der ersten FFT abgedeckt). Das Ergebnis ist aber eher
mäßig. Am meisten stören die hohen Frequenzen bei der hiRes FFT. Diese
werden zwar durch die Mittelwertbildung gedämpft, aber sind halt
trotzdem noch sehr deutlich zu sehen. Bei Musik fällts nicht so auf,
aber wenn man einen Ton "durchs Spektrum laufen lässt", sieht man es
doch sehr deutlich. Ich denke ich werde da noch mal probieren die FFTs
nacheinander zu machen und die Trennfrequenz des MAX297 zu verändern.
Außerdem stört mich noch der sehr abrupte Übergang von hochauflösend zu
niedrig auflösend, neben den unterschiedlichen Frequenzschritten sind
auch die Amplituden der Balken etwa sunterschiedlich, wodurch sich eine
kleine Stufe im Spektrum ergibt.
Auf jeden Fall ist aber die Auflösung im niedrigen Frequenz-Bereich
verdammt hoch, das würde ich schon gerne beibehalten.
Dennoch würde eine 256 Punkte FFT ein viel schöneres Bild liefern :)

PS: Der Maxim-Stein is schon echt gut, aber leider rauscht er ganz
schön, ich weiß nich ob ich was falsch gemacht habe (soviel gibs da ja
nich was man falsch amchen könnte), aber die im Datenblatt angegebenen
77dB SNR erreicht meiner mit Sicherheit nicht.

von Matthias Asselborn (Gast)


Lesenswert?

@Benedikt ja so ist es aber wenn nun die fft schon mal funktioniert
lässt sich das ganze schnell umbauen !

von Hagen (Gast)


Lesenswert?

>Am meisten stören die hohen Frequenzen bei der hiRes FFT. Diese
>werden zwar durch die Mittelwertbildung gedämpft, aber sind halt
>trotzdem noch sehr deutlich zu sehen.

Bei einer 256 Punkte FFT wird das besser, allerdings steigt eben auch
der rechnerische Aufwand. Das Problem ist das "downsampling", du
reduzierst ja von 22Khz auf 22/4Khz. Wenn du zb. mit 22/4Khz samplest
würdest du die gleichen Effekte bei hohen Frequenzen sehen. Bei zb.
11Khz Messfrequenz hat das Downsamlping die fast gleichen Effekte wie
ein direktes Sampling mit 22/4Khz. Man kann dies verbessern wenn man
statt dem Mittelwert über die 4 Samples eine Interpolation des
Mittelwertes über zB. 12 Samples macht. Dabei versucht man also den
genaueren zeitlich bezogenen Sample-Wert zu bestimmen.
Ein anderer einfacher Trick wäre die Nulldurchgangssynchronisation. Man
verschiebt also die 4 Samples um +-3 Samples im Buffer, aber so daß
deren erster Durchschnittswert +-0 ergibt. Man synchronisiert also das
Downsamling realtiv zu Inputmeßfrequenz. Das würde das Messen einer
einzelnen Frequenz verbessern, aber nicht bei einem Frequenzgemisch wie
bei Musik.

Dein jetziges Verfahren hat also den entscheidenen Vorteil das es
schneller als eine 256 Punkte FFT bei 22Khz ist. Im Vergleich benötigt
es Sqrt(256 Punkte FFT) * 1.25 an Zeit zu einer vollständigen 256
Punkte FFT. Wenn also 2ms pro 128 FFT = 5*2 = 10ms für einen Duchlauf
benötigt wird dann benötigt eine 256 FFT 16 ms.

Gruß Hagen

von ape (Gast)


Angehängte Dateien:

Lesenswert?

Mhmm, also die Variante mit den beiden Sampling-Frequenzen nacheinander
scheint besser zu funktionieren. Im Anhang mal meine aktuelle Version
Echt erstaunlich wie schnell der MAX297 auf ein umschalten der
Steuerfrequenz reagiert.
Einziger Nachteil ist das die niedirg auflösende FFT nun "nur noch"
genauso oft berechnet wird wie die hochauflösende. Beide werden jetzt
etwas mehr als 30mal pro Sekunde berechnet. Das einzige was mich noch
stört ist, dass der AVR 15ms pro Durchgang (ungefähr die Hälfte der
Zeit!) damit verbringt auf das Füllen des "langsamen" Buffers zu
warten.
Ein Teil der Zeit lässt sich dazu verwenden die beiden Ergebnisbuffer
zusammenzurechnen (mit pseudo logarithmischem Maßstab), aber danach
wird immer noch ne ganze Menge übrig sein.
Das rauschen des Tiefpasses hab ich auch etwas vermindert, in dem ich
vorm Tiefpass die Amplitude des Signals mit dem integrierten OpAmp
verdopple und hinterher wieder mit 2 Widerständen halbiere.

von Matthias Waldhauer (Gast)


Lesenswert?

@Tiefpass:

Für einen C64-Emulator habe ich den Tiefpass etwa so realisiert (hier
ohne Resonanz):

Diff:=Sample-TPass;
TPass:=TPass+Diff*Faktor;

Der Faktor sollte sich im Intervall [0,0;1,0] bewegen, wobei 0,0 alles
wegfiltern würde und 1,0 gar nichts.

von Paul (Gast)


Lesenswert?

in welchem preisbereich würde sich ein zb. 10x10 Spec mit einem AVR
bewegen? Und wie viel Khz sind schon möglich?

von Benedikt (Gast)


Lesenswert?

@Paul:
Wie oft denn noch: Die Frequenz ist nicht das Problem, mit einem
externen ADC sind über 1MHz möglich.
Um was es hier geht: Die Auflösung von diesem Frequenzbereich zu
vergrößeren, da der Bereich im Moment in 64 Teile zerlegt wird.

Der Preis, kommt darauf an wie du das anzeigen willst. Ich sag mal
mega8 + Anzeige, das können 10€ sein, aber auch 1000€ wenn du die
Anzeige gerne 10x10m groß hättest...

von ape (Gast)


Lesenswert?

Bin jetzt so einigermaßen fertig (mit dem Ding und den Nerven) :)
Während der AVR auf das Füllen des langsamen Buffers wartet fasse ich
die Ergebnisse der beiden FFTs zu einem zusammen. Das resultierende
Spektrum hat dann 78 Werte.
Alle 3 Spektren werden ca. 30 mal pro Sekunde refreshed.
Außerdem habe ich auch die Berechnung der Peakwerte in den FFT AVR
verlagert. Das Übertragen der Werte über TWI dauert zwar vermutlich
länger als wenn ich sie direkt in der Anzeige-Routine berechnen würde,
aber es sparrt Speicher im AVR der das Display managed. Dafür benötigt
der FFT AVR aber neben den Buffern für die Peaks und ihre
Geschwindigkeiten auch noch temporäre Level-Buffer. Es würde zwar auch
ohne gehen, aber dann müsste das ganze direkt im Anschluss an die
jeweilige FFT geschehen und könnte nicht bis zu dem Zeitpunkt warten,
wo der AVR auf das Füllen des Sample Buffers wartet. Wie auch immer es
ist jedenfalls immer noch jede Menge SRAM übrig.
Den Sourcecode gibs, wenn ich den TWI Kram noch etwas verbessert habe,
man kann noch nicht auswählen, welches Spektrum man nun bekommen
möchte...

Hab mal nen kleines Video gemacht. Sorry wegen der miesen Qualität und
dem leisen Ton, aber mehr gibt meine Digicam nich her, außerdem möchte
ich ja nicht von der Musikindustrie verklagt werdenn :)

http://www.apetech.de/download/test.avi

von Benedikt (Gast)


Lesenswert?

Nicht schlecht...

Vielleicht klaue ich mir den Code für mein Projekt, aber erst muss ich
mal das 32x16 LED Array bauen und mir ein paar MAX 29x besorgen..

von Matthias Asselborn (Gast)


Lesenswert?

durfte man den code erfahren ?
gruß matthias

von philip (Gast)


Lesenswert?

könnte einer fürn 32x16 oder 32x12 oder ovn mir aus auch nur 28x12 oder
28x16 LEDs einen schalt plan machen ?

von ape (Gast)


Lesenswert?

@Matthias:
Wie gesagt noch nen bissel Feinschliff dann gibs die neue Version. Du
kannst auch den letzten Code nehmen da musst du dann nur selber die
Werte zusammenrechnen...

@philip: ich nehm 20€ pro Stunde, dann können wa nochma drüber reden.
Mal ernsthaft: meinst du nich das die Leute hier nichts anderes zu tun
haben als dir nen Display nach deinen Wünschen zu entwickeln?

von Matthias Asselborn (Gast)


Lesenswert?

@ape

was meinst du mir Feinschliff ?
mal eine grundlegende Frage
habe ja den Thread mal vor einem Jahren
aktiv mitverfolgt
nun meine 1. frage
auf welcher hardware bassiert denn der spec ?
einem Atmel bzw einem externen digital analog Wandler ?
reicht nun die Geschwindigkeit die ein Atmel hat
bzw die Genauigkeit eines AD wandlers !
wie genau und welche Displays steuerst du an
ist der Code in C ? das wäre super denn das beherrsche ich !

Gruß Matthias

von ape (Gast)


Lesenswert?

mhmm also schon, obwohls ein von vorn durchlesen des Threads auch tun
würde ;)

Das ganze basiert auf einem mega32, der 2 128 Punkte FFTs durchführt.
Die erste mit 5,5kHz Sampling-Frequenz, die zweite mit 22kHz. Die erste
liefert ein recht hochaufgelöstes Spektrum des unteren Frequenzbandes
(64 Werte; von 0 bis 2,75kHz in 43Hz Schritten), die zweite FFT erzeugt
ein wesentlich gröberes Spektrum, das dafür aber bis 11kHz reicht
(wieder 64 Werte; von 0 bis 11kHz in 170Hz Schritten).
Die beiden Spektren werden dann zu einem dritten zusammengerechnet um
ein möglichst breitbandiges Spektrum mit einer vernünftigen Auflösung
im unteren Frequenzbereich zu erhalten.
Bei der Zusammenfassung der beiden Spektren, werden die 22 ersten Werte
des ersten Spektrums direkt kopiert, aus den folgenden 42 Werten wird
der größere Wert aus je zweien  kopiert. Danach werden wieder 22 Werte
aus dem zweiten Spektrum direkt kopiert und von den verbliebenen jewils
der größere aus zweien, wobei aber erst beim 16. Wert begonnen wird, da
der Bereich davor bereits vom ersten Spektrum abgedeckt wurde. Das
resultierende Spektrum sieht dann also ungefähr so aus: Werte 0-21:
0-946Hz; Werte 22-42: 946-2,75kHz; Werte 43-65: 2,75-6,5Hz; Werte
66-78: 6,5-11kHz. Ich hoffe das war jetzt einigermaßen nachvollziehbar
:)
Diese etwas umständliche Methode hat jedenfalls den Vorteil, dass sie
mit 128 Punkte FFTs auskommt. Problem bei der Sache ist aber das
während der hochauflösenden FFT keine Frequenzen über 2,75kHz am
AD-Wandler liegen dürfen. Daher ist noch ein einstellbarer
Tiefpassfilter (z.B. MAX297) notwendig, dessen Trennfrequenz man immer
zwischen 2,75 und 11kHz umschaltet. Eine Alternative wäre für jede FFT
einen eigenen AD-Wandler Kanal zu verwenden und dann die Tiefpassfilter
diskret mit fester Trennfrequenz aufzubauen, diese sollten dann aber
auch 8ter Ordnung sein.
Zum AD-Wandeln wird jedenfalls der interne ADC verwendet, die Auflösung
ist mehr als ausreichend. Ich ziehe von den resultierenden
Spektrumwerten sogar immer noch 1 ab, damit das rauschen des MAX297
nicht mehr zu sehen ist.
Die drei Spektren werden jedenfalls rund 30 mal pro Sekunde berechnet
und lassen sich gemeinsam mit den Peakwerten zu jedem beliebigen
Zeitpunkt über das TWI Interface auslesen. Das Video oben zeigt das
zusammengefasste Spektrum.
Der FFT-Code ist vollständig in Assembler geschrieben. Eine
vergleichbare FFT in C ist um Größenordnungen langsamer.
Das Auslesen des AVRs über das TWI-Interface und die Ausgabe auf dem
Display (128x64 Pixel; KS0108 Chipset) sind aber in C geschrieben.

Wie auch immer, für ein Spektrum-Analyzer wie du ihn deinen Fotos nach
im Sinn hast wird das ganze wahrscheinlich nicht wirklich brauchbar
sein, da das Spektrum halt keinen richtigen logarithmischen Maßstab
hat. Als optische Spielerei in einem Verstärker oder auch mit
LED-Display an der Wand ist das ganze aber mehr als ausreichend.

So ich hoffe damit sind die meisten Fragen beantwortet ich geh jetzt
schlafen. Den Sourcecode gibts wenn die Ansteuerung über das
TWI-Interface fertig ist -> Schätzungsweise morgen.

von ape (Gast)


Angehängte Dateien:

Lesenswert?

So fertig.
Jedenfalls erstmal. Im Anhang befinden sich der Quellcode für den FFT
AVR, sowie eine kleine C-Library um mit dem Ganzen übers TWI zu
kommunizieren und ein kleines Demo Prog, das das zusammengefasste
Spektrum auf einem KS0108 LCD ausgibt.
Falls jemand Bugs findet immer her damit habs noch nicht sonderlich
ausgiebig getestet.

von Matthias Asselborn (Gast)


Lesenswert?

vielen dank meine erste arbeit wird sein das ganze auf LED s auszugeben
!!!!

gruß matthias

von Matthias Asselborn (Gast)


Lesenswert?

kleine frage wo häng ich s display dran ? welche pins ?

von ape (Gast)


Lesenswert?

Ist in der ks0108.h defined.

Im Moment hängen die 8 Datenlaitungen an PORTC, die steuerpins wie
folgt:
D/I: PC0
R/W: PC1
EN:  PC2
CS1: PC3
CS2: PC4

Das Testprogramm ist fürn mega128, müsste aber auch auf jedem anderen
mega laufen, muss man halt nur das makefile anpassen und rebuilden.

Ich hab übrigens beim Schaltplan für den FFT AVR den Programmier- und
den TWI-Stecker vergessen, aber das sollte ja wohl jeder hinbekommen :)
Die TWI-Pullups nicht zu groß wählen, da der Bus mit recht hoher
Geschwindigkeit läuft. 3k3 funktionieren bei mir wunderbar.

von Matthias Asselborn (Gast)


Lesenswert?

gingen 10 er auch ? di hab ich grad noc rumfahren aber ich beende für
heute evtl morgen abend andere besorgen

von ape (Gast)


Lesenswert?

10er?
es sollte jedenfalls alles vom mega8 an gehen. muss halt nur genug pins
für das LCD und ne TWI Schnittstelle haben

von Matthias Asselborn (Gast)


Lesenswert?

nein ich meinte 10k ;-)

von ape (Gast)


Lesenswert?

ah ok :)
fürs TWI? naja probieren kost nichts aber ich schätze die sind zu groß

von ape (Gast)


Lesenswert?

Man kommt übrigens auch ohne die negative Versorgungsspannung am MAX29x
aus. Dafür grounded man V- und legt den GND-Pin über einen
Spannungsteiler aus 2 10k Widerständen auf VCC/2. Die Konstruktion mit
dem OpAmp um die Amplitude zu erhöhen funktioniert dann zwar nicht mehr
ist aber auch gar nicht mehr nötig, da er mit der niedrigeren Spannung
weniger rauscht (vielleicht war auch einfach nur meine negative
Spannung nicht ganz sauber)

von Matthias Asselborn (Gast)


Lesenswert?

ich habe mal eine frage !

der eigentliche fft ist doch in assembler ?
das display dann in c oder verstehe ich da was falsch ?

von ape (Gast)


Lesenswert?

ja
aber FFT und Display laufen ja auch auf 2 verschiedenen AVRs also ist
das ja auch gar kein Problem. Wenn man sich die Mühe machen würde die
FFT in asm Library umzubauen könnte man das auch direkt in einem C
Programm verwenden.

von Matthias Asselborn (Gast)


Lesenswert?

gut das ist mir bewusst
also lasse ich den atmega 32 auf jedenfall bestehen und ändere nur den
c source um ! auf led s !
ja bald sind ferien da hab ich aber auch nicht wirklich zeit
anfang studium !

von philip (Gast)


Lesenswert?

dumme frage,

aber könnte einer mal ne ganze einfache rutine in c posten,
mit der man eine frequenz auf LEDs ausgeben kann ? damit ich mir mal
ein bild machen kann, und es dann erweitern kann... komme so nicht gnaz
klar...

währ net wenn hier einer mal was posten würde was er schon hinbekommen
hat....

gruß philip

von Matthias Asselborn (Gast)


Lesenswert?

ich habe mal ein VU meter geproggt
aber das mit nur EINER frequenz wird schwierig weil man die gesamte fft
auseinandernehmen müsste
bzw funktionierend wie ein bandpass proggen
ich habe nun zwar eine woche ferien
aber nicht die zeit die fft auf diverse frequenzen aufzuspalten !
wobei ich mir erst mal intensiv den code anguggen müsste

von philip (Gast)


Lesenswert?

funzn das mit einer frequent scho gut ? wenn ja schicks mir doch bitte
einfach per icq weisst ja wo du mich findest ;)

von Benedikt (Gast)


Lesenswert?

@philip
Willst du ein VU Meter ? Oder warum brauchst du die Anzeige einer
Frequenz ?


PS: Bald gibt es ein paar Fotos von meinem 32x16 Spektrum Analyser. Die
Software ist schon fertig, die Ansteuerung auch, ich warte nur noch auf
die Lochrasterplatinen von Reichelt für die LED Matrix: gestern kam die
Email: voraussichtlicht ab 25.02.05 lieferbar...

von Matthias Asselborn (Gast)


Lesenswert?

hallo dürfte ich den Code und die Pläne mal sehen

von Matthias Asselborn (Gast)


Lesenswert?

apropos hätte ich noch 16x16 er matritzen ( inkl widerstände und
transistoren) alles auf der platine günstig abzugeben ! da ich sie
nicht mehr benötige !

von Matthias Asselborn (Gast)


Lesenswert?

marke samsung

von Matthias Asselborn (Gast)


Lesenswert?

3 fabrig
grün geld rot

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

>apropos hätte ich noch 16x16 er matritzen ( inkl widerstände und
>transistoren) alles auf der platine günstig abzugeben ! da ich sie
>nicht mehr benötige !

Hättest du das gesagt, bevor ich mir die 512 LEDs bestellt hätte, wärst
du das Ding jetzt warscheinlich los. Vermutlich kommen die LEDs heute,
dann kann ich die LED Matrix aufbauen. Diese verhält sich wie ein
primitves LCD mit zwei Befehlen: Daten übertragen und Adresszähler
resetten. Immerhin ist das Display grafikfähig.


Einen wirklichen Plan habe ich noch nicht, kommt aber noch wenn alles
läuft. 1/32 Mux ist zu viel, das wird zu dunkel. Daher fahre ich einen
2x 1/16 Mux, d.h. Spalte 1 und 17 sind gleichzeitig an, Zeile 2 und 18
usw.
Die 2x 16 Zeilensignale erzeuge ich über 4094 Schieberegister und
Konstantstromquellen die je ca. 150mA liefern. Damit kommer ich auf
rund 9mA mittleren Strom pro LED. Insgesamt zieht die Schaltung rund 5A
wenn alle LEDs an sind. Die Spalten werden über P Kanal MOSFETs
geschaltet, angesteuert von einem 4 zu 16 Dekoder. Ein NE555 arbeitet
als Impulsausfalldetektor und schaltet nach 5ms ohne Impulse die
Ausgangstreiber ab (falls der uC abstürzt geht die gerade aktive LED
Spalte bei 150mA sonst schnell in Rauch auf...)

von Matthias Asselborn (Gast)


Lesenswert?

da hätten dann 2 module gereicht...
meinem 1. analyzer baute ich auch mit 2 mux auf nur der atmel schaltete
....
kein ne555

ja wenn du weiter kommst bitte ich dich mal um einen schaltplan !
wenn sich das machen lässt !

von ape (Gast)


Lesenswert?

Ich hab mal nochmal nach Filtern geguckt.
Es gibt auch von anderen Herstellern Switched Capacitor Filter aber ich
hab keine weiteren 8. Ordnung gefunden. Von TI gibts den TLC04. Dieser
ist 4. Ordnung und man kann ihn bei Farnell kaufen (Als Student auch in
geringen Stückzahlen :)) Und wenn 4th Order nicht reicht könnte man
notfalls ja einfach zwei Filter hintereinander hängen.

von philip (Gast)


Lesenswert?

nein ich brauche nur ein reines UV !!
ich brauche nen eagel plan + code für nen atmel mega,
das ganze brauche ich zusetzlich fürn kleines neben projekt,
ich wills über avr machen, da die ganzen ics dafür mist sind..

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Nach 5 Stunden Arbeit (ich hasse LEDs, es ist echt eine Scheißarbeit 512
LEDs anzulöten, die Drähte unterschiedlich lang zu kürzen und die Zeilen
und Spalten zu verdrahten) ist ein Teil der LED Anzeige fertig. Leider
fehlt mir eine Platine um alles fertig zu bauen (hoffentlich geht das
diesmal schneller als beim VS1011: Das war der absolute Negativ Rekord
von Reichelt: Über 4 Monate Lieferzeit !).
Daher ist nur eine 16x16 Matrixhälfte verdrahtet.

@philip
http://mitglied.lycos.de/bk4/AVRvu.htm

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch ein kleiner Test: Da ich noch irgendeinen Fehler im Code habe,
kann ich im Moment nur die obere Hälfte anzeigen lassen (ca. 2-10kHz)
Leider setzt in diesem Bereich auch der Tiefpass der Kamera ein, ich
denke man sieht aber deutlich, dass es funktioniert und wirklich gut
aussieht (im Vergleich zu einem LCD)

von Matthias Asselborn (Gast)


Lesenswert?

@ komplettes VU

ich habe wie gesagt eines in C programmiert ausgerichtet auf einen
AT MEGA 8535

filter habe ich mich schon viel umgesehen die für einen studenten auch
bezahlbar sind
es gab da mal ganz früher 4 fach filter pro ic marke weis ich nicht
mehr ich glaube aber von AD wobei das stück 10 euro gekostet hätte....
also von daher lieber selbst einen zusammen bauen

@Benedikt

dürfte ich dann deinen Code und Plan wenn er fertig ist betrachten ?

von Philip (Gast)


Lesenswert?

das eine UV von der seite ist igenau was ich suche,
nur leider ist die softwar net offen,
ich sehe dort nur ne hex,
keine c oder asm oder bas datei... :(

ich hätte gerne was offenen, um es ein wenig
umbauen zu können, und ich brauche ein paar mehr
kanäle... naja kann ja mehrere avrs nehmen
habe 3 mega.. hier liegen...

von Matthias Asselborn (Gast)


Lesenswert?

yo müsste mein raid mobilisieren denn da liegt der code drauf ich
habe ja nun ferien da mach ich das mal !
da prinzip beruht auf ablesen des ADC s umrechnen und ausgeben !
in genauen dezibel werten ! wie seiht das mit den db aus
bei deinem  @Benedikt ??

von ape (Gast)


Angehängte Dateien:

Lesenswert?

@benedikt:
schick schick
aber mir gefällt die LCD Optik besser, nich so aufdringlich :P naja
über Geschmack lässt sich ja nich streiten.

Hab auch nochmal nen kleines Video über den Frequenzgang gemacht.
Diesmal sogar mit Ton, aber leider nach wie vor mieser Bildqualität :/
In der Mitte sieht man den Übergang der beiden FFTs.

http://www.apetech.de/download/test.avi

Daher im Anhang auch nochmal nen Foto wies mit hoher Auflösung aussieht
(Das ganze ist jetzt in meinem Verstärker integriert)

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

@Philip

Hier der Code für den VU (eigentlich PPM) Meter.

von Matthias Asselborn (Gast)


Lesenswert?

Hallo Benedikt hast du irgendeine Scalierung bei den Led s
nach Db ?
oder lässt sich die nachträglich programmieren ?

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Meinst du bei dem VU Meter ? Ist eigentlich egal, beim Spektrum Analyser
ist es genau dasselbe.
Ich messe das Signal mit 10bit, mache eine Gleichrichtung und bestimme
den Spitzenwert, der verdoppelt wird. Das ergibt einen Bereich von
0-1023. Daraus wird die Wurzel gezogen, was 0-31 ergibt, genau passend
für die LEDs.
Es ist also eine pseudologarithmische Anzeige.
Der LED Balken stimmt genau mit der Anzeige bei mir am PC überein.
Also 100% Lautstärke (bei 1khz Sinus) ergibt vollen Ausschlag (31
LEDs).
50% ergibt 15 LED usw.

Ich habe mal den Schaltplan der LED Matrix angefügt. Es ist jeweils ein
Zeilen und Spaltentreiber eingezeichnet, insgesamt sind es 16 Spalten
und 2x 16 Zeilentreiber.

Als Spannungsversorgung verwende ich im Moment noch einen 7805, aber
wenn ich mehr als 50% der LEDs einschalte fängt alles an zu flackern,
da die Spannung zusammenbricht. Enweder verwende ich einen
modifizierten LM2574 Schaltregler (der 5A mühelos schafft) oder
irgendein billiges Schaltnetzteil von Pollin.

von Matthias Asselborn (Gast)


Lesenswert?

welchen code hast du auf dem µC drauf, der für die Zeilen und Spalten
verantwortlich ist
lässt sich dieser an ein 28x12 er Analyzer anpassen bzw gibts du ihn
heraus ?
denn bei meinen Analyzer wäre schon die Matrix ( 2 x 14 x 12 leds
fertig )

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist der Code für den LED Displaycontroller.
Über den UART werden die Grafikdaten mit 115200Baud empfangen und in
den Speicher geschrieben. Jede Spalte belegt 2 Bytes, insgesamt werden
also 64Bytes benötigt.
Der FFT uC sendet die Daten etwas verschachtelt, und zwar zuerst die
oberen 8 LEDs (32x, da 32 Zeilen) und dann die unteren 8 LEDs. Daher
wird in der UART Interrupt Routine der Zähler zweimal erhöht.
Durch einen externen Interrupt (Sync Signal) wird der Zähler wieder auf
0 gesetzt. Darauf kann man eigentlich verzichten.
Im Timer Interrupt werden 2x16bit seriell ausgegeben.

von philip (Gast)


Lesenswert?

kannst du auch mal musik drüber laufen lassen?
mich würde mal interessieren wie schnell das ganze ist,

gibt eventull auch eagel layouts ? für 32x16

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Ein Layout habe ich nich erstellt, da dieses Doppelseitig ausgefallen
wäre (Zeilen und Spalten kreuzen sich), daher doch lieber
Lochrasterplatine.

Im Anhang ein Video mit Musik. Falls jemand ein anderes Lied wünscht,
noch habe ich die Kamera aufgebaut.
Die Anzeige ist auf jedenfall schnell genug. Selbst die kürzesten
Geräusche erkennt man deutlich.

von Philip (Gast)


Lesenswert?

sind das jetzt alle leds oder kommen noch welchd dazu?

von Matthias Asselborn (Gast)


Lesenswert?

ich werde mich nun hinsetzen ein layout machen die matrix ist ja schon
fertig bei mir !
lasse es bei nem bulgarischen kumpel ätzen !
werde auch den code von 16x16 auf 12x14 ändern da ich eine 12x28 matrix
habe / benötige :-)

von Philip (Gast)


Lesenswert?

ich mache nun die front blende für 32x16 LEDs fertig und werde mich dann

hinsetzen und in eagel ein layout machen, für das teil, habe nochn paar
rück fragen bezüglich des layouts... das werde ich die tage dann mal
fragen... wegen der matrix....

wenn ihr wollt lasse ich für euch mit äzen lasse wie Matthias  in
bulgarien ätzen...

von Matthias Asselborn (Gast)


Lesenswert?

benedikt welche zahlenwerte muss ich verändern um den code von dir
auf eine 14 spalten 12 zeilen matrix umzuändern
zuvor 16x16 bei dir

von Benedikt (Gast)


Lesenswert?

Ich werde es mal ändern und morgen eine 28x12 Version hochladen.

von Matthias Asselborn (Gast)


Lesenswert?

vielen lieben dank also 12 led s pro spalte und 28 spalten !

frage lassen sich die frequenzen auch bestimen ?
bzw die db werte ?
wo ändere ich dies ?

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Das Programm ist nur die Anzeige.
Die Frequenzen und die Pegel werden auf dem anderen uC bestimmt.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Und hier das FFT Programm (noch als 32er Version mit 0-10kHz
Frequenzen)

PS: Beim anderen Programm muss im Timer Interrupt die Anzahl auch auf
die LED Anzahl begrenzt werden:

Timer 0 Interrupt:
clr P3.2
  inc MuxPos
  a=MuxPos
  if a=#LEDs then
    MuxPos=#0
    a=#0
  end if

von Matthias Asselborn (Gast)


Lesenswert?

ist nun die  ledmuxlog28.a51 auf 28 Spalten gestellt ?
da ich immer noch eine 8 bzw 16 lese ?
kannst du mir die Stellen zeigen wo dies umgestellt wird
eine fft mit 0-20khz gab es doch hier auch mal ?

von Benedikt (Gast)


Lesenswert?

Die 16 ist falsch, hier muss LEDs stehen
Die 8 kommt von den 8bit pro 4094.
28x12 ist nicht möglich, sondern nur 28x16, aber da kannst du ja
einfach 4 Pins unbenutzt lassen.

20kHz ist mit einem AVR nur bedingt möglich, da der ADC dies nicht
schafft. Mit einem externen ADC sollte aber sogar ein Bereich 0-1MHz
möglich sein.

von Matthias Asselborn (Gast)


Lesenswert?

also



Timer 0 Interrupt:
clr P3.2
  inc MuxPos
  a=MuxPos
  if a=#16 then
    MuxPos=#0
    a=#0


die Zeile if a=#16 then muss also if a=#LEDs then
heissen ?


  end if
  rl a
  setb acc.6
  push acc
  add a, #LEDs
  r0=a        ;Rechte Hälfte
  inc r0
  a= @r0
  for r7=#8


was bedeuten die nummer 8 ?
da ich ja 2x 14 habe (28)

                clr Clk
    rlc a
    Dat=c
    nop
    setb Clk
  next
  dec r0
  a= @r0
  for r7=#8
    clr Clk
    rlc a
    Dat=c
    nop
    setb Clk
  next

  pop acc
  r0=a        ;Linke Hälfte
  inc r0
  a= @r0
  for r7=#8
    clr Clk
    rlc a
    Dat=c
    nop
    setb Clk
  next
  dec r0
  a= @r0
  for r7=#8
    clr Clk
    rlc a
    Dat=c
    nop
    setb Clk
  next

  clr OE
  a=MuxPos
  swap a
  P1=a
  setb Latch
  nop
  clr Latch
  nop
  setb OE
  setb P3.2
reti


gruß matthias

von Matthias Asselborn (Gast)


Lesenswert?

nehm ich dann 2 avrs ? @20khz ?

von Matthias Asselborn (Gast)


Lesenswert?

was ist der U1 IC auf deinem Schaltbild ?
wo gehen die nicht verdrahteten Transistoren hin ?
ist die FFT nun bis 20khz oder nur bis 10khz ?

von Matthias Asselborn (Gast)


Lesenswert?

transistoren sind klar nun ... die fft nun auch geht ja nur bis 10 khz
ähm wie könnte ich die samplingfrequenz erhöhen (ums doppelte)
so dass es mir 22khz anzeigt ?

von Matthias Asselborn (Gast)


Lesenswert?

mit nem ADC ?

von Matthias Asselborn (Gast)


Lesenswert?

also 10khz ist sehr übel um das Teil nicht nur als Schaustellstück
einzusetzen und die 170hz über 5k bzw unter 5k ne andere Einteilung
der Frequenzen ist mir auch viel zu ungenau
mein Bandpass Analyzer mit der 1/3 Oct Teilung, festen db Werten
nach Studionorm bleibt somit bestehen

von Philip (Gast)


Lesenswert?

jupp, werd meinen nun auch mit bandpässen baue is wohl doch besser....

oder gibts n möglichkeit das teil auf 20-22khz zu bekommen ?

von Benedikt (Gast)


Lesenswert?

Ich habe es gestern mal gestestet:
mega8 @ 18,432MHz, ADC Teiler auf 32, ergibt 44,2kHz Samplerate. Ist
zwar außerhalb der Spezifikationen, aber es geht. Das Rauschen ist ein
klein wenig höher, aber das Ergebnis ist noch brauchbar.
Wenn ich jetzt noch irgendwo einen Switched Capacitor Filter auftreibe
und im unteren Bereich die Auflösung erhöhe, dann lasse ich es
eventuell sogar auf 44kHz Samplerate.

von Benedikt (Gast)


Lesenswert?

@Matthias Asselborn
Wie steil sind eigentlich die Bandpässe in deinem Spektrum Analyser ?
Auf den alten Fotos von der ersten Version sieht man eine Frequenz, die
aber fast auf der halben Anzeige mit abfallenden Pegeln erscheint.
Dies war eigentlich der Hauptgrund wiso ich mich für FFT entschieden
habe: Hier erscheint ein sauberer Sinus auf max 2-3 Balken, aber nicht
weiter.

von Benedikt (Gast)


Lesenswert?

So, jetzt läuft man Analyser mit 0-22kHz Frequenzbereich und 43Hz
Auflösung bei niedrigen Frequenzen. Jetzt brauche ich nur noch einen
Switched Capacitor Filter oder einen anderen, steilen Tiefpass Filter
mit 5 bis 8db, für 2kHz und 20kHz.

von Matthias Asselborn (Gast)


Lesenswert?

das wäre ja dann akzeptabler !
@Benedikt

könntest du mir nun mal den fft code
überreichen dann baue ich die fft auf
und danach das display
welchen ad hast du verwendet ?

bei meinem bandpass wenn ich eine sinus anlege
(beim kalibrieren ) hatte ich einen balken  weiter nichts
die bilder die du gesehen hast waren halt mit sound !
also nicht nur eine frequenz sondern ein kompletes lied !

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Könntest du mal die Schaltung eines Bandpassfilters verraten ?
Wenn es bei einem Sinuston wirklich nur ein Balken aufleuchtet, dann
muss der Filter ja ziemlich steil sein.

Der FFT Code ist jetzt sehr ähnlich dem von ape.
Als ADC verwende ich den internen des mega8.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch ein Video zu der jetztigen Version.
Bei den Bässen sieht man gut, dass die Auflösung im unteren Bereich
deutlich höher ist als vorher, vor allem wenn die Balken so schön nach
links wandlern...

von Matthias Asselborn (Gast)


Lesenswert?

verrate ich gerne ich entnahm ihn dem Spektrum Analyzer der
zu meinem Geburtsjahr im Elektor erschienen ist !
es kann aber sein, dass ein paar leds noch flackern wenn ich ein signal
draufgebe da jeder günstige sinus generator vor allem die hardware
abhängigen vom pc verschieden teils ungenau sind

es ist halt schade bei dir dass nur ein paar led balken fpr die tiefen
töne verantwortlich sind
eine 1/3 oct teilung wäre da angemessener....
z.b.

31,5 40 50 63 80 10 125 usw...
da hast du ja nur 40, 80 und 120 von ?

verrate du mir mal deinen kompletten schaltplan ! bitte !
inklusive ad verdrahtungen usw...
was der u1 ist... das ich das mal nachbauen kann und weiterwentwickeln
evtl neue einteilungen usw...

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

das ist z.b. ganz normaler sound

von Matthias Asselborn (Gast)


Lesenswert?

und das die filter !

bitte benedikt mach mir doch mal n schaltplan ! für alles was ich
brauche !
den rest krieg ich dann schon selber hin !
aber ich bräuchte mal n schönen plan !

von philip (Gast)


Lesenswert?

kannst du mal nen sinus ton von 10-22khz düber jagen ?

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

U1 ist ein NE555.
Dieser arbeitet als retriggerbares Monoflop, das bei jeder Low-High
Flanke am Eingang den Spaltentreiber für etwa 5ms aktiviert. Hängt sich
der uC auf, schaltet alles ab. Bei meiner letzten Mux Schaltung sind mir
die LEDs halb abgebrannt als das passiert ist... Man lernt eben aus
seinen Fehlern.

Ich sehe gerade, in dem Plan ist ein Fehler:
Die Adressen für den Spaltendekoder IC2 sind nicht an P1.0-P1.3 sondern
an P1.4 bis P1.7 angeschlossen, da P1.0 und P1.1 nur Open Collektor sind
und ich mir aus Faulheit die Pullups gespart habe.

Der Schaltplan mit dem mega8 ist vorläufig. Entweder bekomme ich
irgendwo ein MAX29x oder ich werde einen steilen Tiefpass (20db oder
steiler) verwenden und diesen an ADC1 anschließen. Die normalen Signale
(0-22kHz) gehen dann an ADC0, die LF (0-1,5kHz) an ADC0

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Sinus 10Hz-20kHz
Rechts fehlt einiges, da ich nicht ausreichend Platinen da hatte um 32
Spalten aufzubauen. Im Momet habe ich nur 22 Spalten.
Die Störungen im unteren Frequenzbereich kommen von der hochohmigen
Leitung quer durch mein Zimmer.

von Michael (ein anderer) (Gast)


Lesenswert?

@Benedikt:

Sieht ja schon mal gut aus. Ich habe diesen Thread nicht gelesen, es
sieht aber so aus, als ob Du im höheren Frequenzbereich
Aliasing-Effekte hast. Man sieht schön, wie es die hohen Frequenzen
reinspiegelt.

von Benedikt (Gast)


Lesenswert?

Ja, das ist ein Problem bei dem ganzen.
Da ich aber keinen Switched Capacitor Filter (MAX29x oder MAX740x)
bekomme, muss ich mir demnächst wohl einen steilen 1,5kHz Tiefpass
bauen, dann sind die ganzen Störungen weg.
Ich sample mit 5,5kS/s, macht also 2,8kHz Bandbreite. 40db Abschwächung
reichen mir, also brauchte ich Filter das 1,3kHz weniger als 1db dämpft,
und 4,3kHz mit mindestens 40db dämpft. Also etwas mehr als 20db/Oktave
sollte reichen.

Hat jemand schonmal mit einem elliptischen Tiefpass gearbeitet ? Dieser
ist ja im Grenzbereich sehr steil, daher sollte ich mit einem DualOpamp
hinkommen ?
Oder kennt jemand eine andere (nicht zu komplizierte Schaltung) die den
geforderten Übertragungsbereich hat ?

von Michael (ein anderer) (Gast)


Lesenswert?

@Benedikt:

Wenn Du mit 5,5 kHz samplest, muss der Filter doch bei 2,75k kHZ
absolut dicht sein, damit Du keine Aliasing Effekte bekommst?!

Da Deine Anforderung im Durchlassbereich ja nicht so kritisch ist,
würde dort auch etwas Welligkeit wohl nicht schaden.

Also würde ein 4-poliger Tschebyschedd-Filter mit 2dB Welligkeit gerade
so hinkommen. Der würde die 40dB gerade so erreichen.

Dafür bräuchtest Du einen Dual-Op-Amp, 8 Widerstände und 4
Kodensatoren.

Wenn Du ihn steiler haben möchtest, könntest Du mit einem Quad-Op-Amp
einen 8-poligen Filter bauen, der käme auf über 80dB (erste Oktave).

Hast Du das Buch "Art of Electronic" zu deutsch "Hohe Schule der
Elektronik"? Da sind super Entwurfstabellen drin mit denen Du so ein
Filter ganz einfach aufbauen kannst.

von Michael (ein anderer) (Gast)


Lesenswert?

Ich habe die betreffenden Seiten mal gescannt. Mal sehen ob ich es hier
als Anhang reinstellen kann (ist groß)...

von Michael (ein anderer) (Gast)


Lesenswert?

Aha, hat also nicht funktioniert. Sag' mal Deine Email-Adresse und ich
schicke es Dir per Mail (3MB).

von Benedikt (Gast)


Lesenswert?

Danke ! (Emailadresse: benedikt83 ät gmx punkt net)

Ich bin schon die ganze Zeit am suchen und simulieren, komme aber nicht
über ein Filter 4. Ordnung hinaus.

Der große Frequenzbereich kommt daher, dass ich nur Frequenzen
unterhalb von 1,3kHz verwende. Die Frequenzen oberhalb von 2,8kHz
erscheinen gespiegelt, so dass sie bis 2,8kHz + (2,8kHz-1,3kHz)=4,3kHz
nicht stören.

von Michael (ein anderer) (Gast)


Lesenswert?

Du hast Post.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Diese Schaltung sollte meine Anforderungen erfüllen:
Kaum einen Überschwinger beim Frequenzgang und insgesamt -38db bei den
4,3kHz gegenüber dem DC Pegel. Der Frequenzganz ist bis 1,3kHz
annähernd linear.

von Michael (ein anderer) (Gast)


Lesenswert?

Naja, das sind ja einfach zwei gleiche Tiefpässe hintereinander. Das
sollte auch besser gehen. Einfach nur andere Werte für die Cs und Rs
verwenden. Die Bauteilanzahl bleibt gleich.

Hast Du meine Mail bekommen? Da ist das doch schön erklärt.

Aber wie Du es letztendlich machst, ist Deine Sache.

von Benedikt (Gast)


Lesenswert?

>Naja, das sind ja einfach zwei gleiche Tiefpässe hintereinander. Das
>sollte auch besser gehen. Einfach nur andere Werte für die Cs und Rs
>verwenden. Die Bauteilanzahl bleibt gleich.

Dann habe ich wohl die Beschreibung nicht so ganz verstanden.
Wie berechne ich aus dem K und Fn Wert aus Tabelle 5.2 die Rs und Cs ?

Ich habe die Grundschaltung verwendet und so lange in einer Simulation
die Werte angepasst, bis ich einen passenden Signalverlauf hatte.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Der Filter könnte noch etwas steiler sein, denn dann könnte ich die
Trennfrequenz ein klein wenig höher legen. Man sieht kurz den
Amplitudenabfall, ehe auf die 44kS/s FFT Daten umgeschaltet wird. Dann
sieht man etwas später die unterste LED Reihe nochmal kurz lang links
laufen. Das sind die letzten Reste, die der Tiefpass nicht schafft. Die
hohen Frequenzen sind da, wurden aber vom Audiocodec geschluckt.
Aber ansonsten bin ich damit jetzt ziemlich zufrieden. Jetzt muss ich
nur noch warten bis Reichelt die Platinen liefert, damit ich die
fehlenden 160 LEDs rechts anbauen kann. Im Moment geht die Anzeige bis
etwa 3,5kHz.

von Michael (ein anderer) (Gast)


Lesenswert?

Du willst einen 4-Pol-Tschebyscheff-Filter bauen. Du brauchst zwei OPVs
und Widerstände und Kondensatoren wie in Deiner Zeichnung (zwei
Sektionen).

Seite 314, Abschnitt "Bessel- und Tschebyscheff-Tiefpaßfilter":

"Allerdings sehen die RC-Produkte für die einzelnen_ _Sektionen im
Vergleich zum Butterworth-Filter anders aus, und sie müssen mit dem
Normalisierungsfaktor_ _fn (...) nach RC=1/(2*pi*fn*fc) skalliert
werden."

Also:

Bis 1300 Herz soll der Filter möglichst linear sein, dann soll er
anfangen zu sperren. Verwenden wir mal einen 4-Pol-Tschebyscheff-Filter
mit 0,5dB Welligkeit.

Zwei Sektionen brauchen wir. Die Faktoren fn gibt's in der Tabelle 5.2
auf Seite 313.

Fn für die erste Sektion 0,597 und für die zweite Sektion 1,031.

Nun die benötigten RC-Produkte für beide Sektionen ausrechnen:

1. Sektion: RC = 1 / (2  pi  0,597 * 1300) = 0,0002051

2. Sektion: RC = 1 / (2  pi  1,031 * 1300) = 0,0001187

Nun müssen wir passenden Kondensatoren und Widerstände "wählen". Da
muss man ein wenig improvisieren. Probieren wir mal 100 Kiloohm für die
1. Sektion:

R*C=0,0002051 --> C=0,0002051/R = 0,0002051/100000 = 2,051 nF

So einen Kondensator gibt's nicht, der nächste in der Nähe wäre 2,2nF.
Dann rechnen wir für 2,2 nF mal R aus:

R*C=0,0002051 --> R=0,0002051/C = 93,2 Kiloohm.

Das sieht schon ganz gut aus. Nächster lieferbarer Widerstand wäre
93,1 Kiloohm (Metallschicht, 1%, E96 Reihe).

D.h. die drei Widerstände R1, R2 und R für die erste Sektion wären eben
93,1 Kiloohm. Fehlt nur noch der vierte Widerstand (K-1)R:

Rk = (K-1)*R = (1,582 - 1) * 93,2 Kilohm = 54,3 Kiloohm.

Der nächste lieferbare Wert wäre 54,9 Kilo oder 53,6 Kiloohm. Da liegen
wir ziemlich in der Mitte.

Nun haben wir alle Werte für die erste Sektion. Die zweite Sektion geht
genau so, nur eben mit anderen Werte für die RC Kombination und für den
K-Faktor, der in der zweiten Sektion in diesem Fall 2,66 ist (siehe
Tabelle).

So weit alles verstanden?  Die zweite Sektion musst Du Dir schon selbst
ausrechnen. Ich hoffe ich habe keinen Fehler in meiner Berechnungen.

Wenn Du die passenden Widerstände nicht hast, wähle einfach die am
besten passenden. Allerdings nimmt die Qualität des Filters dann ab,
z.B. wird die Steilheit flacher, Welligkeit im Durchlassbereich höher
etc.

Aber da Du ja eh alles in Spice oder so simulierst, kannst Du die
Auswirkungen zwischen theoretischen und realen Werten ja leicht
überprüfen.

Viel Spaß mit der zweiten Sektion! ;-)

von Benedikt (Gast)


Lesenswert?

Nochmals Danke !
Jetzt habe ichs verstanden.

Ich glaube da werde ich mir erstmal ein kleines Prog schreiben, das mir
die ganzen Werte berechnet...

von ape (Gast)


Lesenswert?

Hab via Google das hier gefunden:
http://www.web-ee.com/primers/files/slod006b.pdf

Tschebyscheff-Filter sind so um Seite 300. habs mir noch nich näher
angesehen wie hilfreich das is die berechnungen sehen auf den ersten
Blick recht kompliziert aus :)

von Björn (Gast)


Lesenswert?


von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Ja, das ist genau das richtige.

Jetzt ist der Filter so wie ich ihn wollte: Unterhalb von 1,7kHz ist
das Signal absolut linear (+/-1db) und bei 4kHz hat es bereits -38db.
Man kann problemlos steile Filter bauen, aber die meisten haben einen
für solche Anwendungen einen zu großen Übergangsbereich.

Interessant ist auch, dass diese Filter eine DC Verstärkung von 1
haben. Die Filter aus dem Buch verwenden dagegen eine höhere
Verstärkung um eine Überhöhung kurz vor der Grenzfrequenz zu
verursachen. Bei den Filtern aus dem Program laufen die Opamps mit
einer Verstärkung von 1, was nicht nur zwei Widerstände spart, sondern
auch die Hilfsspannung, beim Betrieb an einer Unipolaren Spannung. Hier
wird die Überhöhung durch ungleiche Filterwiderstände und Kondensatoren
erreicht.

Das ist jetzt meine entgültige Hardware. Jetzt passe ich nur noch die
Software ein kleinwenig an, um einen möglichst gleitenden Übergang
zwischen den beiden FFTs zu erhalten.

von Matthias Asselborn (Gast)


Lesenswert?

ok dann mach ich mich mal an s werk @hardware
ist deine display hardware gleichgeblieben ?

von Benedikt (Gast)


Lesenswert?

Ja, das Display ist noch gleich.
Um das ganze nicht künstlich komplizierter zu machen, würde ich dir
empfehlen die 32x16 Version zu bauen, da ich für diese auch
Softwareupdates usw. machen werden.
Für ein 28x12 Display lässt du dann einfach die oberen 3 und unterste
LED Zeile weg (in der untersten habe ich ab und zu kleine Störungen
ohne Signal). Ebenso die rechten 4 LED Spalten.

Ein interssanter Nebeneffekt des Displays: Durch den UART als
Dateneingang kann kan es auch an einen PC hängen und Text oder Grafik
anzeigen.

In den nächsten Tagen werde ich das komplette Projekt mit Software,
Hardware, Beschreibung, Fotos usw. in die Codesammlung stellen.

von Matthias Asselborn (Gast)


Lesenswert?

alles klar !

könntest du mir noch sagen wie das mit den Freuquenzen ist ?
wo liegen die nun ? könnte man die an einen 1/3 oct Maßstab anpassen ?


welche Werte hast du nun zwischen den einzelnen Led s ?
in Volt oder Db !

von Benedikt (Gast)


Lesenswert?

Die Amplituden Werte für die einzelnen LEDs sind Wurzel aus der
Amplitude. Die db Werte kannst du daraus selbst berechnen.

Im Bereich unterhalb von etwa 1500Hz sind 43Hz Auflösung möglich,
darüber 346Hz.
Wenn du mir eine Tabelle erstellst, welche Frequenzen du für jeden
Balken haben möchtest (ausgehen von obigem Frequenzraster), dann kann
ich versuchen das zu realisieren.
Ich fasse dazu immer 1,2,3,4,6 oder 8 Werte zu einem Balken zusammen.

Hier mal ein Beispiel, wie ich es im Moment habe:
0-43
43-86
86-129
129-172
172-215
215-301
301-387
387-473
473-602
usw.

von Matthias Asselborn (Gast)


Lesenswert?

1/3oct wäre der Studiostandart der Spectrum Analyzer
angefangen mit (32 Band)

20   hz
25   hz
31,5 hz
40   hz
50   hz
63
80
100
125
160
200
250
315
400
500
635
800
1000
1250
1600
2000
2500
3150
4000
5000
6350
8000
10000
12000
16000
20000
22000

somit wäre deine Samplerate von 44khz optimal ausgenützt und du
bekommst ein vernünfiges Bild !


für meinen 28 er würde gelten :
die letze und ersten Beiden weglassen )

31,5 hz
40   hz
50   hz
63
80
100
125
160
200
250
315
400
500
635
800
1000
1250
1600
2000
2500
3150
4000
5000
6350
8000
10000
12000
16000 hz

wie meinst du das mit dem Frequenzraster ?
brauchst ne Formel wie die Werte entstehen ? kein Problem !

unter Terzbänder

http://fasae.ibpmw.uni-essen.de/ibpm/studium/Lehre/Schall/Buch/Tabellen.htm#tab01

anbei noch ne Datei
http://www.pas-products.com/bilder/ana_3.8.gif

von Benedikt (Gast)


Lesenswert?

Eine 64Punkt FFT teilt den gemessenen Frequenzbereich in 64 gleiche
Bereich. Bei 44kS/s erhält man einen Frequenzbereich bis 22000Hz.
Dieser wird in 64 Bereiche unterteilt, also je 346Hz breit.
Um eine höhere Auflösung bei den niedrigen Frequenzen zu erziehlen,
mache ich noch eine zweite Messung mit 5,5kS/s, was 43Hz Auflösung
ergibt. Daher sind die ersten paar Werte wie
31,5Hz
40Hz
50Hz usw. nicht möglich.

von Matthias Asselborn (Gast)


Lesenswert?

du hast doch 8 AD s am Atmel !
wenn du nun 8 mal teilst ?

also bei 0 - bis 22khz/8 ( 2,75 khz)
dann bei 2,75 - 5,5
         5,5  - 8,25
         8,25 - 11
         11   - 13,75
         13,75- 16,5
         16,5 - 19,25
         19,25- 22

oder ist der atmel da zu lahm ?

von Matthias Asselborn (Gast)


Lesenswert?

die ad s nacheinander auslesen und ausgeben
sollte doch möglich sein ?

von Matthias Asselborn (Gast)


Lesenswert?

möglich evtl schon aber die geschwindigkeit geht dann wieder den berg
runter ?

hmm hierbei frägt es sich das ganze nicht odch mit einem dsp aufzubauen
?!

von Benedikt (Gast)


Lesenswert?

Mit einem DSP ist das ganze kein Problem, aber ob der soviel billiger
wird als ein diskreter Analyser ?

So wie du dir das vorstellst mit den 8 ADCs geht es nicht:
Der Frequenzbereich beginnt immer bei 0Hz, was ja auch nicht weiter
schlimm ist, denn bei höheren Frequenzen reicht ja ein gröberes
Frequenzraster.

Mit einem entsprechend schnellen uC mit viel Rechenleistung und
ausreichend RAM (64kB sollten es schon sein) reicht auch eine einzelne
FFT. Am PC erreiche ich 1,5Hz Auflösung bei einem Frequenzbereich von
0-48kHz. Allerdings ist mein Athlon 64 dann voll ausgelastet, wenn er
das ganze flüssig darstellen soll...

von Matthias Asselborn (Gast)


Lesenswert?

so ein dsp von z.b. TI liegt bei ca 30 euro
welcher preislich im vergleich zu nem atmega128 steht
schon klar dass der frequ beriech immer bei 0 anfängt
ich dachte halt an mehrere kleine ( 4 stück ) ffts
mit genauerer auflösung
10 hz wären optimal ! die durch 4 große bandpassfilter
getrennt werden

würde der 128 er atmel nicht reichen für mehr power ?

von Matthias Asselborn (Gast)


Lesenswert?

was kostn z.b. der TMS320 von TI ?

von Matthias Asselborn (Gast)


Lesenswert?

ach herje die TMS320 Serie ist doch nicht so billig ............

aber gibt es denn keine DSPs für ca 30-50 euro ?
und nicht gleich 500+

von Matthias Asselborn (Gast)


Lesenswert?

welche von Zilog ?

von Matthias Asselborn (Gast)


Lesenswert?

ìch habe vor ein paar Jahren n VU Meter gebaut
mit nem ADSP2105 und nem 27C512
da kostete der DSP ca 10-20 DM
der dürfte auch von den Pins her reichen

von Matthias Asselborn (Gast)


Lesenswert?

is von Analog Devices lief auf 10 Mhz
ich denke diese Serie ist noch erschwinglich !

von Matthias Asselborn (Gast)


Lesenswert?

bzw bis 40 mhz liese sich organisieren

von Matthias Asselborn (Gast)


Lesenswert?

anbei ne preisliste von analog devices und TI


http://www.mercateo.com/c/108-8916/DSPs.html

von Matthias Asselborn (Gast)


Lesenswert?

nun hab ich einen gefunden !
der TI

TMS320LF2403APAGA

bringt 40 mhz 40 mips (denke das reicht)

für 30 euro

von Benedikt (Gast)


Lesenswert?

10MHz ist aber nicht das schnellste. So viel besser als die FFT mit
einem AVR wird das auch nicht...

Ich hab gerade den Digikey Katlog hier liegen:
TMS320 kostet so 10€ bis 200€

von Matthias Asselborn (Gast)


Lesenswert?

problem is der hat halt keine ram ....

der TMS320VC5402PA hätte für ca 15 euro nur 16k ram auf 40 mhz 40mips

aber für 43 euro gäbe es nen 34k ram und 64k ram mit 100 mhz mips für
80 euro

von Matthias Asselborn (Gast)


Lesenswert?

aktualisier mal Benedikt oben hab ich ja von 40mhz geschrieben !

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

komplette Übersicht

von Benedikt (Gast)


Lesenswert?

Hab noch ein paar TMS320BC52 hier liegen, wollte schonmal was mit
machen, aber ohne C Compiler oder Assembler und ohne irgendwelche
Anleitunge ist der Einstieg ziemlich unmöglich. Die Software kostet
irgendwas im 3 oder 4 stelligen Bereich wenn ich das richtig gelesen
habe, und eine Demoversion habe ich nirgends gefunden.

von Matthias Asselborn (Gast)


Lesenswert?

sag mir mal den name der soft
bzw für ein versuch könnten wir uns ja die soft..........organisieren
was möchtest du fü einen tms320bc52

von Benedikt (Gast)


Lesenswert?

Schau mal bei Pollin, da gibts ein Intel Web Meeting Set für 29,95€.
Da ist eine NTSC Farbkamera, eine ISA ISDN Karte, Kabel, Mikrofon und
eine Audio/Video Karte dabei. Auf dieser sind zwei schnelle 32kB SRAMs
als Speicher für den TMS320, ein Video ADC, ein AD8xxx Soundport (ne
simple Soundkarte) und noch andere schöne Sachen.
Welchen Zweck der TMS320 genau erfüllt kann ich nicht sagen, aber
irgendeine Videokompression anscheinend.

von Matthias Asselborn (Gast)


Lesenswert?

benedikt könntest du mir solch einen wie du hast verkaufen ?
wenn ja für wieviel - mein ich nun ernst !
das mit dem programmieren könnte ich hinbekommen !
bzw müsstest du nen neuen code machen ?

von Matthias Asselborn (Gast)


Lesenswert?

der compiler / die software sollte auch kein problem darstellen !

von Matthias Asselborn (Gast)


Lesenswert?

weil ich denke wenn schon n spec analyzer mit ner fft dann richtig !
und in 1/3 oct schritten

von Benedikt (Gast)


Lesenswert?

Die 2 oder 3 Stück die ich habe wollte ich eigentlich selbst verwenden
(irgenwann mal, wenn ich eine passende Platine für dieses 0,4mm Raster
habe.
Kauf dir doch die Karte bei Pollin, das ist einfacher. Den Rest kannst
du ja bei Ebay verkaufen.

Ich habe jetzt doch eine Software auf der TI Seite gefunden:
Unter DSP, Getting Startet, How Do I geht Going ?, C5000 Platform

Morgen früh werde ich dann hoffentlich die Software haben (227MB über
ISDN...)

von philip (Gast)


Lesenswert?

hmms wie komme ich an den chip ?

von Matthias Asselborn (Gast)


Lesenswert?

grundsätzliche Frage an dich Benedikt !
wenn das mit dem DSP klappt
wäre dann über eine 1/3 Oct Einteilung wie oben beschrieben
zu überlegen ?
denn dann wäre halt auch das Bild viel schöner ! weil im
Tiefpassbereich deutlich mehr Balken zu sehen wären !

von Björn (Gast)


Lesenswert?

Was is denn, wenn ihr ne Zoom-FFT macht?
Habt ihr euch schon mal die dsPic's von Microchip angeschaut?

Ach so noch was, die Auflösung der FFT entspricht doch delta_f = fa/N
....?

Gruß Björn

von Benedikt (Gast)


Lesenswert?

Wenn das mit dem DSP klappt, dann sind 10Hz Auflösung kein Problem.
Der langsamste aus der TMS320C52 Reihe schafft 20MHz. Da er in einem
Taktzyklus eine 16x16 Multiplikation macht, ist er um einiges schneller
als der AVR.
Eine 4096 Punkt FFT sollte daher kein Problem sein um 11Hz Auflösung zu
erhalten.

von Matthias Asselborn (Gast)


Lesenswert?

wäre ja sogar erschwinglich der DSP !!!!
bzw ein spezielles Programmierboarboard für den DSP macht mir grad noch
Sorgen !

von Benedikt (Gast)


Lesenswert?

So wie ich das verstanden habe, hat der DSP keinen ROM, sondern das
Programm wird bei jedem Programmstart neu in den SRAM geladen.
Dies scheint bei diesen DSP häufig der Fall zu sein: Auf meiner DVB-S
Karte sitzt auch irgendein TMS320 als MPEG Dekoder. Bei jedem
Programmstart wird ein ein paar 100kB großes Prgramm in den DSP
geladen.

von ChristianF (Gast)


Lesenswert?

hi,

wie Björn schon schrieb, schaut Euch mal die dsPICs von Microchip an.
Die können 30MIPS und haben auch eine MAC usw. - und die gibt's mit
Flash. Es ist eigentlich bei allen DSPs so, daß man einen externen
Flash o.ä. fürs Programm braucht.

512Pkte. sollten mit dem dsPIC gehen, so aus dem Bauch raus, bei mehr
wird der Speicher knapp.


cf

von Matthias Asselborn (Gast)


Lesenswert?

bei dem früher VU hatte ich einen 27C512 er Eprom dafür hergenommen
512 punkte wären auch ausreichend viel genauer jedoch die 4096

von Thorsten (Gast)


Lesenswert?

Hallo,

Microchip stellt für den dsPIC30F sogar eine optimierte FFT-Funktion
zum download bereit. Eine 256-Punkte FFT (komplex) soll in 635µs gehen.
C-Compiler und Simulator gibts kostenlos. Der C-Compiler soll angeblich
ne 60-Tage Demo sein, kann ich bisher allerdings nicht bestätigen. Hab
ihn schon länger auf dem Rechner, und er läuft immer noch. Hier der
Link, falls es interessiert:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010091

Gruß
Thorsten

von Benedikt (Gast)


Lesenswert?

512 Punkt sind nicht ausreichend, wenn man eine FFT macht:
Mit 1024 Punkten erreicht man 43Hz Auflösung, so wie ich es gerade
habe. Macht man dagegen wieder zwei FFTs (eine mit 44kS, die andere mit
5,5Ks) ist man schon bei 5Hz Auflösung !

von Matthias Asselborn (Gast)


Lesenswert?

wie sieht es denn mit der Soft aus Benedikt hast du was erreicht mit dem
DSP den du daheim hast ?
Frage @Benedikt
wie alt bist n du ?
ja 4096 wären schon super...
wie programmiert man denn den DSP ? mit nem Board ???
ich habe ihn damals über JTAG programmiert

von ChristianF (Gast)


Lesenswert?

Leute, folgendes:
Ihr wollt eine 4096Punkte fft machen. D.h. Ihr müßt 4096 Abtastwerte
vorhalten, die nehmen jeweils 16Bit in Anspruch.
Das sind alleine für die Abtastwerte 4096*16Bit=64kb.
Dazu kommen dann die Werte für die berechnete fft. Das sind komplexe
Ergebnisse, d.h. 32Bit pro Werte, also 128kb.
Das ist eine Menge Holz...

Ich hab mir da auch mal ein paar Gedanken drüber gemacht, so wie
Benedikt es vorschlägt ist es doch super, also das ganze aufteilen in
mehrere ffts. Habt Ihr Euch schon mal überlegt, einen digitalen Tiefpaß
zu realisieren um das "downsampling" von 44kHz auf 5,5kHz o.ä. zu
machen?

@Thorsten:
Hast Du eine eval board von dem dsPIC? Ich arbeite bei einer Firma mit
einem und würde gern privat ein bißchen was mit denen machen. Weiß aber
nicht, wo man ein Evaluation Board o.ä. bekommen kann. Letztes Jahr
während dem design contest hat man wohl recht günstig ein dsPICDEM1.1
bekommen können, das hab ich leider verpasst...
Kennst Du Bezugsquellen?

Gruß,

cf

von Thorsten (Gast)


Lesenswert?

@ChristianF

Leider habe ich kein Board. Ich bin kürzlich günstig an einige
dsPIC30F6014 gekommen und werde mir jetzt selbst ein Minimalboard auf
Lochrasterplatine bauen. Den dsPIC hab ich schon auf ne Adapterplatine
gelötet. Bisher habe ich nur mit dem Simulator gearbeitet aber was ich
da gesehen habe, hat mich schon sehr begeistert.

Gruß
Thorsten

von ChristianF (Gast)


Lesenswert?

Thorsten:
Ich find die Teile auch ok, aber 30MIPS sind halt nicht die Welt. Aber
es ist für einen Hobbyisten schon einiges...

Hast Du so ein ICD-2 Teil? Wo hast Du die Prozessoren herbekommen?
Was hast Du bezahlt? ;-)

Vielleicht versuche ich sogar mal, ein kleines Evaluation Board zu
layouten, aber ich hab sooo viele Pläne und wenig Zeit...


zu der FFT Geschichte:
Sorry, das sind natürlich nur 4096*16Bit=64kbit=8kb, also 24kb für
Eingangswerte+Ausgangswerte, wenn die Eingangswerte der fft rein reell
vorgehalten werden können. Ist immer noch sehr viel...

Gruß,

Christian

von Thorsten (Gast)


Lesenswert?

Ich hab mir einen ICD2 Clone gebaut, hängt mit nem FT232 an USB und
funktioniert sehr gut. Habe es allerdings nocht nicht mit den dsPICs
probiert, ich gehe aber davon aus das es tut denn bei den PIC10, PIC16
und PIC18 hat es auch problemlos funktioniert. Die Prozessoren habe ich
bei eBay erstanden, der Preis lag bei 6 Euro/St. incl. Versand. Hab die
dort eher zufällig entdeckt und sofort zugegriffen da ich schon seit
längerem überlege, mal was mit 16 Bittern zu machen. Und warum sollen
es nicht die dsPICs sein?

Thorsten

von ChristianF (Gast)


Lesenswert?

Hi Thorsten,

danke für die Infos, werde mir vielleicht auch so ein ICD 2 nachbauen,
ich nehme mal an mit google finde ich da genug...

Viel Spaß beim basteln,

Christian

von Thorsten (Gast)


Lesenswert?


von Benedikt (Gast)


Lesenswert?

Kann man die dsPICs mit der Schaltung programmieren ?
Wenn ja, dann bestell ich mir einem DSPIC30F2010-30I bei Digikey.
Kostet ca. 11$, also vermutlich so um die 10€
Das ist der einzige der ein DIP Gehäuse hat...

von Thorsten (Gast)


Lesenswert?

Ja, er ist ICSP-tauglich. Funktioniert im Prinzip genauso wie bei allen
anderen PICs auch. Bruachst nur ne 5-polige Stiftleiste vorsehen:
Pin 1 : /RESET
    2 : (VCC)
    3 : GND
    4 : Data
    5 : Clock

4-5 kann auch umgekehrt sein, weiß grad nicht. Hast du ein
Programmiergerät dafür?

von Benedikt (Gast)


Lesenswert?

Ich habe noch garnichts, daher frage ich ja, ob man den ICD2 Nachbau von
dem Link für den dsPIC verwenden kann.

Ich habe noch nie mit PICs gearbeitet, werde demnächst mit anfangen und
dann auch mal die dsPICs testen.

von Thorsten (Gast)


Lesenswert?

Ich kann dir morgen (oder vielleicht schon heute Abend) sagen, ob der
Nachbau funktioniert.

von Benedikt (Gast)


Lesenswert?

Ich habe gerade mal nachgeschaut:
Der dsPIC30F2010 hat nur 512Bytes SRAM. Für eine ordentliche FFT
bräuchte man schon den F6010, der hat 8192 Bytes, aber ist
warscheinlich nicht ganz billig.
An sich ist der AVR ja schnell genug, nur es fehlt an RAM.
d.h. man müsste auf den mega8515 mit externem 64kB 15ns SRAM umsteigen,
und einen externen ADC verwenden.

von ChristianF (Gast)


Lesenswert?

Benedikt:
Ich weiß, daß man den 6010 für um die 20$ kriegt, in Stückzahlen.
EInzelstücke werden vielleicht so 30Euro kosten, wenn man die überhaupt
irgendwo beziehen kann. Allerdings würd ich den 6014 nehmen, der hat
einen 12Bit-ADU gegenüber 10Bit beim 6010.

von Philip (Gast)


Lesenswert?

währ es net viel besser einfach 2 avrs zu nehmen ?

ein für tiefen ein für hochton bereich ?

von Matthias Asselborn (Gast)


Lesenswert?

geht ja nicht
hat Benedikt ja schon probiert !
eine FFT (Fast Furier Transformation)
digitalisiert ja nur ein Spektrum (von 0 - Samplerate/2 ) Herz
da kannst nicht irgendwo anfangen
deshalb ja der Filter vor der 2. FFT
und du hast immer Übergänge sei es z.b. in der Geschwindigkeit
deshalb wäre ein vernünftiger DSP doch schon viel besser
habe mit PICs auch noch nichts gemacht ich könnte sie aber in
einer Elektronikfirma programmieren

von Philip (Gast)


Lesenswert?

für uns alle ;) ?

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

im H-Mpeg (www.h-mpeg.de) Mp3 Player
wurde auch ein 8515 er atmel mit einem externen RAM verwendet

von Matthias Asselborn (Gast)


Lesenswert?

Autor: Philip
Datum: 09.02.2005 18:31
---------------------------------------------------------------------
für uns alle ;) ?


dumme Frage!
liese sich machen!

von ChristianF (Gast)


Lesenswert?

Hallo,

die gängigen DSPs muß man bei jedem einschalten neu programmieren.
Natürlich kann man sowas machen, aber man brauch noch einen externen
Speicher, einen 2. Prozessor der das Programm lädt o.ä. usw.

Das ist recht kompliziert...

Meiner bescheidenen Meinung nach kann man in der Tat mehrere Atmels
nehmen, z.B. einen mit f_s=44kHz für 5...22kHz (oder so) und einen
anderen mit f_s2=10kHz für 0...5kHz. Das Problem mit den
unterschiedlichen Geschwindigkeiten bekommt man ganz einfach dadurch in
den Griff, daß man bei dem Prozessor, der entsprechend "schneller"
ist, nicht jedes Ergebnis auf dem Display ausgibt/eine Mittelung
durchführt/usw., auf jeden Fall so, daß die Aktualisierungsintervalle
ähnlich sind.

Bei entsprechend schnellem Prozessor geht sowas auch mit einem,
versteht sich, aber so macht es Benedikt ja...

von Matthias Asselborn (Gast)


Lesenswert?

es geht ja nun darum andere Intervalle zu bekommen !
eine exaktere Teilung !
soe wie sie die Studioanalyzer haben (Terzbänder)
also 20 25 30,5 40 hz usw...
das ist ja grad das problem

von ChristianF (Gast)


Lesenswert?

und?
512Pkte bei f_s=10kHz macht immerhin 10000/512 Hz=20Hz Abstände. Das
müßte man sich halt mal ausrechnen und überlegen, wie man das so
aufteilen könnte...

von Benedikt (Gast)


Lesenswert?

Reicht denn die Lösung von ape nicht ?
Ein mega32 mit 2x 512 Punkt FFTs liefert im Bereich 0-2kHz eine
Auflösung von 10,8Hz und im Bereich bis 22kHz eine Auflösung von 86Hz.
Und das sollte doch reichen, oder ?

von Matthias Asselborn (Gast)


Lesenswert?

Frage:

warum nicht 7 sehr steile Filter machen
die 1. FFT von 0 bis 2,75 khz
Ausgabe auf's Display !
dann die 2. FFT mit nem Bandpass 2,75 bis 22khz
starten
Ausgabe aufs Display
usw...
dan hätte mal zwar 8 Schaltungen aber die liesen sich ja durch SMD
Technik auf einer 100x160 er Platine unterbringen !

dann könnte man über die paar Herz eine FFT mit 4096 Punkten
legen

von Philip (Gast)


Lesenswert?

meinst du jetzt einfach 7 einzelne komplett getrente ? die dann ihre
eigenen leds? haben ?

sprich jeder FFT hat ein paar leds die er ansteuert.. und sonst keine
aufgabe? die anderen machen dann die anderen bereiche ?

von Matthias Asselborn (Gast)


Lesenswert?

Autor: Benedikt
Datum: 09.02.2005 20:48

------------------------------------------------------------------------ 
--------

Reicht denn die Lösung von ape nicht ?
Ein mega32 mit 2x 512 Punkt FFTs liefert im Bereich 0-2kHz eine
Auflösung von 10,8Hz und im Bereich bis 22kHz eine Auflösung von 86Hz.
Und das sollte doch reichen, oder ?


sorry habe deinen Post zu spät gelesen ! das wäre ja fantastisch !!!

von Matthias Asselborn (Gast)


Lesenswert?

zumal ich noch 2 atmega 16 und 32 in smd daheim habe !
gut das machen wir !

von Matthias Asselborn (Gast)


Lesenswert?

problem ! die Samplerate ist wieder bei 22khz oder ?
wo gibt es denn den Code ?
könnte mal einer Licht ins dunkle schaffen ?

von Björn (Gast)


Lesenswert?

Auch auf die Gefahr hin, dass ich mich wiederhole:
Macht doch ne Zoom-FFT und dann am besten noch zwei

von Philip (Gast)


Lesenswert?

ist zwar offtopic, aber erklär mal bitte wie das funzt mit ner
Zoom-FFT?
ich weiss nicht so genau was das ist-.-

von Benedikt (Gast)


Lesenswert?

Was ist eine Zoom-FFT ?

@Matthias Asselborn
Schau mal weiter oben, da gibts den Code von ape.
Den musst du nur noch mit meinem mischen um die FFTs auf 512 Punkt
anzupassen aber als Ausgabe den UART zu verwenden.

von Matthias Asselborn (Gast)


Lesenswert?

frage ich mich auch schon die ganze Zeit
ist das eine FFT die NUR einen speziellen Bereich
fasst ?

@Benedikt könntest du mir da mal helfen ! weil dein code C und der von
Ape ASM ?!
assembler kann ich leider nicht
bzw hoffe es im Studium noch zu lernen

von Björn (Gast)


Angehängte Dateien:

Lesenswert?

Ja mit ner Zoom-FFT lassen sich bestimmt bereiche im Spektrum
berechnen.
Ich hab auch da mal nen Protokoll von mir rangehängt. Das ist zwar
ziemlich hektisch mit Abgabetermin im Nacken zusammen geschrieben, aber
das Prinzip sollte zu erkennen sein.

Ach ja und ich weiß per Definition berechnet die DFT das Spektrum von
0-Fa ;-)

Gruß
Björn

von Matthias Asselborn (Gast)


Lesenswert?

ja gut mir würde aber trotzdem die von Benedikt angesprochene Variante
besser gefallen

Ein mega32 mit 2x 512 Punkt FFTs liefert im Bereich 0-2kHz eine
Auflösung von 10,8Hz und im Bereich bis 22kHz eine Auflösung von 86Hz.


könntest du mirmit dem Code helfen ?
c und asm mixen ?
evtl hinter die Zeilen schreiben was geschiet ?

grüßles matthias

von ape (Gast)


Lesenswert?

@benedikt hast du nen lauffähigen code für eine 512er FFT? Hab den
Thread eben durchgescrollt und nichts gefunden.
Aber mit 2 512 Punkte FFTs wär auch ein mega32 speichertechnisch
überfordert oder (Ich hab jetzt nich nachgerechnet aber ich denke
nichtmal eine würde ohne Probleme passen)?

von Matthias Asselborn (Gast)


Lesenswert?

ich weis auch nicht wo Benedikt das im Forum gelesen hat...

von Benedikt (Gast)


Lesenswert?

@ape
Hast du nur einen 256er FFT im mega32 ?
Du hast doch die Schleifenzähler usw. schon auf 16bit geändert, so dass
man eigentlich nur noch auf 512 umstellen muss ?

Gena nachgerechnet habe ich nicht, aber eine 128 Punkt FFT braucht ca.
860Byte, und eine 512er sollte daher mit 4kB auskommen.

von ape (Gast)


Lesenswert?

der mega32 hat aber nur 2kB SRAM :P
Hab gerade nachgerechnet: 512 Punkte benötigen 3328 Bytes. Man bräuchte
also mindestens einen mega64 oder ein externes SRAM.

Und ich benutze sogar nur eine 128er FFT.
Die Zähler auf 16 Bit zu erweitern hat leider nicht das gewünschte
Ergebnis erbracht, da in der do_fft routine anscheinend noch ein
anderer Wert bis FFT_N zählt und mit diesem auch multipliziert wird
(Ich vermute es ist das u bzw. XH). Soll heißen man müßte noch eine
16Bit Multiplikation einbauen. Das war mir so auf die Schnelle mit
meinen bescheidenen asm-Kenntnissen zu aufwendig.
2 128 Punkte FFTs reichen mir aber auch. Wobei man mit 512 Punkten die
gleiche Auflösung (~40Hz) bei der gleichen Bandbreite (0-11kHz) mit
einer einzigen FFT erreichen würde.

von Benedikt (Gast)


Lesenswert?

Stimmt, der mega32 hat nur 2k, hatte das mit dem 64er verwechselt.

Ich fasse mal kurz das bisherige zusammen:
Im unteren Frequenzbereich wird eine Auflösung von 10Hz benötigt. Dafür
benötigt man eine 4096 Punkt FFT für den Bereich 0-22kHz.
Eine 4096 Punkt FFT lässt sich mit AVRs also nicht verwirklichen, und
andere DSPs die dazu in der Lage wären (also genügend Speicher und
Rechenleistung haben), sind nicht gerade günstig, und würden daher kaum
einen Vorteil gegenüber eines diskreten Spektrum Analysers bieten.

Somit bleibt nur die Lösung mit mehreren 128 Punkt FFTs und dem
MAX29x:
a) Tiefer Bereich mit 1,385kS/s für 0-500Hz mit 10,8Hz Auflösung
b) Mittlerer Bereich mit 5,54kS/s für 0-2kHz mit 40Hz Auflösung
c) Hoher Bereich mit 44,3kS/s für 0-22kHz.

Warscheinlich wird das ganze auf 2-3uC hinauslaufen:
Einer für den mittleren und hohen Bereich, und einer für den tiefen. Im
tiefen Bereich benötigt der uC alleine schon 100ms nur um die Daten
aufzzeichnen. Der zweite uC macht den restliche Frequenzbereich.
Die Daten könnte man auf dem Tiefbereich uC verarbeiten und
zusammenfassen, da der sich während der Aufzeichnung langweilt.
So hätte man insgesamt 192 Messwerte, die man zu 16-64 Werten mit
einigermaßen logarithmischer Verteilung zusammenfassen kann.

von Matthias Asselborn (Gast)


Lesenswert?

hab ich aber schon oft vorgeschlagen z.b. 3 oder am besten 4 ffts zu
machen

von ape (Gast)


Lesenswert?

Problem dabei dürfte aber sein, das, wie du schon selber geschrieben
hast, der tiefebereichnur nur gut 10 berechnungen schafft ergo die
komplette FFT nur 10mal pro Sekunde refreshed wird. Man könnte zwar die
höheren Frequenzen öfter refreshen, aber in den Tiefen kommt man da nich
drumrum.

Wobei mir gerade doch eine evtl. Lösung einfällt.
Möglicherweise könnte man einfach immer die zweite Hälfte des Capture
Buffers in die erste kopieren und dann nur die zweite wieder auffüllen,
so dass man überlappende Bereiche hätte. Damit ließe sich die
Refreshrate verdoppeln oder auch noch mehr wenn man eine noch größere
Überlappung nimmt. Und bei dieser niedrigen Samplingrate sollte es auch
machbar sein den Buffer shcnelle genug umzukopieren, do dass keine
Samples verloren gehen.

von Matze (Gast)


Lesenswert?

was spricht gegen einen externen speicher ?
die kosten nichts ! und  gibt es in 16..32..64kb..

von Benedikt (Gast)


Lesenswert?

Gegen einen externen RAM spricht, dass man dann einen externen ADC
braucht, da es keine AVRs mit Datenbus und ADC gibt, zumindest nicht in
der billigen Preisklasse. Zumindest habe auf die schnelle keine
gefunden.
Insgesamt wird alles dadurch aufwendiger.
Für 3 FFTs sollte der mega32 problemlos ausreichen, eigentlich sogar
auch der mega8

von Philip (Gast)


Lesenswert?

ich bin auch dafür das wir das einfach mit mehreren avrs machen,
ist billiger und einfacher., was bringt es jetzt teure hardware zu
nehmen, wenn man fürs gleiche geld einen komplett fertig aufgebauten
bekommt...

3-4 FFts sind da viel praktischer...

von Dirk (Gast)


Lesenswert?

@ Björn

ich habe mir mal dein script durchgelesen, sehr schön erklärt, mir ist
nur aufgefallen das du "Hanning-Fenster" geschrieben hast, ich aber
in büchern immer vom Hemming-Fenster lese. Was ist nun richtig ?

von Benedikt (Gast)


Lesenswert?

Es gibt sowohl Hamming als auch Hanning

von ape (Gast)


Lesenswert?

@philip: gegen so viele FFTs spricht, das es
1) sau langsam ist
2) wesentlich größerer hardware aufwand, weil mehrere AVRs, die jeder
nen tiefpass-filter brauchen
3) damit einhergehend wesentlich mehr platzbedarf (Für nen LED Spec
Analyser mag das nich so das Problem sein, aber bei mir ist kleiner =
besser)
und 4) is das spektrum an den übergängen halt immer irgendwie
unterbrochen. Bei Musik fällts i.d.R. nich so auf aber wenn nen sinus
durchläuft sieht mans doch recht deutlich.

und 5) hör ich gerade von dir immer ich will, ich will, ich will und
meistens nichts konstruktives...

von Philip (Gast)


Lesenswert?

ja mei ape, ich kann in dem bereich nicht viel dazu bei tragen, weil mir
die möglichkeiten fehlen, ich helfe Matze so weit ich kann, wir kennen
uns scho recht lange, aber mehr als ein paar ideen kann ich nicht
beitragen... naja was soll ich sonst machen, wenn du dich jetzt darüber
auf regst tja sorry kann ich nix machen, dann ignorier mich oder so...

ich werds überleben

von Benedikt (Gast)


Lesenswert?

@ape
Den Übergang sieht man nur, wenn man die Werte 1:1 anzeigt.
Bei meiner Anzeige sieht man den Übergang bei weitem nicht so deutlich
wie bei deinem LCD, das ich versuchte eine einigermaßen logarithmische
Anzeige zu bekommen, indem ich mehrere Werte zusammenfasse um so bei
hohen Frequenzen die Auflösung zu verringern.

von Matthias Asselborn (Gast)


Lesenswert?

folgendes erst mal ne Streiten !!
es war nur eine Idee mit dem externen Speicher da der halt im Mp3
Player damals auch recht hilfreich war die Daten der CD dort
zwichenzuspeichern ect.... andererseits habt ihr schon recht @externer
AD
weil der von analog devices n 24 bitter gleich mal 30 euro kostet oder
bin ich da nicht mehr auf dem laufenden
ganz am anfang hab ich schon vorgeschlagen das ganze mit mehreren
filtern bzw atmels mit fft dahinter zu schalten
also 4 ffts dürften ja reichen ....
oder von CS weis nicht Crystal glaub ich hatte ich mal n DA für 12 euro
da ...
es kommt halt dann auf die Filter drauf an ...denke ich
wenn die net exakt sind ist das alles nicht so optimal
@ape wie wirkt sich das auf die Geschwindigkeit aus ?
müsste ich mal aufbauen und guggen

von Matthias Asselborn (Gast)


Lesenswert?

@ape :is das spektrum an den übergängen halt immer irgendwie
unterbrochen. Bei Musik fällts i.d.R. nich so auf aber wenn nen sinus
durchläuft sieht mans doch recht deutlich.


ja gut das wusste ich nicht ist das echt so extrem ? also liegt es an
den filtern .......

von Benedikt (Gast)


Lesenswert?

Die Unterbrechung kann man per Software vollständig kompensieren, denn
die FFTs liefern alle dasselbe Ergebnis (nur mit unterschiedlichen
Auflösungen für unterschiedliche Bereiche).
Egal ob mal die Gleichung 5*5+5*x=5*10 löst, oder 5+x=10, es kommt
dasselbe raus. Dasselbe ist bei FFT: Dies ist ja im Prinzip eine
umkehrbare, mathematische Berechnung.

von Thorsten (Gast)


Lesenswert?

@Benedikt:

Sofern es noch von Interesse ist, der dsPIC30F6014 lässt sich
problemlos mit dem ICD Nachbau programmieren und auch debuggen. Sollte
mit anderen Typen also auch funktionieren.

Gruß
Thorsten

von Benedikt (Gast)


Lesenswert?

Für das FFT Projekt vielleicht nicht, aber da ich sowiso mit PICs
demnächst arbeiten werde, werde ich mir die dsPICs auf jedenfall mal
anschauen und testen.

von Benedikt (Gast)


Lesenswert?

Ich habe gerade mal die letzen Fehler aus meinen 32MS/s DSO mit einem
AVR behoben und dabei mal alle möglichen Signale am Spektrum Analyser
gemessen.
Eigentlich hätte die Schaltung garnicht funktionieren dürfen, denn ich
hatte ein paar schlimme Softwarefehler drin.
Der mega8 schiebt die Daten zum Display mit rund 30fps raus, also rund
die Hälfte der Orginalsoftware. Immerhin muss der uC jetzt ja auch 2
128 Punkt FFTs machen.

Fazit: Die 5,5kS bremsen kaum was aus, wenn man z.B. die
Zusammenfassung und die Übertragung der Daten in die Samplingphase für
die 5,5kS legt.
Werden allerdings 3 FFTs verwendet, sollte man für die ganz langsame
doch einen 2. uC verwenden.
Ich denke ich werde daher mal die Idee von ape ausprobieren, immer nur
eine Hälfte des Samplingpuffers neu aufzufüllen.
Allerdings benötigt man dazu zwei Samplingpuffer, da während der FFT
die Aufzeichnung unterbrochen wird und so eine Lücke entstehen würde.
Es wäre ja ungünstig, wenn sich während der FFT die Daten ändern...

von Matze (Gast)


Lesenswert?

also um n 2. µC wäre es nicht ! ist doch egal ein oder 2 Smd Atmels auf
der Platte ?!
würde fast 4 FFT s machen !
was hältst du davon ?

von ape (Gast)


Lesenswert?

@matthias:
Also der Preis wär bei nem externen AD noch das geringste Problem, es
gibt auch welche für 3€ und 24 Bit wäre nu wirklich etwas übertrieben
(abgesehen davon das die Software nur mit 16 Bit rechnet und da ich mir
noch nich die Mühe gemacht habe die Berechnung genauer zu untersuchen
könnts auch sein das nichtmal mehr als die 10Bit des internen ADs
gehen, da sonst möglicherweise Variablen überlaufen könnten)

@benedikt: wenn man die FFTs nacheinander auf einem AVR macht sind sie
eben nicht genau gleich, da sich das Spektrum ja ändert, die FFTs also
das Spektrum zu unterschiedlichen Zeiten darstellen.
Außerdem wird das Spektrum am Ende des Frequenzbereiches einer FFT
durch die einsetzende Dämpfung des Filters verfälscht.
Und ich denke man würde mit einem Sampling-Buffer auskommen, wenn man
diesen als Ring-Buffer auslegt. Vor Beginn der FFT werden die Samples
ja in den Butterfly-Buffer geladen, das geht ja recht schnell. Der
AD-Wandler sampled dann halt die ganze Zeit durch und im Buffer liegen
immer die letzten 128 Samples.

von Matze (Gast)


Lesenswert?

ja also was spricht dann gegen n externen rom bzw ad ?
die 3 sachen wären doch dann die hauptbestandteile der
fft platine !

@ape welcher 16bitter AD z.b. @3-4 euro

von ape (Gast)


Lesenswert?

Wer redet von 16 Bit? Der Interne macht 10 Bit und das ist vollkommen
ausreichend.

z.B. Microchip MCP320x mit dem hab ich sehr gute Erfahrungen gemacht.
Das ist ein 12 Bit Wandler. Preis auf der Microchip Seite: 1,91$ (für
den zweikanaligen)
Wird im Einzelstück wahrscheinlich noch ein bisschen mehr sein und ich
weiß auch nich ob man den hier irgendwo kaufen kann, aber 10 bis 12Bit
Wandler gibs wie Sand am Meer und die kosten alle nich so viel.

Aber bei den externen Wandlern ist das Ergebnis auslesen etwas
aufwendiger und es ist wieder ein Bauteil mehr.

Abgesehen davon hat man halt immernoch das Problem, das man auch mit
externem Speicher nich beliebig viele FFTs in einem AVR machen kann,
weil das dann einfach zu langsam wird.

von Benedikt (Gast)


Lesenswert?

@ape
>Außerdem wird das Spektrum am Ende des Frequenzbereiches einer FFT
>durch die einsetzende Dämpfung des Filters verfälscht.

Wenn man nicht alle Werte verwendet, sondern nur die unteren 2/3, dann
hat mand amit keine Probleme.
Bei 3 FFTs kann man das auch bedenkenlos machen.

Meine Idee wie ich das ganze machen würde:
Ein mega8 macht die FFT für die 5,5kS/44kS und sendet die Daten an den
zweiten mega8.
Dieser macht die langsame FFT und setzt alle 3 FFTs zu einem
logarithmischen Gesamtspektrum zusammen, bei dem man keine Übergänge
sieht.

von philip (Gast)


Lesenswert?

@Benedikt wenn du die zeit hättest,
ich hätte ein lied, das du vielleicht mal drüber laufen lassen
könntest, würde es dir per mail schicken oderwo hochladen, bitte mal
wenn du zeit hast mit cam apfilmen, mich würde mal die leistung des
spectrums interessieren die wir gerade haben... falls du zeit hast meld
dich doch kurz..

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe ein kleines Problem mit der Software im mega8:
Mein LED Display hat jetzt eine getrennte Spannungsversorgung (6V, max.
3A  über LM2576) von der restlichen Elektronik bekommen. Beides läuft an
einem 12V Netzteil. Je nachdem wieviele LEDs an sind, zieht das ganze
bis zu 3A (auf der 12V Seite). Wenn ich zu laut mache, bricht
anscheinend die Spannung zusammen, und der mega8 hängt sich auf.
Eigentlich sollte der Watchdog ihn dann nach einer viertel Sekunde
resetten.
Kann man jemand über den Code schauen, ob irgendwo ein Fehler bei der
Watchdogroutine ist? Ich bin eigentlich der Meinung, dass der Watchdog
funktionieren müsste.

von ape (Gast)


Lesenswert?

>    in r16, WDTCR
>    ori r16, (1<<WDCE) | (1<<WDE)
>    out WDTCR, r16
>    ldi r16, (1<<WDE) | (1<<WDP2)
>    out WDTCR, r16

Mhmm du schreibst zuerst das WDE und WDCE in den control-register und
gleich danach nochmal WDE und WDP2. Ich hab das Datenblatt jetzt nur
überflogen aber wenn ich das richtig verstanden habe brauchst du zum
aktivieren des watchdog timer nicht das WDCE-Bit setzen.
Nichts desto trotz sollte es eigentlich funktionieren :)

von Benedikt (Gast)


Lesenswert?

Ich hatte es erst anderst, also WDT aktiviert und gleichzeitig den Rest
gesetzt, dann ging es nicht.

Ich habe alles mal extrem übersteuert, so dass die Spannung wirklich
total zusammenbricht, dann erkennt man den Reset (wenn 1/4s lang alles
steht).

Manchmal bleibt aber alles trotzdem hängen. Keine Ahnung warum.

von ape (Gast)


Lesenswert?

So hab jetzt meine Version auch mal in der Codesammlung veröffentlicht:

http://www.mikrocontroller.net/forum/read-4-159757.html

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Endlich hat es Reichelt geschafft die fehlenden Platinen zu liefern, und
nach einem weiteren Nachmittag LEDs bestücken ist nun der 32x16 Spektrum
Analyser fertig.
Im Bereich >3kHz tut sich echt eine Menge. Auch der Bereich >10kHz ist
interessant, denn man erkennt sofort ob die mp3 auf 10kHz Bandbreite
beschränkt ist, oder nicht.
Leider ist der internde ADC des AVR mit 44kHz Samplerate (ca. 570kHz
ADC Takt !) doch etwas überfordert, so dass die unterste LED Zeile
konstant leicht flackert.
Die Auflösung im unteren Bereich liegt bei 40Hz, am oberen Ende sind es
rund 3,8kHz.
Die Stromaufnahme liegt bei etwa 1A bei 12V wenn ich den Analyser mit
Musik so ansteuere, dass die Peaks etwa in den gelben Bereich gehen.
Bei Vollaussteuerung (alle LEDs an) zieht die Schaltung ca. 40-50W,
aber das schafft der LM2576 nicht lange.
Der LED Strom liegt bei rund 150mA bei 1/16 Tastverhältnis.

von philip (Gast)


Lesenswert?

kannst du mal was bewegtes zeigen?

von matthias asselborn (Gast)


Lesenswert?

dachte du wolltest :

Somit bleibt nur die Lösung mit mehreren 128 Punkt FFTs und dem
MAX29x:
a) Tiefer Bereich mit 1,385kS/s für 0-500Hz mit 10,8Hz Auflösung
b) Mittlerer Bereich mit 5,54kS/s für 0-2kHz mit 40Hz Auflösung
c) Hoher Bereich mit 44,3kS/s für 0-22kHz.

das erreichen ?

grüßles matthias

von Benedikt (Gast)


Lesenswert?

Ohne eine Bezugsquelle, bei der man auch als normalsterblicher den
MAX29x zu einem vernünftigen Preis bestellen kann, oder einen anderen,
einfachen Tiefpass, habe ich eigentlich keine Lust an der jetzigen
Schaltung was zu ändern.

von keksohr (Gast)


Lesenswert?

:) kannst du mal sagen wie du das mit den bandpass filtern gelöst hat?
bekommt man den auf normalen weg bzw die teile ? oder ist das echt son
dummes ding was man nur alsfirma oder so bekommt....

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Es gibt keine Bandpassfilter. Das ganze läuft (außer einem 2kHz Tiefpass
für den unteren Bereich) komplett digital in einem mega8 mit 18,432MHz.

Ich habe mal ein Video angehängt, das ganz gut die große Auflösung des
Analysers zeigt. Vor allem am Anfang erkennt man (auf dem Video nicht
ganz so gut), dass bei jedem, Bing (keine Ahnung wie man diese
Geräusche bezeichnet), ein anderer LED Balken aufleuchtet, da die Bings
immer eine unterschiedliche Frequenz haben.

von keksohr (Gast)


Lesenswert?

das is im untereren bereich auf jedenfall schon mal nach meinen
ansprüchen, nur was ich jetzt ihrgend wie dumm finde, das es nur 32
leds sind, 64 währen jetzt ganz erlich gesagt viel geiler.... das ist
ihrgend wie im unteren bereich zwar okay, aber hmm kann man das
erweitern ?

von Benedikt (Gast)


Lesenswert?

Natürlich kannst du das erweitern. Du kannst sogar eine 64x64 LED Matrix
aufbauen, aber glaub mir: 512 LEDs zu löten ist genug Arbeit.

von Benedikt (Gast)


Lesenswert?

@ape

Könntest du mal etwas für mich ausprobieren ?
Den Analyser mit Musik stark übersteuern, denn bei mir hängen sich dann
die FFTs auf, obwohl ich den Watchdog laufen lasse.
Einmal hat sich sogar nur der 44kS FFT aufgehängt (die rechte
Bildhälfte hat sich nichtmehr verändert), die 5,5kS FFT lief aber ganz
normal weiter.

von matthias asselborn (Gast)


Lesenswert?

hmm eine frage hab ich noch dazu
wieso sind wenn s steile balken gibt die nachbar balken nicht
davon betroffen ?
könntest mal n sinus drüber laufen lassen ??
aber an und für sich schon ok

wieso was kostn son max ?

von matthias asselborn (Gast)


Lesenswert?

der max 29x is doch son bandpassfilter 3 kanal
stimmt und ich überlegte mir damals diesen zum analyzer zu verwenden
ich glaube beim electronicpool gibt es denn für glaub mal 5 euro
mal guggen

von Benedikt (Gast)


Lesenswert?

Ich verstehe nicht ganz was du meinst mit steilen Balken.
Einen Sinus hatte ich vor einiger Zeit schonmal laufen lassen, auch mit
den restlichen 160 LEDs die damals noch fehlten hat sich nicht viel
verändert:

http://www.mikrocontroller.net/attachment.php/152417/fftsinus.avi

Was ein MAX29x kostet weiß ich nicht, denn man bekommt ihn ja nirgends
(außer als Sample von maxim). Zumindest nicht bei den "normalen"
Elektronikversandhändlern (Reichelt, Spoerle, RS, Farnell, Bürklin,
Digikey usw.)

von matthias asselborn (Gast)


Lesenswert?

also bei segor gibt es den MAX 275 ,280, 297

der 280 is n 5 . ordnung lowpass
der 297 ein 8. ordnung lowpass

gruß matthias

von matthias asselborn (Gast)


Lesenswert?

einfach bei segor  unter halbleiter im onlinekatalog ics nach hersteller
m
dann m/max typen bis max499
dann kommen die ganzen filter

von Benedikt (Gast)


Lesenswert?

Bei dem Preis kann man das ganze vergessen. Da kommt ein diskreter
Tiefpass um einiges billiger, selbst mit 1% Widerständen und guten
Kondensatoren.

MAX 297 CPA                Bestelltyp, nicht ab Lager lieferbar
8.Ord.Elliptic LPass DIP8
Lieferzeit 10Wochen  (VE: 1 St.) :      14.20 EUR

MAX 296 CPA                Auslauftyp 8.Ord.Clk-Tun.LPass DIP8
Nicht mehr lieferbar  (VE: 1 St.) : nicht lieferbar

MAX 280 CPA                Bestelltyp, nicht ab Lager lieferbar 5.Ord.
Lowpass DIP8
  (VE: 1 St.) :      11.15 EUR
ab 10 VE:       8.92 EUR

von matthias asselborn (Gast)


Lesenswert?

liesse sich da noch was im tiefpass verbessern?
frage: wie isn das mit dem flackern ?
mit den balken meinte ich ich sehe auf dem video
das z.b. einr vollausschlägt der nebendran nichts macht aber der
nächste wieder aussteuert... das meinte ich ...

von Benedikt (Gast)


Lesenswert?

Meinst du das Flackern der rechten paar LEDs in der untersten Zeile,
auch wenn kein Signal anliegt, oder allgemein das Flackern ?
Ersteres habe ich jetzt dadurch behoben, dass ich nur Werte >2 anzeige,
und alles darunter (also 1 und 2) zu Null mache.
Ansonsten flackert nichts, in der Software wird der Spitzenwert
gebildet und langsam auf Null gefahren, also so wie bei einem echten
Spitzenwertgleichrichter.

Das ist ja das schöne an der FFT:
Wenn ein reiner Sinuston anliegt, erhält man wirklich nur einen Peak.
FFT ist eben schon nahe dran an der idealen Durchlasskurve mit fast
unendlicher Steilheit.

von keksohr (Gast)


Lesenswert?

was muss denn jetzt noch gemacht werden ?

von ape (Gast)


Lesenswert?

@Matthias: Es hängt halt vom Eingangssignal ab, Wenn da nunmal 2 laute
Sinustöne drin sind deren Frequenzen etwas auseinanderliegen, sieht man
das in der FFT an Hand von 2 Balken die auftauchen, wenn die Frequenzen
dazwischen nicht vorkommen leuchten auch die Balken nicht auf...

@Benedikt: Habs mal probiert, bei mir ist nichts abgeschmiert. Ich
denke aber das liegt bei dir tatsächlich an den vielen LEDs, und die
auftretenden recht großen Ströme die ja doch recht schnell geschaltet
werden. Kann gut sein das das ganze auch einfach ganz ordentlich
strahlt und damit den AVR lahm legt.
Ich hab neulich 24 super helle LEDs (3,3V; ins Gesamt 500mA) mit einer
30kHz PWM angesteuert und damit meine Funkt-Tastatur lahm gelegt.
Im Zweifelsfall den AVR in ne geerdete Blechbüchse tun :P

Als ich nach dem MAX297 geguckt hatte gabs den bei Segor noch nicht.
Aber 10 Wochen Lieferzeit is ja ganz schön übel und 15€ sind auch nich
wenig.

von keksohr (Gast)


Lesenswert?

dann baut den doch einfach ohne diese teile auf und dann mit OPS oder so
mit mehreren einfach... das der richtig schön steil wird...., warum so
einen stress dann lieber so !

was istn wenn man den avr in ne blechbüxe packt und die spannung noch
mit ein paar GoldCap Kondensatoren sichert ? die hätten genug leistung
und kosten auch nicht mehr die welt zb für 5-6V.... bei reichelt gibt
es die für 3-7 euro.... 2 stück und gut ist^^

von Benedikt (Gast)


Lesenswert?

@ape
Danke, ich habe das Problem zwar nicht gefunden, aber umgangen:
In jeder Routine wird jetzt ein Bit gesetzt, und wenn am Ende nicht
alle Bits gestzt sind, gibt es kein WDR -> Reset
Mit voller Lautstärke lief das das ganze fast zwei Stunden ohne
Probleme, dann hat sich mein Netzteil verabschiedet. Das Display
braucht verdammt viel Leistung. Jetzt läuft das Display an einem 15V 2A
Netzteil.

Störungen kann ich eigentlich ausschließen: Ich habe getrennte
Spannungen für die LEDs und den AVR und auch getrennte Massen auf der
Platine, die nur an einem Punkt verbunden sind. Außerdem ist der mega8
bei mir etwa 50cm von der LED Treiber Platine weg, über eine 10 adriges
Kabel ausgelagert um genau diese Störungen nicht im Audiosignal zu
haben.

von matthias asselborn (Gast)


Lesenswert?

nun benedikt wollte ich dich wegen dem code
und den 2 schaltplänen fragen so dass ich da n vernünftiges layout
entwerfen kann

grüßles matthias

von Benedikt (Gast)


Lesenswert?


von matthias asselborn (Gast)


Lesenswert?

dann kann ich die schaltpläne von ape verwenden und den code von dir ?

von matthias asselborn (Gast)


Lesenswert?

ah da hast ja die pläne gleich implementiert
könntest du mir die eagle ? datei per mail senden ?
das wäre toll !

gruß matthias

von matthias (Gast)


Lesenswert?

benedikt könmntest du mir ein paar infos über den asm fft code geben wie
ich ihn verändere
denn ich bekomme in nächster zeit doch nen max bzw wenn nicht bastle
ich mir n filter
oder ist das dann 3 mal der selbe code aber wie verändere ich die
frequenzen ?

den ehrlich gesagt sind mir 40hz auflösung doch etwas zu wenig wenn ich
da die frontplatte des audioscope angugge....

grüßles matthias

von Benedikt (Gast)


Lesenswert?

Eine Version mit 3 FFTs wird um einiges komplizierter, da man entweder
mit einem zweiten mega8 arbeitet, oder mit 5fps zufrieden sein muss.
Und das ist mir ehrlich gesagt zu viel Arbeit.

Bei der Initialisierung wird an OC1B ein 444kHz Takt ausgegeben. Dieser
muss an die jeweilige Samplerate entsprechend angepasst werden.
Im Flags Register dient Bit3 zur Unterscheidung ob gerade der hohe oder
Tiefe Frequenzbereich berechnet wird, damit werden die entsprechenden
Routinen ausgewählt und die neuen Messungen gestartet.
Die Routinen do_window und do_fft benutzen beide. Bei make_bars gibt es
eine High und eine Low Routine in denen aus den Komplexen Werten de
Betrag der jeweiligen Frequenz ermitteln.
In der rfsh_bars Routine werden die Werte dann zusammengefasst:
Dazu gibt es die ganzen makexp Routinen
In rfsh_bars werden aus jeweils x Werten der Maximalwert
herausgesucht.
Das ganze funktioniert folgermaßen (am Beispiel von ds_hl2):
CL bestimmt die Anzahl an erzeugten Werten, hier 16:
Ist CL >=12, werden die Werte unveränder übernommen.
Ist CL >=9, werden 2 Werte zu einem zusammengefasst
Ist CL >=6, werden 3 Werte zu einem zusammengefasst
Ist CL >=4, werden 4 Werte zu einem zusammengefasst
Ist CL >=2, werden 6 Werte zu einem zusammengefasst
Ansonsten werden 8 Werte zusammengefasst
Insgesamt stehen 64 Werte zur Verfügung, von denen aber nur 59
verwendet werden, da die unteren 5 (daher oben bei der Zweisung des Y
Pointers die +5) schon durch den tiefen Bereich abgedeckt wurden.

Vielleicht werde ich irgendwann die Software mit 3 FFTs schreiben, aber
im Moment habe ich weder einen Grund, noch Lust dazu, da mir die
Auflösung ausreicht, und mein PC die tiefen Frequenzen auf einem
getrennten Kanal ausgibt, sie also sowiso nicht dargestellt werden.

PS: brauchst du noch meine Eagle Dateien ? Warscheinlich werden die
aber wenig hilfreich sein, da ich die Bauteile nur für einen
ordentlichen Schaltplan, nicht aber fürs Layout ausgewählt habe. Die
Größen passen also nicht.

von matthias (Gast)


Lesenswert?

ja bitte um die Eagle Dateien !
das erspart mir einige Zeit! kann mich also mit dem Code nun endlich
mal auseinandersetzen!  studiere ja nächstes Jahr Informatik
da werde ich dan wohl etwas mehr über Assembler lernen
oben schreibst du: "es stehen 64 Werte zur Verfügung"
ist das eine 64 Punkt FFT ?

grüßles Matthias

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Nein, es ist eine 128 Punkt FFT, denn es werden 128 Sample Werte in 64
Real und 64 Imaginärteile für die Amplitude umgerechnet, so dass man im
Prinzip 64 Beträge und 64 Phasenwinkel für die Amplituden bekommt.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Ob ein Informatikstudium so viel bei Assemblerprogrammierung
weiterhilft, bezweifle ich. Das ist alles sehr theoretisch, und für
meinen Geschmack zu wenig Praxisbezogen.

von matthias (Gast)


Lesenswert?

ach ja klar ich vergas geteilt durch 2 ... ja dann sind wir bei 128 :-)
danke dir für die eagle Dateien !
grüßles Matthias

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei mein Vorschlag der FFT Platine
werde beide (FFT und Steuerplatte)
auf eine 160x100 Eurokarte routen!

von matthias (Gast)


Lesenswert?

ich denke mal die Spannung ist 5V
bei den Led Zeilen hast du mal 6V geschrieben....
wie kamst du auf den TLC272 ?

von Benedikt (Gast)


Lesenswert?

Die 5V sind für die gesamte Elektronik (also die beide uC, die HC4094
usw.), die 6V brauchen die MOSFETs für die Gate Source Spannung um die
5A verlustfrei zu schalten.
Ich habe keine P-Kanal Logik Level MOSFETs bei Reichelt gefunden, die
bei 5V Gate Source Spannung 5A schalten können.
Anfangs dachte ich an irgendwelche MOSFETs im DIP-4 Gehäuse, aber die
meisten können keine 5A schalten, zumindest die wo man bei Reichelt
bekommt.
Du kannst die LEDs zwar auch mit 5V betreiben, musst dann aber darauf
achten, möglichst keine Verluste in den Leitungen, MOSFETs oder sonst
wo zu haben, denn die LEDs brauchen alleine schon 4,3V !

Den TLC272 hatte ich rumliegen. Abgesehen vom LM358 war es der einzige
der mit 5V auskommt den ich da hatte.

von philip (Gast)


Lesenswert?

gibt es ne möglichkeit eventull nen schalter einzu bauen wo man von baar
auf dot mode umstellen kann ? oder reicht der platz nicht mehr..

von Benedikt (Gast)


Lesenswert?

Möglich ist das, dazu muss nur die make_bars Routine unmgeschrieben.

von matthias asselborn (Gast)


Lesenswert?

frage wieso so overkill transistoren ???
mein analoger spektrumanalyzer multiplext schneller und zwar die volle
matrix 12x31 hat pro zeile n multiplex strom von nem ampere
den ich mit den BC517 und BC518 schalte

von matthias asselborn (Gast)


Lesenswert?

sorry natürlich 516 und 517 :-)

von Benedikt (Gast)


Lesenswert?

Bei mit fließen 150mA pro LED. Ich multiplexe 1/16, also fließen
32*150mA=5A. Da gehen BC517 aber schenll in Rauch auf...

von matthias (Gast)


Lesenswert?

ja gut bei mir mit 2ma leds 20ma pro led dann bei 31 multiplex
31*20ma = ca 620ma die zeile
da ich aber 4 multiplex anzeigen habe
geteilt durch 4 das ganze und das machen die 517 er und 16 er locker
mit

von matthias (Gast)


Lesenswert?

hab 4 mal eine 7x12 er matrix da ist das nicht so kritisch

von philip (Gast)


Lesenswert?

matthias hast du die eagel datein schon fertig ? so das ich mir das
alles ätzen kann ? oder wie machen wir das jetzt?!

von matthias (Gast)


Lesenswert?

ich weis nicht mir gefällt die FFT nicht !
die Frequenzscala ist mir zu ungenau und die
Stärke des Ausschlages passt in keiner Weise zu der db Norm
dann gefallen mir die 5A Transistoren nicht
bei meinem Bandpassanalyzer multiplexen 4 Atmels das Display
so dass ich so Teile gar nicht erst brauche
aber ich mach das Layout trotzdem
für die FFT hast ja schon erhalten !

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

meine 16x16 er Matritzen möchten mal arbeit !
so baue ich ihn doch mal mit der FFT zum Test
evtl bau ich ihn um - hat ja noch AD Wandler frei so dass ich 4 Filter
machen kann und dadurch eine höhere Auflösung erziele
Gruß Matthias

von matthias (Gast)


Lesenswert?

@ Benedikt

du hast ja den einen Adc mit dem Filter versehen
den anderen mit einem 100nf Kondenator in Reihe ? was bringt der ?

von matthias (Gast)


Lesenswert?

bzw was ist das für ein Filter ? n Tiefpass ? oder Bandpass ?
oder n Hochpass ?

von Benedikt (Gast)


Lesenswert?

Das ist ein Hochpass mit einigen 10 bis 100Hz, der mir die
Gleichspannung entfernt. Meine Soundkarte liefert ein aus Masse
bezogenes Signal ohne Gleichspannungsanteil, der ADC benötigt aber ein
Offset von ein paar Volt, da der AVR keine negative Eingangsspannung
verträgt.
Den selben Zweck haben auch C11 und C5.

von matthias (Gast)


Lesenswert?

was ist der große Filter ist das ein bp hp oder tp ?
weil ich möchte nun 4 von den filtern einsetzen

von matthias (Gast)


Lesenswert?

@benedikt wie hast du den filter berechnet ?
von den bauteilen her ?

von matthias (Gast)


Lesenswert?

lassen sich die bc337 durch bc547 ersetzen ?

von matthias (Gast)


Lesenswert?

mir ist das Prinzip noch nicht ganz klar du sprachest von einer 5,5khz
Trennung ?!
du sendest das volle Audiosignal in den 1.ADC
der Filter sieht mir wie ein Bandpass aus der dann von 5,5khz bis Ende
den 2.ADC versorgt
nun bekommt aber der 1. ADC das volle Programm ?
rechnet also das gesamte Spektrum
das macht das doch langsamer ?
wie wäre es man würde 3 oder 4 Bandpassfilter nehmen
der FFT klare Bereiche zuteilen
oder wie schneidest du das Signal am 1. ADC ab ?
oder ist die 1.FFT im Atmel eine mit nur 11khz Samplerate
die dann bis 5,5 khz den Bereich abdeckt ?
so könnte ich es mir erklären

ich versuche demnächst wenn ich von dir erfahre wie man den Filter
berechnet das Ganze nur bis 2,5khz gehen lassen also die 1.FFT nur 5
khz Samplerate so müsste dann schon wieder ein paar Herz weniger
in den Zwischenräumen gehen könntest du mir mal die entscheidenden
Stellen im Code zeigen ?
bzw mal ne Info über den großen Filter geben :-)
das wäre Klasse
Gruß Matthias

von matthias (Gast)


Lesenswert?

nochmal ne Frage
bevorzugst du keinen Halb oder Vollwellen Ggleichrichter vor dem ADC ?
oder erledigen das die Kondensatoren ..c11...c5 usw..

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei mal die Bandpassfilter eines orginal Audioscope Spectrum Analyzers


die PNG zeigt den 1. und letzen Filter
unten in der Tabelle sind die verschiedenen Werte aufgeführt

von matthias (Gast)


Lesenswert?

anbei noch einige Simulationsprogramme
oder kennst du Benedikt etwas besseres?
http://www.modul-bus.de/compas/compas25/simulat.html

von Benedikt (Gast)


Lesenswert?

Wenn du Low Current LEDs verwendest, und den Strom etwas reduzierst,
dann geht es auch mit BC547. Bei 150mA ist ein BC547 etwas
überfordert.

Die ganzen Kondensatoren am Eingang und direkt vor den ADC dienen nur
als Koppelkondensatoren um das DC Offset zu beseitigen.
Das große Filter ist ein Tiefpass mit etwa 2kHz Grenzfrequenz (etwas
unter der halben Samplerate: 5,5kS/s -> 2,275kHz Bandbreite -> 2kHz
Tiefpass.
Berechnet habe ich das ganze damit:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010007&part=
Es ist eines der besten Programme die ich gefunden habe, das mir die
einfachsten und auch steilsten Filter liefert.

Wenn du also noch eine weitere FFT, z.B. mit 1,4KS/s machen willst,
dann ist ein 500Hz Filter hilfreich.

von matthias (Gast)


Lesenswert?

Wenn du also noch eine weitere FFT, z.B. mit 1,4KS/s machen willst,
dann ist ein 500Hz Filter hilfreich.

wieso dann nicht 700hz bei 1,4KS/s ?

dann bräuchte ich ja einen Tiefpass z.b. mit 500-700hz oder tiefer
danach einen Bandpass wieder einen Bandpass und am Schluss einen
Hochpass

dann wären es 4 Filter die ich in die 4 ADC Eingänge eintreten lasse

Frage: der Tiefpass Filter bei dir muss ja die 1. FFT sein !
und das normale Line die 2. richtig ?

von matthias (Gast)


Lesenswert?

andere Frage wenn ich da nun 4 Filter hinklemme
genügt dann die Rechenleistung des Avrs ?

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Anscheinend hast du immer noch nicht verstanden, wie das ganze
funktioniert:
Jede FFT erzeugt 64 Frequenzen von 0Hz bis SampleRate/2 mit
SampleRate/2/ 64Hz Abstand
Der Tiefpassfilter muss sicherstellen, dass keine Frequenzen größer als
SampleRate/2 an den ADC kommen.
Da braucht man keinen Bandpass, sondern es reicht ein unendlich steiler
Tiefpass mit SampleRate/2 Grenzfrequenz.
Da man sowas aber nicht bauen kann, verwendet man einen Tiefpassfilter
mit einer etwas niedrigeren Grenzfrequenz, damit die höheren Frequenzen
auch wirklich unterdrückt werden. Man kann daher aber nicht alle 64
Werte, sondern eben nur 50 oder 60 davon verwenden. Ich verwende nur
die unteren 30 Werte, um mit einem einfachen Tiefpass mir nur 2 Opamps
auszukommen.
Ich habe mal die FilterLab Datei angehängt, mit dem ich das Filter
berechnet habe.

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei ein Bild !

ich sehe gerade !
es würden 2 Filter reichen
ein Tiefpass von 0 - 250hz in 10hz Schritten
dann ein Bandpass von 300hz bis 2,5khz mit 100 hz Schritten
dann ab 3khz bis 20khz die normale fft verwenden in 1khz schritten

das wäre doch machbar ?

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

frontansicht mit band

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

achso ja dann wären es 2 tiefpässe einer bis 250 hz und einer bis 2,5khz

das wäre aber doch machbar ?

von matthias (Gast)


Lesenswert?

also fang ich mal an !

1. Tiefpass bis 640hz
1. FFT Samplerate 1,28hz
64 Werte kann ich bis 250hz entnehmen
bei einem 4. Ordnung Filter entnehme ich die ersten 25 Werte
also 640hz /64 = 10 Herz Schritte

10hz      110hz     210hz
20hz      120hz     220hz
30hz      130hz     230hz
40hz      140hz     240hz
50hz      150hz     250hz
60hz      160hz
70hz      170hz
80hz      180hz
90hz      190hz
100hz     200hz

diese lass ich an den folgenden Frequenen darstellen
30 40 50 60 80 100 120 160 200 250


2. Tiefpass bis 6,4khz
1. FFT Samplerate 12,8khz
64 Werte kann ich bis 6,4khz entnehmen
bei einem 4. Ordnung Filter entnehme ich die ersten 25 Werte
also 6,4khz /64 = 100 Herz Schritte

100hz      1,1khz     2,1khz
200hz      1,2khz     2,2khz
300hz      1,3khz     2,3khz
400hz      1,4khz     2,4khz
500hz      1,5khz     2,5khz
600hz      1,6khz
700hz      1,7khz
800hz      1,8khz
900hz      1,9khz
1000hz     2,0khz

diese lass ich an den folgenden Frequenen darstellen
300 400 500 600 800 1000 1200 1600 2000 2500


3. normales Audio Signal FFT 16khz
1. FFT Samplerate 32,0khz
64 Werte kann ich bis 16khz entnehmen
bei einem 4. Ordnung Filter entnehme ich die vollen 64 Werte
also 16khz /64 = 250 Herz Schritte

250hz   2,75khz   5,25khz
500hz   3,00khz   5,50khz
750hz   3,25khz   .
1000hz  3,50khz   .
1250hz  3,75khz   .
1500hz  4,00khz   16,0khz
1750hz  4,25khz
2000hz  4,50khz
2250hz  4,75khz
2500hz  5,00khz

diese lass ich an den folgenden Frequenen darstellen
3000 4000 5000 6000 8000 10000 12000 16000

die Filter zu berechnen wären kein Problem !
2 Filter an ADC 2 und 3
an ADC 1 das Line Signal

@Benedikt könntest du mir ein wenig mit dem Code helfen ?
ich kann C aber bin noch nicht soo fit @Assembler

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei die komplette Analyzer Schaltung
so wie ich es mir vorstelle mit den 2 Filtern
evtl könnte ich auch 8. Ordnung aufbauen !
die paar Bauteile...

was meinst du dazu Benedikt ?
also meiner Meinung nach müsste das doch realisierbar sein vom Code
her!

von Benedikt (Gast)


Lesenswert?

Das ganze zu realisieren ist kein Problem, nur etwas Arbeit.
Bei 1,28kHz Samplerate und 128 benötigten Samples benötigt diese FFT
alleine schon 10ms nur zum Daten aufzeichnen -> kontinuierlich Daten in
einen Ringpuffer schreiben und für die FFT nur die neuesten 128 Werte
entnehmen. Dies erfordert aber einen eigenen uC.

von matthias (Gast)


Lesenswert?

um das wäre es mir nicht aber mein problem liegt an 2 sachen

1. problem - assembler ist mir fremd
2. problem meine demo eagle version macht nur die kleine board
und mit ner gecrackten naja du weist schon @fehler 290

die orginale ist mir ehrlich gesagt zu teuer ...
über 1000 euro
für das geld würde ich den obigen audioscope spec analyzer bekommen
:-)

ähm gibt es denn nicht für ein paar hundert euro eine schüler
/studentenversion
bin dieses jahr noch schüler (bos bayern)
nächstes jahr bzw ab juni dann student ...

könntest du mir ein wenig helfen
@code .....
aber du hast doch auch einen filter drinnen
oder weil es nun 2 filter sind ?

von matthias (Gast)


Lesenswert?

ja gut 230 euro für die 100x160 er verison naja....
und 450 für die volle ... ist auch schon viel .... für nen
schüler/studenten....

von matthias (Gast)


Lesenswert?

naja 125 euro für die non profit könnte man sich überlegen ...
aber dann auch nur 160x100 hmmmmmmmmmmmm

von matthias (Gast)


Lesenswert?

Benedikt wenn ich 2 µC verwende wie kann ich dann die Leitungen Sync und
Daten ? multiplexen ?

von Benedikt (Gast)


Lesenswert?

Die uC müssten dann die Daten untereinander austauschen:
Der erste mega8 macht die ganz schnelle FFT und die mittelschnelle
abwechselnd. Sobald eine FFT fertig ist, werden die Daten an den 2.
mega8 gesendet.
Dieser macht die langsame FFT, hat also an sich nicht viel zu tun außer
die Audio Daten sehr langsam aufzuzeichnen und dann eine FFT zu machen.
Wenn diese fertig ist, und die Daten vom ersten mega8 da sind, werden
die 3x 64Bytes zu den Daten für die LED Matrix zusammengefasst und
übertragen.

von matthias (Gast)


Lesenswert?

ja schon klar aber das kann ich net in asm umsetzen leider...

von Benedikt (Gast)


Lesenswert?

Ich bin gerade an der Software.
Die 1,28kHz Samplerate sind kein Problem, aber die 32kHz werden nicht
einfach:
Du nutzt den vollen Frequenzbereich bis 16kHz. Da musst du entweder den
Tiefpass sehr steil machen, oder eine höhere Samplerate verwenden.
Mit 42,67kHz Samplerate hätte man den Bereich bis 21,33kHz mit 333Hz
Auflösung. 3 Stück zusammengefasst und man hat genau das 1kHz Raster.
Der Tiefpass kann dann auch einfacher werden, da er nur bis 16kHz alles
ungehindert durchlassen muss, dann aber bis über 25kHz abfallen kann.

von keksohr (Gast)


Lesenswert?

und bis wie viel mhz müsste man den avr dann jagen damit man 42khz
sampel rate hat?

von Benedikt (Gast)


Lesenswert?

Für 42kHz Sampelrate reichen 1MHz Takt.

von matthias (Gast)


Lesenswert?

konntest du die Dateien in der Email öffnen Benedikt ?

denn wenn ja mache ich die komplette Platine !
den neuen Schaltplan und das Layout !

wie mache ich das nun eine 2. FFT genau so wie die erste und wo
verbinde ich die Atmels ?

von matthias (Gast)


Lesenswert?

Mit 42,67kHz Samplerate hätte man den Bereich bis 21,33kHz mit 333Hz
Auflösung. 3 Stück zusammengefasst und man hat genau das 1kHz Raster.
Der Tiefpass kann dann auch einfacher werden, da er nur bis 16kHz
alles
ungehindert durchlassen muss, dann aber bis über 25kHz abfallen kann.


wie gesagt das wäre ja schon mal super ! aber ich dachte einen 3.
Tiefpass brauch ich garnicht ?
oder doch ?

hab ja nun 2 Filter und einen kompletten Signalgang

von Benedikt (Gast)


Lesenswert?

Die Software muss ich dann erstmal testen. Dazu muss ich erstmal die
Schaltung auf dem Steckbrett aufbauen und das LED Display am PC
simulieren.

Den 3. Tiefpass kannst du weglassen, wenn du sicherstellst, dass keine
Frequenz > halbe Samplerate vorkommt. Das ist bei mir dadurch gegeben,
dass die Soundkarte im PC einen 22kHz Tiefpass eingebaut hat.
Verwendest du dagegen 16kHz brauchst du einen Filter.

von matthias (Gast)


Lesenswert?

also ich möchte ien line in signal am ende anschliesen ...

also einen 3. Filter für 16khz ?
evtl den auch bis 20 khz laufen lassen den Filter
so dass die 16khz noch gut im Bereich sind ?

ging da nicht so wie bei dir auch nur n Kondensator ?

von matthias (Gast)


Lesenswert?

wie sieht das dann mit dem atmels aus also der 2. fft aus ?
wo klemm ich welchen filter hin ?

von matthias (Gast)


Lesenswert?

werden die Transistoren sehr heiss?
konntest du meine Dateien öffnen?

von Benedikt (Gast)


Lesenswert?

Die Dateien konnte ich problemlos öffnen.
Aber das Layout ist nicht dein Ernst oder ?
Du hast doch alle Bauteile einfach nur auf die Platine geschmissen, und
dann den Autorouter drüber gelassen, oder ?
Wenn die Schaltung laufen sollte, dann kann man den AT89C2051 als
absolut stabil gegen alle Arten an Störungen bezeichnen.
Die Transistoren werden kaum warm, sagen wir mal 40° maximal für die
Treiber der untersten LED Reihe, die immer an ist.
Versuch mal das ganze etwas zu ordnen, und die Spannungen von LED
Matrix und Digital ICs zu trennen.

Zur FFT, das ganze wird folgendermaßen ablaufen:
Der AVR der die beiden schnelleren FFTs macht bekommt die 20kHz an ADC0
und die 6,4kHz an ADC1. Dessen TXD Pin geht zu dem RXD des zweiten AVR,
und der Sync Pin ist an INT0 angeschlossen.
Der zweite AVR bekommt an ADC0 das 640Hz Signal.

Eigentlich benötigt jeder ADC Eingang einen eigenen Tiefpassfilter. Da
ich meine Anzeige aber nur am PC betreibe, kann ich mir den Filter für
die 22kHz sparen, da dieser auf der Soundkarte eingebaut ist.

von matthias (Gast)


Lesenswert?

Benedikt es ging mir nur darum, ob du die Dateien lesen kannst!
denn wenn nicht wäre die Mühe eines 100%igen Layouts umsonst gewesen
und bis ich das Tip Top geroutet habe rechne ich mal 1-2Std
klaro ist das nicht mein Ernst
ich habe die Bauteile nur rübergeschoben um zu sehen ob das neue Eagle
auch mit größeren Platinen > 100x160 zurecht kommt !

Werde die Schaltung so anpassen wie du sagst und Posten !

Gruß Matthias

von matthias (Gast)


Lesenswert?

frage du hast ja chebychev filter genommen ?!
warum?
weshalb?
ich hab mich für butterworth entschieden

von Benedikt (Gast)


Lesenswert?

Bei Chebychev ist der Übergang viel steiler als bei Butterworth oder
Bessel.
Ich benötigte einen Filter mit möglichst abruptem Übergang von <+/-1db
auf den entsprechenden Abfall. Bei Butterworth gibt es noch einen
Übergangsbereich, der etwas störend ist.

von matthias (Gast)


Lesenswert?

hab nun n 8. ordnung filter drinnen für die 20khz

von Benedikt (Gast)


Lesenswert?

Ich bin heute nicht mehr dazugekommen die Software zu testen.
Werde das aber morgen machen.
Bis auf die Zusammenfassung der 3x 64 Werte müsste aber jeder uC
alleine schon funktionieren.
Aber so wie ich meine Software kenne, werde ich noch eine Menge Fehler
drin haben...

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

die Schaltung ist nun soweit fertig
ich hoffe ich bekomme alles auf eine 100x160 oder 200mm Platine :-)
es fehlen halt noch die Pforstenstecker für die LED Matritzen die ich
ja schon fertig geätzt gebaut habe

könntest du das mal kritisch anguggen Benedikt ?

von matthias (Gast)


Lesenswert?

ups die Verbindungen der Atmels vergessen....

von matthias (Gast)


Lesenswert?

Zur FFT, das ganze wird folgendermaßen ablaufen:
Der AVR der die beiden schnelleren FFTs macht bekommt die 20kHz an
ADC0
und die 6,4kHz an ADC1. Dessen TXD Pin geht zu dem RXD des zweiten
AVR,



problem : da ist ja schon der display atmel dran ?
oder soll ich den an den 2. fftatmel klemmen ?


und der Sync Pin ist an INT0 angeschlossen.
Der zweite AVR bekommt an ADC0 das 640Hz Signal.

von Benedikt (Gast)


Lesenswert?

TXD von mega8 1 -> RXD von mega 8 2
Sync von mega8 1 -> INT0 von mega 8 2
TXD von mega8 2 -> RXD von 89C2051
Sync von mega8 2 -> INT0 von 89C2051

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

mega8 1 -> 20khz und 6,4khz Filter
mega8 2 -> 640hz Filter
Sync = SCK

dann wäre er nun außer den Pforstenbuchsen für die LEDs
und Masse an den Transistoren fertig

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Bei dem Sync Pin passt was nicht, den habe ich versehentlich doppelt
belegt. Der Sync Ausgang ist der Int1 Pin (PD3) und der Eingang für
Sync ist INT0 (PD2).
Allerdings muss ein AVR warscheinlich durch einen mega32 ersetzt
werden, da 1k RAM nicht ausreichen. Ich benötige wegen dem extra Ring
Samplebuffer für die tiefen Frequenzen 256Bytes RAM mehr, also
1,25kB...
Eine Alternative wäre, den Ringpuffer wegzulassen, was die Refreshrate
aber auf etwa 10fps bei den tiefen Frequenzen reduzieren würde.

Der Code für die beiden schnelleren FFTs in einem mega8 ist soweit
fertig.

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

also kein thema @mega32 dann nehmen wir für die 640 herz geschichte
einen mega32 hab sowas noch daheim
werde sofort den schaltplan ändern !
könntest du mir die software des schnellen mega 8 noch ausbessern @
sync pins ? eilt ja nicht

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei mal den plan !

frage: kann ich das so machen mit den ISP anschluss an dem atmel
dass ich den drann lasse ! an allen atmels  oder streite sich da die
spannung reset z.b. mit dem isp ???

gruß matthias

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

noch die bibliothek für den mega 32

von matthias (Gast)


Lesenswert?

du Benedikt ! kann ich den ISP Adapter, so wie ich ihn auf dem Board 2
mal habe dran lassen oder muss ich den mit einem 9 poligen Dil Schalter
trennen ?

Gruß Matthias

von Benedikt (Gast)


Lesenswert?

Sind die auf dem Plan nicht getrennt (X2 bzw. X4) ?

von matthias (Gast)


Lesenswert?

klaro sind es 2x 9 polige sub d buchsen

aber ich meine zurzeit sind sie ja immer dran also mit den atmels
verbunden
bekomme ich da durch den reset pin oder andere keine probleme ?
da der ja auf +ub ist ?

deshalb dachte ich mir die schaltungen mit dip schaltern zu trennen ?

gruß matthias

von matthias (Gast)


Lesenswert?

ich denke so wie es ist wird es einen Kurzschluss am Reset Pin geben !
anbei mein Schaltplan vom Programmer !
das ISP Teil hab ich integriert in den Schaltplan !
da ist noch ein Taster auf GND
und der Transistor schaltet nach GND
wenn nun also Vb+ am Reset Pin des Atmels so wie du
ursprünglich ihn angebracht hast anliegt gibts n kurzen !

hast du mir n Rat Benedikt ?
das ganze Zeug weglassen und außerhalb vom Analyzer programmieren ?

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

datei vergessen

von matthias (Gast)


Lesenswert?

hab ihn nun rausgeschmissen !!!!!
weil es vermutlich einen kurzen gegeben hätte ! mit dem reset und isp

muss ich den reset pin durch einen dil schalter von der +ub trennen
wenn ich den atmel programiere ?

von matthias (Gast)


Lesenswert?

Benedikt hast du nochmal Zeit für die beiden Codes ?

grüßles Matthias

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Code für die langsame FFT im mega32
Getestet habe ich nur teilweise, mangels vorhandener Hardware

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Und hier noch der andere.

von matthias (Gast)


Lesenswert?

wurde die 640hz FFT durch den Mega 32 nicht schneller oder wieso
schreibst du "langsame"

von matthias (Gast)


Lesenswert?

vielen Dank erst mal für deine Hilfe
weist du wie ich in Eagle mittels ULP die Bibliotheken der zu klein
geratenen Widerstände ändern kann so dass die mit den wirklichen
Größen übereinstimmen

von Benedikt (Gast)


Lesenswert?

Das langsame bezog sich auf die Samplerate.
Der mega32 sollte sich eigentlich die meiste Zeit langweilen:
Er wartet auf die Daten vom mega8, die rund 30-40 mal pro Sekunde
übertragen werden. So hoch ist dann auch die Aktualisierungsrate des
Displays, also 30-40fps was eigentlich schnell genug sein sollte.

Mit Eagle kenne ich mich nicht gut aus, ich bin froh wenn entweder das
Layout oder Schaltplan gut aussieht. Beides gleichzeitig gut zu machen
habe ich noch nicht geschafft.

Kannst du mir mal das Layout schicken, wenn du damit fertig bist ?
Verwendest du die IRF9531 MOSFETs, oder hast du entsprechend starke
logik Level MOSFETs gefunden ?

von matthias (Gast)


Lesenswert?

wollte dich gerade auf die IRF9531 MOSFETS ansprechen
wo hast du die denn gekauft ?
da ich sie beim Reichelt garnicht finde
nun habe mich noch nicht auf die Suche eines anderen Typen gemacht
wenn der Schaltplan zu 100% fertig ist mach ich das Layout !
ich muss noch die Pforstenstecker für die LED Displays anklemmen
dann die 200 Widerstände auf ein anderes Package bringen so dass ich
mit dem Board loslegen kann
klar poste ich das dann !

welche günstigen MOSFETS bieten sich denn an
wir brauchen ja P Channel !

von matthias (Gast)


Lesenswert?

ich sehe dass der IRF9530 baugleich mit dem 31 ist

nunja 0,65 Euro beim Reichelt
wären ja bei 16 Stück 10,4 euro
ginge ja noch
ich denke du hast da keine soo große Auswahl an den P-channel
Transistoren
auf einen IRF wird es rauslaufen !

von matthias (Gast)


Lesenswert?

ich denke aber auch.... nun 5 V für die Transistoren wären Super...
aber so ist halt doch die Spannung des Displays getrennt ...
bzw ich suche mal nach einem logik Level MOSFET

von matthias (Gast)


Lesenswert?

es gäbe da schon...
den FDD5202P zum Beispiel ...
aber woher bekommen ?

von matthias (Gast)


Lesenswert?

ich denke ne andere Firma als Fairchild stellt die nicht her ?
lassen wir den IRF9530 !

von matthias (Gast)


Lesenswert?

ups der IRF9530 ist doch n N-Channel!
Frage: woher bekomme ich die IRF9531??

von matthias (Gast)


Lesenswert?

ich habe eine Bitte Benedikt !
bitte poste mir mal DEINE Eagle Bibliothek wo DEINE Widerstände die du
genommen hast drin sind !
bitte !

von matthias (Gast)


Lesenswert?

ich meine die RESEU-5  mit dem Package R5

von matthias (Gast)


Lesenswert?

sag mal ??? hast du noch eine 3.XX Eagle Version ?????

von matthias (Gast)


Lesenswert?

sag mal...hast du noch eine 3.XX Eagle Version?

von matthias (Gast)


Lesenswert?

Bibliothek müsste "discrete" heissen!
bitte sei so lieb ! sonst kann ich die Packages nicht ändern!
und das Board net machen!

von Benedikt (Gast)


Lesenswert?

Ich habe den Schaltplan mit der Freeware Version 4.13 erstellt. Für was
brauhst du da eine 3.x Version ?

Wenn du Low Current LEDs verwendest, und die Konstantstromquellen auf
50mA auslegst, kommst du auf 1,6A. Dafür reicht dann auch irgendein
Darlington Transistor. Allerdings müssten dann Widerstände zwischen
Transistor und 4zu16 Dekoder eingebaut werden.

Der IRF9530 ist ein P Kanal MOSFET, genauso wie der IRF9531.
Am Anfang wollte ich auch einen anderen verwenden, vielleicht hätte ich
auch einen Transistor verwendet, aber ich hatte noch ein paar IRF9531
hier rumliegen.

von matthias (Gast)


Lesenswert?

nun ich kann die Packages der Widerstände in deinem Schaltplan nicht
ändern da mir anzeigt wird, dass du eine Bibliothek "discrete"
verwendet hast, die früher in der Version 3.XX statt der rcl vorkam
dann tausche ich alle Bauteile von Hand aus, so dass das Rastermaß
passt
beim IRF9530 habe ich mich gestern verlesen!
es ist ein P-Channel!
den nehmen ich auch!

ich gebe dir dann bescheid wenn Schaltplan sowie Board fertig sind!

von matthias (Gast)


Lesenswert?

Benedikt - es tut mir leid!

bitte vergesse das mit den unterschiedlichen Bibliotheken!
es lag an mir!

habe nun gemerkt, dass mein Linux Notebook viele andere Bibliotheken
enthält als mein großer Rechner :-)
unter anderem "discrete.lbr" usw...

bitte nochmals um Verzeichung

Gruß Matthias

von Jens (Gast)


Lesenswert?

@Matthias

Sach mal, gestern 11 Posts in Folge quasi in Abständen von zwei
Minuten, muß das sein? Kannst du nicht mal sammeln und alles in einen
Post schreiben? Wird so leider etwas unübersichtlich.

von matthias (Gast)


Lesenswert?

habe eine Frage an dich Benedikt
mein Terzband ging ja über 28 verschiedene Frequenzen
was hast du mit den restlichen 4 Leds gemacht, die übrig bleiben ?
(vorne 2 hinten 2 )
hast du die noch kleiner / größer gemacht von den Frequenzen ?
dann mein Schaltplan / Layout bildet nun einen 16x32 Kanal Analyzer
den man auch mit 12x28 betreiben kann (so wie ich ihn möchte)

der Frequenzgang beim 32 wäre

20   hz
25   hz
31,5 hz
40   hz
50   hz
63
80
100
125
160
200
250
315
400
500
635
800
1000
1250
1600
2000
2500
3150
4000
5000
6350
8000
10000
12000
16000
20000
22000

und beim 28 er

vorne 2 leds weg und hinten 2 leds weglassen
und im display oben 2 und unten 2 weglassen
so ist nun mein Layout / Schaltplan variabel

bei der 32 Kanal Version lässt sich ja ein anderer Filter ( 22khz statt
16khz ) verwenden und ein anderer Code


könntest du mir noch die Herz aufteilung bei deinem Code pro Led nennen
?

von Benedikt (Gast)


Lesenswert?

Das mit den 25Hz wird nicht funktionieren.
Im Moment habe ich folgende Frequenzen eingebaut:

Band  Bereich  Werte  Zählerwert
10  10    1  12
20  20    1  11
30  30    1  10
40  40    1  9
50  50    1  8
60  60    1  7
80  70-80    2  6
100  90-100  2  5
120  110-130  3  4
160  140-170  4  3
200  180-220  5  2
250  230-290  7  1  12 Werte

300  300    1  10
400  400    1  9
500  500    1  8
600  600    1  7
800  700-800  2  6
1000  900-1000  2  5
1200  1100-1300  3  4
1600  1400-1700  4  3
2000  1800-2200  5  2
2500  2300-2900  7  1  10 Werte

3000  2666-3333  3  10
4000  3666-4333  3  9
5000  4666-5333  3  8
6000  5666-6333  3  7
8000  6666-8333  6  6
10000  8666-11333  6  5
12000  11666-13666  7  4
16000  14000-20000  19  3
18000  18000    1  2
20000  20000    1  1  10 Werte

von matthias (Gast)


Lesenswert?

perfekt! genau so ist es korrekt!
super !

Beschluss: ich kaufe mir nun Eagle
da die gepatchten usw... alle nichts taugen und ich endlich mal in Ruhe
routen möchte
denke das ist eine Anschaffung fürs Leben!

von Benedikt (Gast)


Lesenswert?

Ich hätte mir Eagle auch schon gekauft, aber wenn ich mir jetzt 4.13
kaufe, und in einem Jahr jeder 4.14 oder sonstwas verwendet, dann kann
muss ich doch die Freeware Version verwenden, da man keine neueren
Dateien öffnen kann...

von matthias (Gast)


Lesenswert?

das ist eben auch mein Problem....
nun habe ich einen Weg gefunden es zu routen!
bin seit 2Std dabei
erst einmal Bauteile plazieren sortieren usw..
danach routen!

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei die FFT Platine 160x100 doppelseitig
habe ich gerade a meinen bulgarischen Platinenhersteller
weitergeleitet

nun route ich das Display

von Michael (ein anderer) (Gast)


Lesenswert?

Übel, übel, Deine Platine:

a.) Keine Abblockkondensatoren an den Controllern.
b.) Quarze von den Controllern einen halben Kilometer entfernt.
c.) Versorgungsspannungsleitungen viel zu dünn.
d.) Kein Masse-Konzept.
e.) Rückkoplungsnetzwerke an Deinen OPV viel zu weit entfernt.
f.) Signalleitungen unter den Quarzen.
g.) Analog- und Digitalteil nicht räumlich getrennt.

Das ist ja noch schlimmer als ein Steckboard-Aufbau. Wenn das Teil
halbwegs reproduzierbar funktioniert, grenzt das an ein Wunder.
Vielleicht bekommst Du ja von den 10 Bit der Analog-Digitalwandler
unterm Strich noch etwa 6 Bit raus, mehr wird es wohl nicht werden, der
Rest ist Rauschen und Störungen...

Also, kurz zusammengafasst, in harten Worten: Dieses "Layout" ist
Schrott und Pfusch.

von matthias (Gast)


Lesenswert?

ja? wer meckern kann kanns auch besser machen :-|
ich werde deine Punkte überdenken

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

besser?

von Matthias (Gast)


Lesenswert?

Hi

a) immer noch keine Abblock-C's
b) Versorgungsspannung immer noch über zu dünne Leiterbahnen
c) AVcc nicht extra entkoppelt
d) Einsatz von SMD-Technik verbessert die elektrischen Eigenschaften
drastisch und macht das Layout kleiner.
e) Werf den Autorouter weg

PS:
Eine solche Grafik niemals nicht als JPG sondern als GIF oder besser
noch als PNG. Und dann in einer Auflösung so daß man das Ding auch ohne
scrollen ankucken kann.

Matthias

von keksohr (Gast)


Lesenswert?

smd kann aber nicht jeder löten und deshab fällt es weg...

von Benedikt (Gast)


Lesenswert?

Wenn jemand einen mega8 im TQFP Gehäuse löten kann, sollte er auch mit
SMD Kondensatoren fertig werden...

Ich verwende auf vielen Platinen meist nur eine Art SMD Bauteile: Die
100nF Kondensatoren.
Das spart viel Platz, und nur so kann man die Kondensatoren wirklich da
platzieren, wo sie sein sollen.

@matthias asselborn
Versuch mal an jedes IC 100nF zu hängen, bei mega8/32 auch an AVcc, wie
im Datenblatt. Ansonsten bekommst du ein ziemliches Rauschen.
Weiterhin ist vor allem im Analogbereich eine gute Masseführung
wichtig.
Bei meiner ersten Version hatten immer die untersten 3-4 LEDs
geflackert. Bei der überarbeiteten flackert garnichts mehr.
An jeden verwendeten ADC Pin ein kleiner Kondensator (so ca. 1nF) nach
Masse, und zwar so nah wie möglich am ADC Pin. Das Audiosignal über
einen Widerstand (so 1-2k) einspeisen. Dadurch werden vom ADC
verursachte Störungen durch die Sample&Hold Schaltung vermieden, und HF
Störungen von außen unterdrückt.

von matthias asselborn (Gast)


Lesenswert?

Smd wäre kein Problem für mich zu löten
nur nehme ich Rücksicht auf Keksohr
der den Analyzer auch nachbauen möchte nur mit Eagle noch nicht zurecht
kommt und Probleme mit Smd hat
wird halt eine Universalplatine für 28-32 Band Analyzer
also gut Matthias du hast mir ja schon beim MP3 Projekt geholfen
daher befolge ich auch deine Ratschläge
deine auch Benedikt finde es nur ein wenig schwach
ein Post zu lesen (Michael) das das Layout gleich so abwertet
bin nun mal kein gelernter Elektroniker
befinde mich erst nach ner Lehre auf dem Weg zum diesjährigen
Wintersemester Informatik

von matthias (Gast)


Lesenswert?

.... vielleicht hätte ich schreiben sollen das ich von Haus aus IC
Sockel mit Abblock C's verwende.... 100nF

von keksohr (Gast)


Lesenswert?

mal ne frage, funzt die software schon ?
und kannst du mir eventull noch mal ne avi via mail schicken?
falls es schon läuft? meine addy müsstest du ja noch haben...
die hier stimmt nicht (spam schuzt) @idf-mod.de !

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

du bist ja lustig erst mal müssen die Platinen gemacht das Teil
aufgebaut werden usw...
Benedikt schrieb er testete die Soft am PC da Hardwaremangel..
anbei nochmal n Versuch - Handgeroutet
- Spannung Leitung dick genug
- Massefeld
- Abblock C's durch IC Sockel (den ich drauflöte)
- Kondensatoren ganz nah an den ADC's
- Widerstände in Reihe des Signals zum ADC
- png datei

von Michael (ein anderer) (Gast)


Lesenswert?

@matthias:

Was ist Dir lieber: Gar kein Kommentar und Du bekommst das Teil nicht
zum laufen, oder einen ehrlichen Kommentar der zeigt, wo die Probleme
liegen?

Kritik ist immer hart, wenn man sie bekommt. Aber man darf da keine
falschen Gefühle daraus ziehen, sondern Kritik muss man als Chance zu
verstehen versuchen.

Sieh's mal so: Hätte ich nicht so einen direkten Kommentar
geschrieben, hätten wir jetzt keine Diskussion üder das Layout mit Tips
für Dich. Du würdest nichts lernen.

Und ich habe noch einen Tip für Dich, bzw. Hinweis: Du kannst mit den
AtMegas keine Sockel mit inegrierten Abblockkondensatoren verwenden.
Die sind nämlich in den Sockeln an verkehrter Stelle eingebaut. Das
funktioniert nicht.

Und noch einige Tips zur Spannungsversorgung und Masseflächen:

Da Du zweiseitig routest, machst Du folgendes: Die Anschlüsse für die
Versorgungsspannung in der Mitte der Längskante der Platine.
Unmittelbar nach der Anschlussklemme kommt ein kleiner Elko und ein
Keramikvielschichtkondensator (100nf) hin. Von den Anschlüssen der
Kondensatoren geht einmal Plus und Masse zur digitalen Platinenhälfte,
und einmal zur analogen Platinenhälfte. Als Masse verwendest Du eine
Massefläche auf der Lötseite. Allerdings trennst Du die Fläche in zwei
Teile auf. Ein Teil der Massefläche nur für die analoge Seite, und der
andere Teil nur für die Digitale Seite. Zusammengeführt werden die
Masseflächen an einem einzigen Punkt, nämlich am Anschluss des 100nf
Kondensators unmittelbar hinter der Versorgungsspannungsklemme.

Du musst darauf achten, dass Du zwei getrennte Schleifen für den Strom
baust. Eine Schleife für den Digitalteil, und eine Schleife für den
Analogteil. Der Versorgungsstrom soll nicht in einer großen Schleife
durch Analogteil und Digitalteil fliessen. Und eben die Schleifen am
Kondensator an der Anschlussklemme zusammenführen.

von Michael (ein anderer) (Gast)


Lesenswert?

Nochmals wegen Sockel: Wenn Du einigermassen löten kannst, lass die
IC-Sockel ganz weg. Die machen Dir effektiv mehr Probleme als sie
lösen. Und wenn ein IC doch mal elektrisch kaputt gehen sollte, kannst
Du es auch mechanisch kaputt machen in dem Du alle Beinchen abzwickst
und die Beinchenstummel dann in Ruhe und schonend aus der Platine
auslötest.

von matthias (Gast)


Lesenswert?

Hast schon recht! ich baue nun den Schaltplan um danach das Layout!
ein Kumpel hilft mir nun.

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei der umgezeichnete Schaltplan!

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei meine plazierte Platine
hab ich nun selber gemacht da scheinbar jeder grad krank ist!

bitte um kritik
was soll ich verbessern?

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei die geroutete
hab ich nun doch selber gemacht/machen müssen
so was ist nun noch sch..... ?
das hervorgehobene ist die Masse

von Benedikt (Gast)


Lesenswert?

Mittlerweile gibt es auch elm-chan.org auch C Routinen, die die FFT
verwenden:
http://elm-chan.org/docs/avrlib/avrfft.zip

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

nun hat mir n Elektroniker geholfen
--> Danke Sven!
anbei Schaltplan und Layout!
nun lasse ich das ätzen!

Gruß Matthias

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

anbei die FFT Platine

von Falk (Gast)


Lesenswert?

hi,

wo lässt du solche "Einstück" Leiterkarten machen? Und was kosten
die?

gruss

von Matthias Asselborn (Gast)


Lesenswert?

20 euro kostete die platte !
+ versand natürlich
bei einem Freund aus Bulgarien
der hat ne Leiterplattenfirma !

icq 259-606-808
www.bilex-lp.com

17 euro ohne Lötstopp
Grüßles Matthias

von Matthias Asselborn (Gast)


Lesenswert?

da sind auch schon die oberen platten her ( display usw..)
top firma netter kontakt - sprechen deutsch
einwandfrei kann ich nur sagen saubere arbeit !

grüßles matthias

sorry 17 euro war für eine 160x100 doppelseitig + durchkontaktierung
bei 15 euro liegt eine 80x100 doppels + durch kontakt nur meine hab ich
noch mit lötstopp lackieren lassen

bieten nun auch nikel gold technologie für smd und normale bauteile zum
selben preis an !

von Matthias Asselborn (Gast)


Lesenswert?

da sind auch schon die oberen platten her ( display usw..)
top firma netter kontakt - sprechen deutsch
einwandfrei kann ich nur sagen saubere arbeit !

sorry 17 euro war für eine 160x100 doppelseitig + durchkontaktierung
bei 15 euro liegt eine 80x100 doppels + durch kontakt nur meine hab ich
noch mit lötstopp lackieren lassen

bieten nun auch nikel gold -bleifrei- technologie für smd und normale
bauteile zum selben preis an !

grüßles matthias

von Jens (Gast)


Lesenswert?

> (ein vergleichbares C Programm ist um den Faktor 10-100
> langsamer !!!!)

Wie hast du das getestet bzw. woher kommt die doch sehr große Spanne
(1-100)?

von Jens (Gast)


Lesenswert?

Sorry, meinte natürlich 10-100 :)

von Benedikt (Gast)


Lesenswert?

Ich habe diverse FFT Algorithmen ausprobiert. Da die meisten für PCs
waren, wurden Fließkommazahlen verwendet.
Integer Routinen waren natürlich schneller, aber immer noch um ein
Vielfaches langsamer.
Im Durchschnitt kam ich auf etwa 1 Ergebnis pro Sekunde !

von Peter (Gast)


Lesenswert?

Hallo,

mal eine kleine Frage?
Die jeweiligen FFT Methoden, die als Beispiele gepostet worden sind,
verlangen jeweils als Übergabeparamter den realen und den imaginären
Anteil des Eingangssignal. Kann man davon ausgehen, daß der imaginäre
Anteil lediglich auf 0 gesetzt wird. Oder muss das Inputsignal vorher
konvertiert werden, bevore die FFT genutzt werden kann?


Danke,
Peter.

von Neugieriger (Gast)


Lesenswert?

An:  Matthias Asselborn

Habe mir knappe Stunde Zeit genommen und alles gelesen. Mir fehlt das
Happy End. Funktioniert deine Platine und die FFT? Hast du vielleicht
ein Bild?

von Matthias Asselborn (Gast)


Lesenswert?

Sorry du... hab die geätzte Platine immer noch bei mir liegen sowie das
gesamte Display ect....
hatte in letzer Zeit viel zu lernen
Studium ect.... und andere Projekte am laufen
ein BassHorn da ein Mitteltonhorn da...
die Semesterferien sind natürlich zum arbeiten da g sowie jedes
Wochenende...
hatte genau 4 Tage in diesem Jahr Urlaub... (wenn man das so nenne kann
....)

evtl Ende des Jahres nehme ich mir Zeit
und dann kommt schon noch das Happy End !!!!!!!!!

von Andreas Fertl (Gast)


Lesenswert?

:P

hatte 9 tage Urlaub seit nehm jahr...
Immerhin über 100% mehr :)

@Peter

wenn du ein Signal hast dass nur reele Werte liefert, dann wird der
imag. Teil der FFT auf 0 gesetzt.

Grüße Andreas

von Tobias R. (wildcard)


Lesenswert?

Ist es der ganz oben geposteten ASM FFT egal, in welchem Pegel Bereich
das Singal liegt? Also den ADC mit 2.54V, VCC oder AREF betreibe bleibt
mir überlassen, solange mein Signal kommplett in den Bereich 0V->XV
passt?

von Matthias Asselborn (Gast)


Lesenswert?

sach mal Benedikt könntest du mir die 2 Codes für den Atmel 8 und 32
compilieren ?
hab leider keinen asm Compiler da ...
restliche Platinen sind nun fertig bestückt
es fehlt nur noch am Code zu nem Happy End
gruss Matthias

von Matthias Asselborn (Gast)


Lesenswert?

les ich da fhk community?
na dann studieren wir schon an der selben Schule

@Benedikt - oder sag mir einfahc mit was du es getipt hast nen compiler
werde ich scho auftreiben - sollte halt zusammen passen

gruß Matze

von Matthias Asselborn (Gast)


Lesenswert?

Hallo

hab grad versucht die FFT für den Mega32 zu compilieren erhielt aber
folgende Meldung:


AVRASM: AVR macro assembler 2.1.0 (build 38 Oct  1 2005 03:07:42)
Copyright (C) 1995-2005 ATMEL Corporation
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(7):
Including file 'C:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\m32def.inc'
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(8):
Including file 'C:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\avr.inc'
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(9):
Including file 'C:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\akiglcd.inc'
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(16):
warning: Register r12 already defined by the .DEF directive
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(17):
warning: Register r15 already defined by the .DEF directive
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(18):
warning: Register r25 already defined by the .DEF directive
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(586):
No EEPROM data, deleting C:\Dokumente und Einstellungen\Matthias
Asselborn\mega32.eep
ATmega32 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000708   1160    640   1800   32768   5.5%
[.dseg] 0x000060 0x000523      0   1219   1219    2048  59.5%
[.eseg] 0x000000 0x000000      0      0      0    1024   0.0%
Assembly complete, 0 errors. 3 warnings

aber er spuckt kein Hex File aus...
könntest du Benedikt mir die des Mega 8 und 32 compilieren?
Gruss Matthias

von Matthias Asselborn (Gast)


Lesenswert?

habs nun doch hingebracht ... im richtigen Ordner sollte man suchen
....
aber beim mega 32 3 warnings beim mega 8 nur 2 g
ich brenn se mal Ende der Woche auf die Atmels und teste mal das ganze


könntest du Benedikt mir die 2 codes doch nochmal compilieren ?
die 2Codes für Mega 8 und 32 der 1/3 octav Version - mit dem Led
Display

Gruss Matthias

von Tobias R. (wildcard)


Lesenswert?

Moin Jungs,
hab mich jetzt näher mit dem Code  auseinandergesetzt. Möchte eine
externe Wave-Datenquelle für eine 128 FFT verwenden.
Reicht es so wie ich es vorhabe 128 16Bit Werte hintereinander signed
an "CaptBuf" zu schreiben? Und den ADC Interrupt durch meine eigene
Routine zu ersetzten?

von Moe (Gast)


Lesenswert?

Hallo, kann mir jemand erklären wie man bei dem ASM code (von ganz oben
oder auch in der mitte...) auf die 11,1khz bzw. 22,2 khz sampling rate
kommt. Einmal is doch die Taktteilung von 64 und dann von 128 für den
ADC da komm ich auf andere werte für 18,432 MHz systemtakt??

von Matthias Asselborn (Gast)


Lesenswert?

Hallo, kann mir jemand erklären wie man den Code richtig compiliert?
mit welchem Programm?

von Moe (Gast)


Lesenswert?

den asm code compilier ich immer mit dem avr studio von atmel.
den c code am besten mit avr-gcc oder winavr.

Jemand ne antwort auf meine frage? :)

von Matthias Asselborn (Gast)


Lesenswert?

hab ihn mit avr studio compiliert nur da kommen pro chip 2-3
warnings....

gruss matthias

von Moe (Gast)


Lesenswert?

was denn für fehler??
also bei asm dürfte die fehlerbehandlung kein problem sein.
da du grad am antworten bist, kannst du drei posting hoch scolln und
mir das erklärn?

von Matthias Asselborn (Gast)


Lesenswert?

die warnings wo ich weiter oben gepostet habe

wie rechnest du ?

von Moe (Gast)


Lesenswert?

hmm das sind ja nur warnings, deshalb müsste er die hex ausspucken,
vielleicht heisst die auch nur anders weil du irgendwo was anderes
eingestellt hast, klickst du auch immer auf built?
Die warnings mit r15 und r25, liegt daran das die schon vorher in
avr.inc deklariert wurden..
Das mit dem eeprom kann daran liegen das du einfach keine eeprom daten
im code hast, der compiler aber so eingestellt ist das er welche
extrahieren soll.

wie ich rechne?
also im code wird doch der takt für den ADC eingestellt.
und zwar hier:
outi  ADCSRA, 0b11101111
dabei bedeutet das die bit0 bis bit2 also (111) den cputakt teilt und
lautdatenblatt ist das bei 111 durch 128->also 18,432 MHZ durch 128
sind gleich 144KHz und nich 11,1Khz so wie es dasteht??

von Matthias Asselborn (Gast)


Lesenswert?

eine hex spukt er scho raus halt mit den warnings...
aber mal testen !
ja ich teilte die 128 auch durch die 18 nochwas
wobei die muss anders gehen ...

von Moe (Gast)


Lesenswert?

Kann mir jemand ganz simpel erklären wie die grössen bei der FFT
zusammenhangen. Also was ist die Sample Rate, was beudeutet z.b. 128
Punkte FFT,was ist das Spektrum und wieso wird der Frequenzbereich
durch den Tiefpassfilter (max297) eingegrenzt und was bedeutet das?
Also wie hängen die ganzen grössen zusammen.

von Matthias Asselborn (Gast)


Lesenswert?

Hallo!

also :

Die Sampling-Rate bestimmt beim Digitalisieren von unserer Signalquelle
(Musik), wie oft das analoge Audiosignal pro Sekunde abgetastet werden
soll

Bei einer Sample-Rate von 44.1 kHz (Sample-Rate einer Audio-CD) wird
das Audiosignal 44100 Mal pro Sekunde abgetastet

je höher also desto besser!

in unserem Fall eine 128 Punkte FFT
in eienr 128 point FFT
werden 128 Punkte(Frequenzen) herausgezogen vom Frequenzspektrum und
diese dann ausgewertet
Frequenzspektrum - Frequenzbereich von 0 bis halbe Samplerate Herz

je mehr Punkte du hast z.b. 512 oder 1024 desto genauer wird deine
Frequenzanalyse! aber auch rechen intensiver!
bei uns reichen 128 Punkte und der Atmel komt noch gut mit !
exakter wären 512 wobei du dann "mehr Power" brauchst evtl einen
digitalen Signalprozessor! (DSP)

nun deine letze Frage wieso er mit einem Tiefpassfilter begrenzt wird
- in der Mitte des Threads ist mal n Schaltplan mit 2 Tiefpassfilter da
ich den Analyzer im 1/3 Oct Schritt baue

der Tiefpass trennt salopp gesagt den Frequenzbereich ab
das nur ein geringerer Frequenzbereich in den Atmel kommt so lässt sich
eine eine exaktere Auswertung machen
- in meinem Fall
habe 3 Tiefpassfilter und 2 Atmels mit FFTs
somit wird der Frequenzbereich pro Atmel aufgeteilt
und diese können dann exakter / schneller arbeiten
wenn alles per DSP gelöst werden würde bräuchten wir solch einen Filter
nicht

kurz gesagt der Filter teilt quasi dem Atmel Frequenzbänder zu
die dann schneller bearbeitet werden können !

Gruss Matthias Asselborn

von Moe (Gast)


Lesenswert?

hmm Danke erstmal..aber es tun sich neue fragen auf:)
also der ADC tastet das signal 44100 mal pro sekunde ab. Jedesmal wenn
er   abtastet, liefert der adc eine 8 bit zahl (bei einem adc mit 8 bit
auflösung). Das ist doch erstmal richtig oder? Quasi macht er aus einem
zeitkontinuierlichen Signal ein zeitdiskretes?
So und bei einer 128 point FFT wird jedesmal beim abtasten nich nur 1
8bit wert gespeichert, sondern 128 8bit werte oder? das wären ja dann
bei einer sample rate von 44.1khz gleich 441000 mal 128 abtastwerte pro
sekunde??

von Jens (Gast)


Lesenswert?

> So und bei einer 128 point FFT wird jedesmal beim abtasten nich nur 1
> 8bit wert gespeichert, sondern 128 8bit werte oder?

Zu jedem Abtastzeitpunkt wird ein Wert gespeichert, geht ja auch nicht
anders. Wie willst du mehrere Werte pro Zeitpunkt speicher? Zu jedem
Zeitpunkt hat das Signal einen ganz bestimmten Wert. Bei einer 128
Punkte FFT nimmt man dann einfach 128 aufeinanderfolgende, gespeicherte
Werte (z. B. aus einem Buffer) und führt die Berechnung durch. Bei einer
Abtastrate von 44100 Hz bekommst du pro Kanal 44100 Werte pro Sekunde.

von Moe (Gast)


Lesenswert?

achso, jep...hab das ein bissl durcheinander gehaun....
eine grafik wo, man sowas schön sieht wär nich schlecht..

von matthias asselborn (Gast)


Lesenswert?

hmm ne grafik .... hmmm
mal suchen ...

von Martin Schweiger (Gast)


Lesenswert?

Hi Gang, ich habe Euren thread wegen dessen Länge leider nur kurz
überfliegen können. Da wart Ihr wirklich wacker bei der Entwicklung,
man kann richtig neidisch werden!

Ich bin beim googeln auf Euch gestoßen, denn ich suche eine
Spektrumsanalyse für HF. Habt Ihr eigentlich mal konkret dran gedacht,
einen DSP zu verwenden, wie Matthias Asselborn? So ein DSP macht eine
Spektrumsanalyse hardware-mäßig besser als es ein Algorithmus jemals
hinbekommen kann. Was hindert Euch, zu solchen Werkzeugen zu greifen?

Ich habe mich mit der Sache noch nicht so sehr befasst, darum mag das
für Experten wie Euch etwas unüberlegt klingen. Welche Schwierigkeiten
gibt es dabei?

Ich frage nur, denn ich denke an Frequenzen von 1 kHz bis 3 GHz, das
ist ab 25MHz für jeden PIC zu schnell.

viele Grüße aus Singapore
Martin

von ¹²³ (Gast)


Lesenswert?

Sicher, für ein DSP ist eine FFT ein Kinderspiel. Der Reiz hier in
diesem Thread war ja eigentlich, dass man auch mit so einem
"popeligen" AVR eine brauchbare FFT hinbekommt. Und DSPs, die FFT
hardwaremäßig beherrschen, sind schwer erhältlich, teuer und aufgrund
des Gehäuses oft schlecht zu handhaben. Und für einen einfachen Audio
Spectrum-Analyzer braucht man ja keinen 1 GFLOP 32-Bit Fließkomma DSP,
oder?

von Matthias Asselborn (Gast)


Lesenswert?

ja genau in diesem Thread ging es darum eine brauchbare FFT mit normalen
µC zu erzeugen

die DSPs mit FFT sind unbezahlbar...... und die erst mal anzusteuern
...
geschweigedenn hobbymässig auf ne Platine zu bringen ?!....
wobei in einem früheren Elector mal ein Vu Meter mit einem DSP
vorgestellt wurde
hab den Eeprom noch da der den DSP speisst...
naja den Ti DSP gibt es mittlerweile auch nicht mehr
war einer mit 40Mhz oder sowas ... damals 10-20 DM
nun wenn man das ein wenig umbaun würde..
aber ich bin mit der AVR Version zufrieden !
n DSP wird ja auch anders programmiert wie n Atmel ...
bis man den erst mal dort hin bringt wie man es möchte...
vergeht ne menge Zeit ...
gruss Matthias

von Martin Schweiger (Gast)


Lesenswert?

ok, hab's verstanden. vielen Dank! Martin

von Moe (Gast)


Lesenswert?

hi,
von ape (weiter oben im thread) gibts doch diese schaltung (siehe
Anhang).
Muss man bei dei OP's -6 Volt anlegen? GND müsste doch auch reichen,
da die negativen amplituden eh nich gebraucht werden oder? Und anstatt
+6 Volt müsste doch auch +5 Volt reichen. Weil die unterschiedlichen
Spannungen zu generieren macht mir zu schaffen..

Ausserdem weiss ich nich was die zwei potis (r11 und r10) nach der
op-schaltung solln. Oder sind das garkeine Poti's?

Kann mir da jemand weiterhelfen?

von Moe (Gast)


Angehängte Dateien:

Lesenswert?

Ups, Anhang vergessen, hier ist er.

Vielleicht jetzt ne antwort? :)

von Matthias Asselborn (Gast)


Lesenswert?

Hi!

naja hab meinen Schaltplan etwas anders aufgebaut mit mehreren
Tifpassfiltern da ich ja 3 FFTs habe und 1/3 Oct darstellen möchte
....aber die Potis sehen wie ne ?! Lautstärkereglung des
eingangsignales ?! aus ...

Gruss Matthias

von Neugieriger (Gast)


Lesenswert?

@Matthias
Wollte mal den derzeitigen Stand deines Projektes erfahren. Hat dein
Comilieren und der Aufbau der Schaltung geklappt?

von Matthias Asselborn (Gast)


Lesenswert?

Platinen sind nun alle geätzt!
habe mir nun ein für alle mal das orginal Eagle von CAD Soft
gekauft...
zwar deftig für nen armen Studenten wie mich aber immerhin kein
Ärger mehr mit 80x100 Platten !
habe sogar von CAD Soft bei PCB Pool nen Gutschein
für ne doppelseitige 100x160 erhalten!

compilieren ging mit dem AVR Studio gut
bis auf viele warnings... von dene ich keine Ahnung hqabe..
n Kumpel hat auch schon alle Atmels für mich "gebrannt"

nun fehlt das Geld für die Bauteile...
ja lacht nur.... hätt auch net gedacht das man als Student
dauer Pleite is g

mein Studium wird vom Bundesamt für den Zivildienst im Januar
zwangsbeendet!

bis dahin werde ich mich wohl noch ein wenig gedulden müssen ...
mit dem Bauteilekauf !

Gruss Matthias Asselborn

von Neugieriger (Gast)


Lesenswert?

@Matthias
Wenn dein Studium schon länger als 3 Semester dauert, hast du eine gute
Chance durch Einspruch eine Aufschiebung bis nach dem Studium zu
erreichen. Dazu würde ich auf jeden Fall mehrere Stellen anschreiben
(Amt für Zivildienst, Petitionsausschuss des Bundestages,... je mehr
umso besser).
Welche Version von Eagle hast du gekauft? Gabs als Student Bonusrabatt?
Hatte überlegt mir Target zuzulegen (oder SprintLayout (billig und mehr
als zweiseitig kann man zu Hause eh nicht ätzen)).

von Matthias Asselborn (Gast)


Lesenswert?

leider geht's noch nicht so lange
ansonsten wäre ja alles halb so wild
(Rückstellungsantrag und gut fertig)
und wenn mir da nicht ein Mädchen so gut gefallen würde, welches ich
dann nie wieder sehe ... seufz - egal <--- offtopic lol

habe mir die No Profit Version für Windows und Linux gekauft
für ähm insgesamt 140-150 glaube ich +/- paar Euros...
-Schaltplan
-Router
-Board
beschränkt auf 160x100
naja immer noch besser als deie 80x100 wenn ich ehrlich bin!

möchte demnächst mal das Projekt abschliessen
aber zurzeit fehlts noch an Bauteilen!

Gruss Matze

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

Erst mal n frohes Neues!
es fehlt noch die letze Platine (is grad beim ätzen)
Bauteie hierfür hab ich schon
dann teste ich das ganze mal an
sagt mal mit was compiliere ich den Display code?
geht das im CodeVision? oder habt Ihr AVR Studio genommen?

Gruss Matze

von Matthias Waldhauer (Gast)


Lesenswert?

@Benedikt:
"Mit einem entsprechend schnellen uC mit viel Rechenleistung und
ausreichend RAM (64kB sollten es schon sein) reicht auch eine einzelne
FFT. Am PC erreiche ich 1,5Hz Auflösung bei einem Frequenzbereich von
0-48kHz. Allerdings ist mein Athlon 64 dann voll ausgelastet, wenn er
das ganze flüssig darstellen soll..."

Das hört sich nach 32k Frequenzbändern bei 96kHz Samplerate an. Ist das
eine Anwendung? Jedenfalls wäre wohl eine 64k FFT notwendig.

Bei FFTs kann jedenfalls immer viel optimiert werden. Ansatzpunkte
sind: verw. Algorithmen (Radix-4, Radix-8, Split-Radix, Real-FFT usw.),
Tabellen (v.a. Sin/Cos), möglichst keinen "hübschen"
objektorientierten Code ;) (hab in einem Projekt eine FFT in Java
gebraucht, die vorwiegend OO-Variante war Faktor 8-10 langsamer),
notfalls Assembler (Prime95's FFTs sind immernoch ca. Faktor 2-3
schneller als äquivalente FFTs der zu den schnellsten Libs gehörenden
FFTW-Library).

Zu Prime95: George Woltman hat dort optimierte Assembler-FFT-Makros
sowohl für K8 (also Athlon 64, Opteron, X2 usw.) als auch P4 und P3.
Insgesamt ist die FFT mit dem Split-Radix-Butterfly nicht mehr so
hübsch wie die meist verwendeten Radix-2-Butterflies. Aber <10 ms für
eine 64k FFT klingen doch gut, oder? ;)

Manchmal hängts auch woanders (z.B. Darstellung). Oder man könnte
gleich auf der Grafikkarte rechnen (wurde schon getan).

von Heinz (Gast)


Lesenswert?

Hallo,

ich soll auf einem ATmega16 euer Programm vom ATmega8 zum laufen
bringen.
Bekomm es einfach nicht hin. Eigentlich dürfte es doch keine Probleme
geben, oder?
Worauf muss ich achten?
Hat es schon einer ausprobiert?

Gruß Heinz

von Matthias Waldhauer (Gast)


Lesenswert?

@Heinz:
Ich habe hier auf 16MHz Atmega32 gerade eine C-Version fertig mit
ASM-Unterstützung (Code etwa 4,7k + Tabellen im Flash-Speicher). Die
Variante braucht bei einer 256er FFT (dafür würde auf Atmega16 schon
das SRAM nicht reichen) ca. 59ms mit C-Fixed-Point-Multiplikation und
20ms mit der Routine von AVR (welche auch in den Includes hier zu
finden ist). Die reine ASM-Version braucht laut Zeiten im ASM-Code so
10 ms (wenn ich mich richtig erinnere). Aber den Code dürfen wir eh
nicht verwenden. Er wäre auch etwas schwierig anzupassen.
Also den Weg gäbe es auch..

von hase (Gast)


Lesenswert?

Hi,
leider ist die Apetech-Seite down, gibts davon vielleicht ne neue 
Adresse?

von borec (Gast)


Lesenswert?

hello, this: http://www.mikrocontroller.net/attachment/9171/IMG_4401.JPG 
picture is very super, and I please you, send me schematic and software 
for it. very thank you.

P.S. Excuse please my poor English

von Sven (Gast)


Lesenswert?

Hi,

ich habe mal zu dem ganzen ein paar Fragen.
Ich möchte ebenfalls mit einem AVR eine FFT machen. Allerdings nur im 
Bereich von 0-500Hz. Die Auflösung sollte dabei schon recht groß sein 
sprich am besten 1Hz Abstände. Das ganze ist auch nicht unbedingt 
Zeitkritisch, da ich das Signal nur auswerten und nicht darstellen 
möchte. Ich hatte dabei an den internen ADC z.B. vom Mega64 oder Mega128 
gedacht und für den Speicherbedarf externen Speicher über i2c oder SPI. 
Das Siganl wollte ich für max 1 Minute loggen und anschließend in 
kleinen Stücken auswerten.
Ist das ganze möglich oder mache ich hier einen Gedankenfehler? Ist es 
überhaupt realisierbar? Was meint ihr?

Vorab schon mal Danke.

von pumpkin (Gast)


Lesenswert?

Also eine Auflösung von 0-500Hz benötigt 1000Hz Abtastrate. Bei 10 Bit 
ADC-Auflösung sind das 10Bit * 1000/s * 60s/min / 8Bit/Byte / 
1024Byte/KByte = 73,24KByte/min. Problematische ist die Verwurstung der 
10Bit, besser man rechnet mit 16Bit. Wenn du eine Auflösung von 1Hz 
haben möchtest musst du mindestens eine 1000-Punkt DFT/1024-Punkt FFT 
machen. Das bedeutet, dass du ein 1s-Fenster betrachtest oder ein 
kürzeres Fenster nimmst und zero-padding machst. Mit genügend Speicher 
und Zeit ist das machbar.

pumpkin

von August (Gast)


Lesenswert?

Hallo Sven,
es gibt ein Verhältnis zwischen Abtastrate, Auflösung und
notwendiger Stützwerte.

Ich habe es mal überschlagen... bei 2 kHz Abtastrate und
und einer Auflösung von knapp unter 2 Hz komme ich bei
mir auf einen Speicherbedarf für die FFT von 6 kB, wenn
die vollen 10 Bit A/D-Auflösung in 16-bit-Worte umgelegt
werden sollen. Bei nur 8 Bit Auflösung käme ich mit 3 kB
hin.

Also mindestens ATmega644 oder ATmega128 bei 8 Bit Auflösung,
ATmega2560 bei 10 Bit Auflösung, wenn die FFT-Daten nicht
mühsam zur Berechnung jedesmal aus der CPU heraus- und
in die CPU hereintransportiert werden sollen.

Bei 1 kHz Abtastrate und gleichen Randbedingungen zum
Speicherbedarf käme eine Auflösung um 1 Hz zu Stande,
aber die obere Messfrequenz von 500 Hz ist dann schon
kritisch.

Mit Abtastraten von 1 oder 2 kHz sollte das Zusammenstellen
der Stützwerte die zeitbestimmende Größe sein und es
muss nicht unbedingt in Assembler gearbeitet werden.
Ohne externes SRAM oder DRAM sprengt eine Erhöhung der
Abtastrate sehr schnell die Möglichkeiten des AVR - da
sollte also kein Ehrgeiz hinein gesteckt werden.
2 kHz als obere Grenze scheinen angebracht.

Bei 1024 Stützwerten mit 16 bit und 2 kHz Abtastrate
kommen in einer Minute ca. 120 kB an Daten zusammen.

So bescheiden die Forderung "nur 0...500 Hz" klingt,
so anspruchsvoll ist der Wunsch nach einer Auflösung
von 1 Hz.

August

Bühne frei für die Besserwisser.

von Sven (Gast)


Lesenswert?

Hallo August,

danke für die schnelle Antwort.
Sicherlich ist der Bereich von 0-500Hz sehr bescheiden, aber mehr wird 
eben nicht benötigt. Allerddings ist mein Problem, das ich ein recht 
unsauberes Signal erwarte, das ich außwerten muß. Im Grund ist in dem 
Signal eine Bestimmte Frequenz "versteckt", aus der ich die 
Geschwindigkeit eines Objektes ableiten muß. Von daher brauche ich dann 
schon die hohe Auflösung um die 1Hz.

Ich habe da gerade noch eine andere Frage, wie kommt man denn auf eine 
Abtastrate von 2kHz? Ich dachte mit dem ADC kann man z.B. Mega16 nur 
einen Scaler von 128 einstellen und bei 8MHz wären das dann doch 
62,5kHz. und selbst wenn man nun sagt das der ADC 13 clk braucht zur 
Umsetzung, dann wären das doch noch immer 4,8kHz pro Abtastwert. Oder 
liegt hier ein Gedankenfehler meiner seits?

Bezüglich des Speicherbedarfs hatte ich, obwohl ich davon erst Abstand 
nehmen wollte bezüglich der beschränkten Schreibzyklen, einen EEPROM 
nehmen mit i2c. Der i2c sollte ja für Daten schnell genug sein, 
allerdings bin ich nicht sicher, ob der EEPROM da mitkommt. Gibt es denn 
großen SRAM oder DRAM mit i2c oder SPI?

von August (Gast)


Lesenswert?

Hallo Sven,
man muss unterscheiden zwischen Abtastrate (= Abstände, in
denen A/D-Proben genommen werden) und Umwandlungszeit des
A/D selber.
Über CPU-Takt und Prescaler definiert sich die Wandlungszeit
des A/D. Die sollte natürlich im Idealfall kürzer sein, als
Abstände, in denen A/D-Werte benötigt werden.
Auf den ersten Blick scheint die Wandlungszeit des A/D
ziemlich unwichtig erscheinen, in der Praxis jedoch kann
von einer geschickten Wahl des Prescalers und des CPU-Taktes
einiges abhängen.

500 Hz als obere Grenze ist absolut in Ordnung - meine
Bemerkung "bescheiden" sollte nur unterstreichen, dass ein
AVR das in einer FFT leicht bewältigen kann.
Der Knackpunkt ist die Forderung nach 1 Hz Auflösung.

Die 2 kHz Abtastrate habe ich willkürlich gewählt als ein
Vielfaches von der oberen Spektrumfrequenz 500 Hz, um
die Überschlagsrechnung anstellen zu können. Die minimale
Abtastrate sollte 1 kHz nicht unterschreiten.

Soll die Forderung "1 Hz Auflösung" stehen bleiben, würde
ich mich von ATmega32 und auch ATmega128 direkt verabschieden
und zu einem ATmega2560 mit 8 kB RAM greifen. Damit kann
man dann bequem alles im RAM berechnen und vermeidet zahl-
lose I/O-Zugriffe auf serielle Datenspeicher.
Dann geht das auch in C und muss nicht Assembler sein.

Statt EEPROM würde ich FRAM nehmen. Die sind schneller beim
Abspeichern, haben praktisch RAM-Eigenschaften und sind
auch in brauchbaren Kapazitäten erhältlich. Man bekommt
FRAM-Bausteine bei ebay.

Es stellt sich natürlich die Frage, warum das überhaupt
mit einem Mikrokontroller bewerkstelligt werden muss.
In Frage käme auch ein PC/Notebook mit Soundkarte.
Oder ein einfacher Datenlogger mit anschließender Ver-
arbeitung in einem PC/Notebook.

Soweit zu dem Thema - es hat bestimmt noch Leute im Forum,
die dazu qualifiziertere Kommentare abgeben können.

von Sven (Gast)


Lesenswert?

Hallo August,

das mit dem Mikrokontroller ist eine Vorgabe, an die ich mich halten 
muß, da es sich um eine Diplomarbeit handelt ;)

An Fram hatte ich auch schon gedacht und schon Samples geordert, 
allerdings weiß ich nicht, ob und wann die ankommen. An ebay hatte ich 
da noch gar nicht gedacht ist aber ein guter Hinweis.

Von "normalen" Speicher wollte ich eigentlich Abstand nehmen, weil die 
zuviele Pins haben, daher gerne i2c hätte auch den Vorteil, dass sich 
die Speicheradresse inkrementiert. Wäre also einfacher.

So, nochamls zu der Abtastrate. Wenn ich das richtig sehe, ist bei dem 
ADC eine S&H, d.h. der Wert wird gesampelt, gehalten und ausgegeben. Das 
bedeutet dann doch, das erst ein neuer Wert "geholt" werden kann, sobald 
der ADC den alten Wert umgesetzt hat oder?

Das mit fa=min 1kHz ist mir durchaus bewußt, aber wenn ich das mit dem 
Scaler und einer fcore des uC so richtig sehe, komme ich auf minimal 
fa=4,8kHz und in dem Fall hätte ich auch viel mehr Werte oder nicht.

Oder doch nen externen ADC, dann wäre ich unabhängig vom fcore des uC

von August (Gast)


Lesenswert?

Hallo Sven,
ok - dann weiß ich das schon mal besser einzuordnen und
über grundlegende Dinge brauchen wir uns nicht zu verlieren. ;-)

Externen A/D-Wandler braucht es nicht, der AVR packt das locker.

Nehmen wir eine Abtastrate von 1024 Hz, 1024 Stützpunkte und
einen Tiefpass der alles ab 500 Hz vom A/D-Wandler fern hält.

Ich betreibe bei mir den A/D-Wandler im "differential Mode",
gibt mir gleich das Vorzeichen frei Haus.

Mit welcher Auflösung soll die Ausgabe erfolgen? Davon hängt
ab, ob man die Dynamik der 10 Bit des A/D überhaupt nutzen
muss.
Aber nehmen wir mal an, es wären 10 Bit, dann packen wir jeden
Messwert, faul wie wir sind, in 16-Bit-Format, also 2 Bytes
je Messwert. Gibt einen ersten Puffer von 2 kByte.
Dieser Puffer ist nach einer Sekunde voll. So lange die FFT-
Berechnung (abzüglich der Rechenzeit für die Interrupts,
für die Erbsenzähler) nicht länger als 1 Sekunde braucht,
belastet sie den Durchsatz nicht wirklich. In C sollte das
zu lösen sein.
Mit Assembler wird an einen Faktor 10 optimieren können, auch
lassen sich die Messdaten verschachtelt ablegen, damit die
X,Y,Z-Pointer-Operationen des AVR so richtig Freude haben.
Schön sieht das dann nicht aus, aber flink wird es. ;-)

Für die FFT-Berechnung veranschlage ich weitere 4 kByte.
Damit wären wir jenseits von ATmega32 und auch ATmega128.
Eigentlich etwas für ATmega2560 mit 8 kB RAM, wenn nicht
sogar schon etwas für AT91SAM7xxx.
Vorsicht beim ATmega256x in Assembler: für Unterprogramme
werden nicht 2 sondern 3 Bytes in den Kellerspeicher verschoben!

Ich nutze für einen FFT mit LC-Display hier den ATmega644.
Der hat die schöne Eigenschaft, dass er den A/D-Wandler aus
einem Timer (Compare) heraus anstoßen kann. Ist die Wandlungs-
zeit des A/D bekannt, kann der Timer-Interrupt ohne Rechen-
zeitverlust noch für die LC-Display-Ausgabe genutzt werden.
Aber das ist wieder eine andere Geschichte.

So, dann mache ich jetzt Platz für die Besserwisser.
August

von MaG2k (Gast)


Lesenswert?

Kann mir denn jemand       sagen wo ich das display das elm-chan 
verwendet hat beziehen kann oder kann ich auch ein beliebiges anderes 
display einsetzen?
Welche sind kompatibel bzw. wie kann ich den  code für andere Displays 
nutzbar machen?

Gruß
MaG

von Hans-Christian (Gast)


Lesenswert?

Hallo MaG2k,

ich habe mal die Routinen von elm-chan mit den S65-Display-Routinen von 
Christian Kranz verbunden und habe nun ein Spektrum sogar in Farbe!

Gruss
Hans-Christian

von MaG2k (Gast)


Lesenswert?

hallo hans-christian,

das klingt sehr sehr interessant...kann ich dich mal um den Quellcode 
bitten, denn ich weiß nicht wie ich das zu machen habe, also die 
displayansteuerung in des Programm einzubinden!

Danke

MfG
MaG2k

von Sven (Gast)


Lesenswert?

Hallo August,

ich habe nochmal eine Frage.
Und zwar hast du geschrieben: "Ich betreibe bei mir den A/D-Wandler im 
"differential Mode", gibt mir gleich das Vorzeichen frei Haus."

Wie sieht das Hardwarmäßig aus?

Vorab Danke

von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Hallo hier habt ihr ne 512 Punkt FFT in Gnumeric (Goodbye Windows :). 
Ich bin gerade dabei diese in einen Mega32 zu programmieren (asm 
natürlich). Damit ich keine Scheisse programmier hab ich mir dieses 
Gnumeric-Programm geschrieben. Vieleicht hilft es jemandem, die Mathe 
hinter der FFT besser zu verstehen (Rechenwege alle nachvollziehbar), 
ich hatte anfangs Mühe mit den blöden Formeln, aber der Grundgedanke ist 
einfach...

Das Programm sollte soweit stimmen, für eine Gerade und Sinuswerte gibt 
es das gewünschte Resultat. Wenn jamand Fehler findet, bitte 
korrigieren.

FFT-Input: Funktion die FFT´t werden soll eingeben, BB,BC,BD ist der 
Output, unten ist noch der Graph der Input und Outputfunktion.

Gut Nacht, ich geh jetzt pennen

von Steffan (Gast)


Lesenswert?

Hi,

kannst du mir deinen Schaltplan etwas erläutern?
Wieso liegt das Audiosignal sowohl auf AREF als auch an ADC0.
Bekommst du dadurch das du ADC0 und ADC1 verwendest positive und 
negative Werte?

Vorab Danke.

von Steffan (Gast)


Lesenswert?

Sorry meine Anfrage bezog sich auf den Schaltplan avrfftmega8.sch von 
Benedikt

von Mike (Gast)


Lesenswert?

@Patrick

Finde Dein gnumeric Sheet sehr interessant.
Um das Sheet und die FFT jedoch besser zu verstehen finde ich die Größe 
von 512 Punkten recht unübersichtlich. Könntest Du das Sheet vielleicht 
auf 8 oder 16 Punkte abändern, das wäre denke sehr hilfreich.

Gruss Mike

von Steffan (Gast)


Lesenswert?

@Patrick

Da stimme ich Mike zu, das wäre eine feine Sache.

MFG Steffan

von Steffan (Gast)


Lesenswert?

Nabend,

ich habe nun die FFT von Elm auf meinem uC zu laufen bekommen.
Ich nutze die Version mit dem C-Modul für WinAVR.
Allerdings habe ich ein Problem, das ich mir nciht erklären kann.
Mein uC hat einen Takt von 8MHz, der Prescaler ist auf 128 eingestellt 
also arbeitet der ADC mit 62,5kHz Takt. Ich betriebe den ADC im Freerun. 
also braucht die S&H 1,5 und die Wandlung des ADC 13 takte, macht 
zusammen 15 Takte für ein Wandlung. Daraus würde ich schließen, das ich 
eine Abtastung von 4,16kHz habe. Ich speichere 4096 abgetastete Werte 
ab. Nun nehme ich aus diesem Array nur jeden vierten Wert und führe eine 
1024 Punkte FFT aus. Da ich nur jeden 4. Wert nehme, müßte es doch einer 
Abtastfrequenz von 1,04kHz entsprechen d.h. die Auflösung der FFT 
(Auflösung=Abtastfrequenz/Abtastwerte FFT) müßte 1,04Hz betragen.
Ich habe noch einen einfach Tiefpass 1. Ordung davor, der eine 
Grenzfrequenz von 503Hz besitzt. Meine Referenzspannung des ADC beträgt 
4,88V und ich habe ein Offset von 2,44V. Wenn ich kein Signal anlege 
habe ich, so wie es sein soll in dem Array nur Werte zwischen 0 und -64 
Wertebereich +-32768 (-64 dürfte der Quantisieurngfehler sein mit 
4,88mV). Soviel zu den Daten.

Nun zu meinem Problem: wenn ich ein 100Hz Sinus einspeise, wird mir im 
Spektrum bei 85 die höchste Amplitude angezeigt. Wie kann das sein? In 
anbetracht der Auflösung müßte das doch bei 104 liegen oder nicht?

Hat jemand ne Idee? Bin über jede Hilfe glücklich!

MFG

Steffan

von Hirbel H. (leo)


Lesenswert?

Hi,

kann mir jemand erklären, wozu die folgende Tabelle benötigt und 
vorallem wie sie errechnet wird?

t_desc:  ; Descramble table (for 128 point FFT)
  .dw  0*4, 64*4, 32*4, 96*4, 16*4, 80*4, 48*4, 112*4
  .dw  8*4, 72*4, 40*4, 104*4, 24*4, 88*4, 56*4, 120*4
  .dw  4*4, 68*4, 36*4, 100*4, 20*4, 84*4, 52*4, 116*4
  .dw  12*4, 76*4, 44*4, 108*4, 28*4, 92*4, 60*4, 124*4
  .dw  2*4, 66*4, 34*4, 98*4, 18*4, 82*4, 50*4, 114*4
  .dw  10*4, 74*4, 42*4, 106*4, 26*4, 90*4, 58*4, 122*4
  .dw  6*4, 70*4, 38*4, 102*4, 22*4, 86*4, 54*4, 118*4
  .dw  14*4, 78*4, 46*4, 110*4, 30*4, 94*4, 62*4, 126*4

(Code von http://elm-chan.org/works/akilcd/report_e.html, vom Anfang des 
Threads)

MFG Leo

von Fuchs (Gast)


Lesenswert?

Bin mal gespannt auf die XMegas, haben die überhaupt mehr Dampf oder 
wieder nur 1MIPS/MHz?

von zero_gravity (Gast)


Lesenswert?

die tabelle brauchst du, um die ergebnisse der fft in die richtige 
ordnung zu bringen... kenne jetzt den code von elm chang nich genau, 
aber ich meine der verzichtet auf eine bitreverse sortierung der 
stützpunkte und darum muss er sie nach der fft wieder mit der descramble 
tabelle richtig anordnen


glg
zero

von Hirbel H. (leo)


Lesenswert?

hmmmm...
hat denn jemand das Unterprogramm "do_fft" richtig verstanden?

Also ich geh jetzt mal von einer 128 Punkt FFT aus.
Der Butterflybuffer ist 512 Byte gross und wird im Unterprogramm 
"do_window" befühlt, wobei jedes zweites word NULL ist!

In der FFT Berechnung wird dann Z die Adresse vom Buffer zugeteilt und Y 
is die Adresse vom gleichen Buffer, allerdings beginnend von der Mitte 
(Der Buffer wird also in zwei hälften geteilt).
Jetzt wird damit gerechnet....
und dabei ist mir aufgefallen, dass einmal mit [y+0] und [z+0] (das sind 
jeweils 2 Bytes die in "do_window" zugewiesen wurden) und es wird 
ebenfalls mit [y+2] und [z+2] gerechnet, wobei hier IMMER [y+2] und 
[z+2] die Werte 0 sind (auch in "do_window" zugewiesen)....
WIESO UND WARUM wird das gemacht?

es handelt sich doch hierbei um den RADIX-2 Algorithmus von Cooley und 
Tukey oder is das ein RADIX-4 Algo??

Kann mir da jemand weiterhelfen, ich möchte das gerne verstehen.

von Martin O. (olliver)


Lesenswert?

Hallo !

Ich habe auf der Internetseite :

http://www.youtube.com/results?search_query=Big+Blue+Audio+Spectrum+Analyzer&search_type=

ein Sound-Spectrum mit blauen LED'S gesehen , dafür bräuchte ich genau 
diesen
Schaltplan und Stückliste.
Wäre das möglich ?
Wenn ja meine E-Mail: MartinPersner@msn.com
Ich habe versucht mich bei YouTube zu registrieren aber irgendwie 
gelingt mir das nicht , das herstellen des Account bricht bei mir immer 
plötzlich ab.
Deshab nun die bitte an Euch helfen Sie mir wen es möglich ist.
Ich möchte diesen Big Blue Audio Spectrum Analyzer gerne nachbauen.

DANKE

von Dominik (Gast)


Lesenswert?

zum Thema oled

ist es möglich ein analizer mit controller für ein oled display zu bauen
das eine höhere auflösung besitzt? ich will es dann an meine
aktivmonitore hängen (und ich dachte am besten direkt am eingang). ich
möchte die oled displays dann in meine lautsprecher einbauen und
erreichen, dass mir die dann in etwa die genaue frequenzlinie anzeigen
und das wenns geht zügig und genau. also nicht leicht nachrudernd oder
ungenau.......? wäre glücklich, wenn mir einer helfen könnte.
wenn es möglich ist will ich es dann in verschiedenen farben darstellen
d.h. Tiefbassbereich 0-125 hz z.B. rot bassbereich 125-380 z.B. orange
tiefmitten bereich 380-1800 blau hochmittenbereich 1800-6200 grün und
Höhenbereich 6200-22000 gelb  zum Beispiel muss nicht genau so sein

Danke schon mal im voraus für euer interesse

mfG Dominik

von jo (Gast)


Lesenswert?

Eines weckt bei mir doch reges Interesse, wie habt ihr die AGC 
realisiert oder wurde hier überhaupt eine realisiert.
Irgendwie muss ja für eine "konstante" Aussteuerung bei verschiedenen 
Lautstärken gesorgt werden.

Liegt zwar schon ein bisschen zurück das Ganze hier aber würd mich 
trotzdem über ein paar Antworten freuen.

Gruß,
der Herr Jo

von jo (Gast)


Lesenswert?

Mögt ihr mich etwa nicht oder warum antwortet mir keiner?

von keks0r (Gast)


Lesenswert?

AGC
ist doch vom AD die Ref spannung?
einfach auf VCC legen, ich jag zb auch einfach voll wellen drauf, ohne 
gleichrichtung, nur nen kondensator zumn endkoppeln brauchst du

von Walter (Gast)


Lesenswert?

Hallo zusammen,
ich habe eine große Bitte, es geht mir um ein Programm zur 
Veranschaulichung meiner Technikerarbeit.

ich möchte ein Mikrofonsignal verstärken und an den AD- Eingang geben. 
Die aufgenommenen Töne sollen in 5 Spektren (125, 250, 500, 1000, 2000 
Hz) zerlegt werden und je nach Pegelstärke eine Led blinken lassen. 
Wobei die Impulslänge (led an) immer gleich lang seien soll, nur der 
Pausenabstand soll immer kürzer werden. Wird z.B ein ton von 500Hz leise 
ins Mikro geleitet so blinkt die 3. Led mit großen Pausen, wird nun der 
Ton laut so blinkt die Led sehr schnell.

Mit dieser Schaltung möchte ich die Funktionsweise eines CI Implantates 
und die Umsetzung in Corchlea verständliche Signale veranschaulichen und 
es wäre schön wenn mir jemand bei dem Programm helfen kann, denn leider 
habe ich mit dem Kontroller zu wenig Erfahrung.

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.