Forum: Mikrocontroller und Digitale Elektronik Digitalmischpult mit PIC 18F4550


von Christian E. (morpheuss)


Lesenswert?

Hallo,

ich bin gerade dabei im Rahmen einer Semesterarbeit ein kleines 
Mischpult auf digitaler Basis unter Verwendung eines 18f4550 zu 
erstellen.
Leider hatte ich bislang nicht allzuviel mit Mikrocontrollern zu tun und 
ich tue mich recht schwer mit der Programmierung, insbesondere was 
Initialisierung und Ansprechen von Ports bzw. Registern angeht.
Was ich vorhabe:

Der Schaltplan steht und sollte funktionieren.
4 Pins des PIC bekommen je ein analoges Musiksignal, AD-Wandlung via 
interner ADC des PIC. Dann möchte ich mich erst einmal darauf 
beschränken, das erste dieser Signale auf einem Pin des PIC digital 
auszugeben und zu einem DAU zu führen, um es zu einem Musiksignal 
zurückzuwandeln.
Der PIC also erst einmal nur als "Walk through", um zu testen, ob ich 
überhaupt etwas hinbekomme.
Leider scheitert es schon beim Erstellen des Codes für das Auslesen des 
ADC und das Initialisieren des externen Quarz-OSCs (20MHz).

Leider rennt mir die Zeit weg und ehrlich gesagt bin ich trotz 
Intensivstudium der Materie zur Zeit noch arg überfordert.
Für Hilfe bei der Erstellung eines ersten C-Files (Programmierung via 
MCC18), sodass zunächst mal wenigstens obe erwähntes "Walkthrough" 
funktioniert, wäre ich sehr dankbar. Da es sehr eilt und niemand sein 
Wissen umsonst preisgeben soll (das kann ich nun wirklich nicht 
erwarten) bin ich auch bereit bei erfolgreicher Lösung der Problematik 
eine kleine finanzielle Entschädigung abzutreten. Aber auch Tutorials 
und gute Erklärungen bezogen auf eben meine Anwendung würden mir sehr 
helfen.

Für eure Hilfe schon jetzt vielen Dank.

Beste Grüße, Chris

von Frank (Gast)


Lesenswert?

guck einfach mal bei www.sprut.de vorbei, Der erklärt den PIC wie kein 
Anderer. Wenn du es da nicht verstehst, dann garnicht. Was aber auch 
nicht weiter schlimm wäre, denn dein Vorhaben ist zum scheitern 
verurteilt. Hast du schonmal was von Shannon und seinem Theorem zur 
Übertragung abgetasteter Signale gehört? Digitales Mischpult mit PIC 
geht schon, aber nicht mit Signal über den PIC. Ich hab mal ne Schaltung 
gesehen wo der PIC ne Midi-Schnittstelle und diverse digitale Potis 
bedient hat. Das hat ganz gut funktioniert weil eben der Signalweg vom 
PIC ferngehalten wurde.

bye

Frank

von jÜrgen (Gast)


Lesenswert?

der pic ist bei weitem zu langsam... mit 20mhz kannst du nicht viel 
anfangen...

ein dsp wäre auf sowas extra zugeschnitten...

von unbeschreiblicher Rahul (Gast)


Lesenswert?

>DAU

Die Dinger nennt man eher DAC (DAU = dümmster anzunehmender User).

>AD-Wandlung via interner ADC

Das ist nur einer, oder?
Du hast also zwischen den einzelnen Samples eine gewisse Latenz.

>das erste dieser Signale auf einem Pin des PIC digital
>auszugeben und zu einem DAU zu führen, um es zu einem Musiksignal
>zurückzuwandeln.

Noch mehr Latenz...

Ich kenne den PIC18F4550 zwar nicht (eigentlich gar keinen PIC), aber 
ohne DSP wird das sehr sehr lange dauern, die vier Eingänge einzulesen, 
zu mischen und wieder auszugeben.

Wie Frank schon schrieb:
>Digitales Mischpult mit PIC geht schon, aber nicht mit Signal über den PIC.

Dazu gibt es Bausteine, die z.B. über I²C gesteuert werden, wie der 
TDA8425. PCA... oder so heissen andere.

Vermutlich kannst du mit einem DSPic solche Spässe machen, nicht aber 
mit einem normalen.
Teilt der PIC die Taktfrequenz nich noch durch 4? Das wären effektive 
5MHz.
Da wäre ein AVR mit 16MHz die bessere Wahl.

Kann aber auch sein, dass ich mal wieder etwas daneben liege, weil ich 
etwas bewerte, von dem ich keine Ahnung habe...

von A.K. (Gast)


Lesenswert?

Lies mal das Datasheet zum ADC und dessen Zeitbedingungen und rechne 
nach ob der PIC überhaupt in der Lage ist, 4 Eingänge hinreichend 
schnell zu sampeln, damit das Ergebnis noch als Musik durchgeht.

