Hallo liebe µC Freunde,
ich besitze einen µC der Famile 8051, jetzt möchte ich gerne in
Assembler einen Digitalen Tiefpassfilter erstellen, falls dies möglich
ist.
Mein Ziel ist es z.B. ein Mp3 Titel einzuspielen und dann bei Bass eine
"Lampe" leuchten lassen. Aber das ist erstmal mein ZIEL. Ich fange klein
an um dieses zu erreichen.
Also geht es erstmal nur um den Tiefpass.
gibt es hier irgendwo ein Tutorial dazu? Oder hat jemand lust es mir zu
erklären? Habe nichts gefunden, am besten wäre es natürlich wenn es auf
die 8051 familie angepasst ist. Und wichtig ist, dass es in Assembler
ist.
Lg Jonas
Bei MP3 würde man die Daten auswerten. Die Musik ist da nämlich schon in
diverse Frequenzen ausgesplittet, die jeweils eine bestimmte Amplitude
haben. Deswegen hat auch (fast) jeder nch so popelige MP3 Player diese
tanzende Balkenanzeige.
Befasse Dich mit dem Dateiformat.
Viele Leute denken: Wenn ich die Bässe anzeige, dann flackert die Lampe
im Takt der Musik. Das ist aber nur selten der Fall - Bässe sind nicht
gleich Rhythmus. Außer bei Ace of Base :-)
Ja danke für die Antwort,
aber vielmehr geht es mir im moment darum den Teifpass in Assembler zu
realisieren. Kennst du da Möglichkeiten, Tutorials oder ähnliches?
Lg Jonas
Jonas schrieb:> Ich fange klein> an um dieses zu erreichen.
Das glaubst du. Die Aufgabe ist gar nicht so klein:
Was willst du denn tief passen?
1. Signal entkoppeln
2. Signal anpassen
3. Signal f. µC wandeln
4. irgendwie mit ASM bearbeiten
5. irgendwas ausgeben
Hallo,
anfangs möchte ich mal ein lied oder einfach nur frequenzen eingeben und
und halt nen tiefpass drüber laufen lassen und dann am ausgang, das
gefilterte signal haben.
Aber ichbrauche ja irgenwie codes wie man einen tiefpass in assembler
programmieren kann. Ich weiß das ich da irgendwas berechnen muss aber
was und wie?
Lg Jonas
butzemann schrieb:> Christian M. schrieb:>> Hallo Jonas,>>>> schau dir die Fast Fourier Transformation an.>> Das nutzt ihm nichts, den er weiss gar nicht wovon er spricht.
und Dein Kommentar hilft ihm noch weniger.
Mit ASM für 8051 kann ich gern helfen, aber bei FFT ist bei mir auch
Schluss. So jetzt habe ich mich auch geoutet. :)
Stephan Henning schrieb:> butzemann schrieb:>> Christian M. schrieb:>>> Hallo Jonas,>>>>>> schau dir die Fast Fourier Transformation an.>>>> Das nutzt ihm nichts, den er weiss gar nicht wovon er spricht.>> und Dein Kommentar hilft ihm noch weniger.> Mit ASM für 8051 kann ich gern helfen, aber bei FFT ist bei mir auch> Schluss. So jetzt habe ich mich auch geoutet. :)
Das ehe ich anders. Die erste grosse Hürde ist doch ein Frequenzgemisch
zu digitalisieren. Dann erst kommt die Zerlegung per FFT. Dafür gibt es
tonnenweise Beispiele, die nur für 8051 umgeschrieben werden müssen.
Also nur fleissarbeit. Sinnvoll ist das eh nicht, da der 8051 das nie in
Echtzeit schaffen wird.
Bedenke, dass der klassische 8051 für sowas sehr klein ist. Er führt
etwa eine Millionen Befehle pro Sekunde aus, hat dabei allerdings (bei
Hi-Fi Mono) ca 44.000 tausend Samples pro Sekunde einzulesen, zu
verarbeiten und wieder auszugeben. Das macht knapp mehr als 20 Befehle
pro Sample - das geht also gar nicht.
Dü könntest natürlich auch ein Signal einlesen, zwischenspeichern,
umrechnen und dann wieder ausgeben. Dafür wiederum hat der 8051 zu wenig
RAM. Du müsstest dann schon mit externem RAM arbeiten.
Versuch doch erstmal einfach nur das Signal vom ADC einzulesen und über
einen DAC (oder via PWM) wieder auszugeben. Ich bin sicher, dass Du
damit schon eine ganze Weile beschäftigt sein wirst und warscheinlich
auf einen anderen wesentlich leistungsstärkeren Controlle (z.B. aus der
ARM Serie) umsteigen wirst.
Und DANACH google mal nach "digitale filter programmieren fh-kl.de", da
findest Du einen umfangreichen Aufsatz zur
mathematischen/programmatischen implementierung. Schwerer Stoff, das sag
ich Dir.
Wie so oft hier. Viele wollen
sich nur selbst darstellen ohne
nützliche Hinweise zu gebe.
Hallo Jonas
Schau dir mal die Datei an.
Ein PT1-Glied ist der einfachste
Tiefpass. (RC-Glied).
hallo und guten abend,
erstmal von welchen 8051 sprechen wir hier eigentlich ?
wenns der AT 89S8253 ist hat der leider keinen adc und irgendwie haben
alle mcs51, bis auf die T89C51CC03C PLC, keinen. Quelle Reichelt
sonst nehme er einen opv baue mit diesen einen tiefpass mit aktiver
gleichrichtung -> auf Comparator geben und den pin abfragen und die led
schalten an/aus. Ist zwar ganz dezent übertrieben weils auch ohne µc
geht aber das ist ja nicht die aufgabe.
wenn jonas sich doch umentscheidet sollte ein µc mit integrierten ADC zu
nehmen tiefpass als RC-Glied und das denn auf ub/2 einkoppeln und mit
adc auswerten, per software eine schwelle festlegen anhand diese dann
die led ein /aus geschaltet wird.
VCC
|
|
R=20K
1. 1. 2. |
----R---C----C--------pin von mc's51 welcher auch immer
| |
| R=20K
| |
GND GND
1. RC-Glied abhängig bis zu welcher frequenz du was durchlassen willst
2. ca. 1µF sollte passen kann aber auch 220-470nF sein muss man mal
ausprobieren...
soweit die theorie....
Hallo,
erstmal Danke für die Antworten und den Aufwand.
Ich glaube an dieser Stelle ist es richtig ein paar mehr Informationen
zu geben.
Also als µC benutze ich den 89S8253 von ATMEL.
Er hat wie oben schon gesagt keine ADC. Soweit so gut ich hoffe das
hilft erstmal weiter, wenn mehr infomationen erforderlich sind einfach
bescheid sagen.
Mit dem Signal input vergessen wir erstmal wieder. Um den ADC kann ich
mich später kümmern bzw. ist es für mich erstmal unrelevant. (auch wenn
es für euch komisch klingt)
mir geht es hier erstmal konkret um den Tiefpass also den Filter an
sich.
"Wie Programmiere ich einen Digitalen Tiefpass?"
Das ist die eigentliche Frage. Das mit dem Mp3 war erstmal nur ein
beispiel. Tut mir leid das es ein bisschen falsch rübergekommen ist.
Die links werde ich mir morgen erstmal in ruhe angucken. Hab nach der
Schule gerade keine Nerven mehr und es ist schon so spät.
Trotzdem vielen Dank schonmal an alle!
Lg Jonas
da ich von FFT wie gesagt keine Ahnung habe und daher den Rechanaufwand
wenig abschätzen kann, würde es nicht schaden sich bei Silabs nach den
akuellen 8051 umzusehen. Die können bis 100MHz mit internen Oszillator
bei 1 Cycle/ Takt. Das sollte auf alle Fälle reichen. Sofern die MCU
nicht zwingend vorgegeben ist.