Forum: Mikrocontroller und Digitale Elektronik Tiefpass mit 8051 Assembler


von Jonas (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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 :-)

von Jonas (Gast)


Lesenswert?

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

von das wird so nix (Gast)


Lesenswert?

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

von Jonas (Gast)


Lesenswert?

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

von ren (Gast)


Lesenswert?


von Chris M. (yoblid) Benutzerseite


Lesenswert?

Hallo Jonas,

schau dir die Fast Fourier Transformation an.

von butzemann (Gast)


Lesenswert?

Christian M. schrieb:
> Hallo Jonas,
>
> schau dir die Fast Fourier Transformation an.

Das nutzt ihm nichts, den er weiss gar nicht wovon er spricht.

von Stephan H. (stephan-)


Lesenswert?

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. :)

von butzemann (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.

von Reinhard #. (gruebler)


Angehängte Dateien:

Lesenswert?

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).

: Bearbeitet durch User
von Olek (Gast)


Lesenswert?

So einfach wie es in diesem PDF beschrieben ist ist es leider nicht.

Vielelicht hilft dir was mehr oder weniger fertiges ->
http://www.ti.com/lit/an/sprabb6b/sprabb6b.pdf

von chris (Gast)


Lesenswert?

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....

von Stefan (Gast)


Lesenswert?

Er will den Tiefpass programmieren, nicht löten.

von Mathias G. (mgpunkt)


Lesenswert?

Also, viel ist ja bis jetzt noch nicht herumgekommen hier.

Zuersteinmal solltest du dir im klaren sein wie ein digitaler Tiefpass 
funktioniert. Google mal nach FIR Tiefpass 1. oder 2. Ordnung.

http://www.fh-kl.de/~hans.neuschwander/download_skripte/digfil/DigFilter.pdf
In dem PDF steht schon mal viel über den allgemeinen Aufbau digitaler 
Filter.

Der nächste schritt wäre dann mittels geeigneter Software(SciLab, oder 
diverse andere Filter design Programme) die Filterkoeffizienten zu 
bestimmen. Dannach musst du diese quantisieren.

Beitrag "Quantisierung von FIR Filter"
http://www.fh-schmalkalden.de/schmalkaldenmedia/Realisierung_Digitaler_Filter_in_C-p-419.pdf

Damit solltest du dich ersteinmal eine ganze Weile beschäftigen können 
;)

von Jonas (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

Jonas schrieb:
> "Wie Programmiere ich einen Digitalen Tiefpass?"

Tiefpass 1. Ordnung (IIR Filter)
1
Val = (Val * k) + (New * (1-k))

Val dein gefilterter Wert
New = Eingangswert
k = Filterkonstante 0 .. 0.9999

Das periodisch aufrufen.

von Stephan H. (stephan-)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

Hallo Jonas,

vor einiger Zeit habe ich mal einen Tiefpass auf einem Attiny13 in C 
realisiert:
http://www.hobby-roboter.de/forum/viewtopic.php?f=5&t=137
Der Prozessor ist damit aber schon gut ausgelastet ( FCPU=10MHz ).

Für Deine Musikerkennung würde meiner Meinung nach ein VU-Meter besser 
funktionieren.

Beitrag "Re: Musik abhängige LED-Schaltung"

Gruß,
chris_

von Helmut L. (helmi1)


Lesenswert?


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.