von unbeschreiblicher Rahul (Gast)


Lesenswert?

>noch als Musik durchgeht.

Dann ist in meinem Handy ein PIC... Bäh!

von Christian E. (morpheuss)


Lesenswert?

ADU... Analog-Digital-Umsetzer

So lernen wir es nun mal im E-Technik Studium. Anyway...

Latenz und die Qualität der Signalübertragung sind erst einmal völlig 
hintergründig. Offenbar wurde nicht ganz verstanden worum es geht oder 
ich habe es nicht klar genug beschrieben. Das Projekt soll rein zur 
Demonstration dienen. Das wars. Das Abtasttheorem ist mir natürlich 
bekannt.
Es geht einfach nur darum, das Ganze mit einem PIC umzusetzen. Schaltung 
aufbauen (bereits erledigt), Software bauen und fertig.
Natürlich bin ich bereit, mich mit den Sachverhalten 
auseinanderzusetzen. Ich denke das kam auch durch. Aber: mir fehlt die 
Zeit und ich muss das Projekt fertig bekommen. Deshalb wäre ich für 
konstruktive Hilfe dankbar. Die einschlägigen Quellen zur 
Informationsbeschaffung sind mir bekannt und ich werde mich langsam 
herantasten. Diskussionen über Sinn und Zweck der Realisierung sowie der 
Qualität der Signalübertragung sind einfach mal fehl am Platz.
Also: wer bereit ist mir in Form eines Programmansatzes oder einem 
Verweis auf eine geeignete projektbezogene (!) Quelle zu helfen möge 
dies tun. Notfalls lasst es uns als Dienstleistung betrachten.
Ansonsten habe ich ja offengelegt an welchen Stellen es hapert.

Grüße, Chris

von Peter D. (peda)


Lesenswert?

Christian Engel wrote:

> Leider rennt mir die Zeit weg und ehrlich gesagt bin ich trotz
> Intensivstudium der Materie zur Zeit noch arg überfordert.

Wie ist denn so Dein Zeitplan ?

Ich würde dafür etwa rechnen 20% HW und 80% SW.

Wenn die Hardware läuft, hast Du also schon 20% der benötigten Zeit 
verbraucht.

Es könnte nichts schaden, daß Du den Schaltplan postest (pdf oder png, 
nicht als brd !), dann könnte man mal einschätzen obs funktionieren 
könnte.


Ich hätte ja besser den C8051F330 dafür genommen, bei dem kann man 
nämlich den ADC und den DAC per Timer triggern und so ein exaktes 
Abtastraster einhalten.
Und die 25MIPS könnten auch ausreichen, die Signale miteinander zu 
verwuseln.

Es hätte daher nichts geschadet, im Forum vorher Meinungen über 
geeignete Hardware einzuholen.


Peter

von Christian E. (morpheuss)


Angehängte Dateien:

Lesenswert?

Hallo Peter,

und danke für die vernünftige Antwort. Anbei der Schaltplan (der denke 
ich soweit ok ist). Der PIC ist mittlerweile wie gesagt ein 18F4550. Das 
war leider Vorgabe unseres Dozenten. Es muss etwas mit einem PIC sein. 
Meinungen über die Hardware hätte ich natürlich gern eingeholt... Aber 
wir hatten ja leider unsere Vorgaben.
Schaltplan entwickeln und Schaltung aufbauen waren vielleicht zwei Tage.
Mein Zeitplan sieht so aus, dass ich Anfang bis Mitte nächster Woche 
zumindest ein funkionierendes C-Programm mit MCC18 geschrieben bekomme, 
mit welchem es möglich ist, EIN analoges Signal mittels PIC zu 
digitalisieren und digital an den DAU weiterzuleiten. Das wars. Nur 
bekomme ich die Initialisierung von ADU, ext. Clock und der benötigen 
IO-Ports bzw. Register nicht hin. Und dafür brauche ich Hilfe.

Grüße, Chris

von Stefan K. (_sk_)


Lesenswert?

Schonmal bei Microchip geschaut?
Die haben so viele Applikation-Notes, dass sie die sogar katalogisieren 
müssen. Ich würde als erstes mal empfehlen, da ist der ADC nicht nur 
beschrieben, sondern es steht auch richtig viel Sourcecode mit drin:

Browse Applikation Notes ->
  Signal Conditioning/Measurement ->
    ADC ->
      AN546 (Using the Analog to Digital Converter)


Auch wenn Du es nicht hören willst:
Das Ding wird mit dem internen ADC bescheiden klingen, erst recht mit 
der geposteten Schaltung. Bei 4 Eingängen (+4 Analogpotis, 
Bedienelemente?!) wirst Du eine Samplingrate von vielleicht 15khz pro 
Signal bekommen. D.h. für alle Signale oberhalb von 7,5khz ist die 
Schaltung unbrauchbar. Sind höherfrequente Anteile im Signal vorhanden, 
dann werden diese an der halben Abtastfrequenz nach unten gefaltet. 
Einen 8khz-Sinus im Eingangssignal hörst Du also als 7,5khz - 
(8,0khz-7,5khz) = 7,0khz-Sinus im Ausgang! Das ist nicht nur etwas mehr 
Rauschen, sondern richtig hässlich.
Diese Probleme umgehst Du, wenn Du "richtige" Audio-Wandler benutzt. Es 
gibt Codecs, die sowohl AD als auch DA-Wandler in einem Gehäuse haben. 
Die höhere Auflösung ist noch der geringste Vorteil dieser Wandler.

Bei der Rechenleistung des PIC musst Du Dir dagegen keine Sorgen machen. 
Die paar Werte addieren und ggf. multiplizieren (Lautstärke-Stellung) 
schafft der locker. Anders sieht es aus, wenn Du irgendwann eine 
Klangregelung einbauen willst, dann geht ohne DSP nichts mehr.


Gruß, Stefan

von Christian E. (morpheuss)


Lesenswert?

Jetzt also nochmal... Die Qualität der AD-Wandlung ist nebensächlich. 
Aliasing-Effekte kann man ja umgehen, indem man das analoge Signal schon 
im Vorfeld bandbegrenzt.
Die App-Notes sind leider alle Assembler (natürlich sind sie das). 
Wunderschön wäre jedoch Quellcode im C-Format, da ich mit MCC18 
programmieren möchte.

Grüße, Chris

von Christian E. (morpheuss)


Angehängte Dateien:

Lesenswert?

So, folgenden Code habe ich bislang erstellt (siehe Anhang). Wäre schön, 
wenn jemand mal verifizieren könnte, ob das so funktionieren kann.
Es soll nur ein Wert eines Analogeingangs via ADC des PIC eingelesen 
werden. Soweit bin ich bislang.
Jetzt kommt die Ausgabe des eingelesenen Wertes an den nachstehenden 
DAU. Dies wird ein LTC1257 werden. Hat jemand eine C-Routine parat, um 
eben diesen mit einem 18F4550 anzusprechen? Wie stelle ich dem DAU am 
besten das Clock-Signal zur Verfügung? Danke für eure Hilfe...

Grüße, Chris

von Dieter Werner (Gast)


Lesenswert?

Die Festlegung der Config-Bytes muss in den Deklarations-Teil, da daraus 
kein ausführbarer Code entsteht. Das sind lediglich Konstanten, die beim 
Programmieren auf die entsprechenden Adressen geschrieben werden müssen.

Da ich C nur bruchstückweise kenne kann ich zum Programm selbst nichts 
sagen.
Um den AD Wandler mit möglichst hohen Abtastraten betreiben zu können 
ist es sinnvoll den Eingangsmultiplexer sofort nach Ende der Wandlung 
umzuschalten, dann ist die Akquisitiontime für die folgende Wandlung 
länger.

Dieter

von alibaba (Gast)


Lesenswert?

Hallo ...
erlaube mir eine ganz bescheuerte frage: in deinem ersten beitrag 
sprichst du nur davon, dass dein dozent vorschreibt, den pic 18f4550 zu 
verwenden um ein digitales mischpult zu bauen. Da stell ich mir doch die 
frage ob er meint, dass man überhaupt eine ad wandlung betreiben soll. 
Der controller ist ja ein usb controller ... man könnte also auch per 
usb digitale sounddaten übertragen und diese dann mit einem sound codec 
chip (über i2s) ausgaben und mixen ... damit ist es ein digitaler mixer 
und man bekommt auch samplingraten um 44kHz hin denke ich ... ich habe 
derzeit etwas ähnliches vor ... habe allerdings große probleme mit dem 
brennen und ich stehe noch am anfang ... hab also noch keinen code

gruß alibaba

von tom (Gast)


Lesenswert?

Also ich habe mal sowas mit einem Atmega88 bei 18,432MHz gemacht, wir 
haben damals die AD-Wandlung mit 72KHz Oversampling gemacht und dann 
einen Mittelwert von 9 Werten gebildet, so dass wir ein Signal mit 
effektiv 8KHz abgetastet hatten, das entspricht analoger Telefonie und 
die Qualität war echt gut. Die DA-Wandlung erfolgte dann mittels der 
eingebauten PWM und einem Tiefpass zur Glättung.

Wir sind folgendermaßen vorgegangen
- Timer initialisiert der mit 72KHz läuft und die AD-Wandlung bei jedem 
Überlauf starten, gleichzeitig auch den PWM-Wert (Ausagbewert) neuladen 
und ausgeben
- Wenn 9 Mal ein Überlauf vorliegt, dann Mittelwert bilden
und Berechnung durchführen, dann neuen Ausgabewert abspeichern

Das mal so ganz grob beschrieben

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.