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
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
der pic ist bei weitem zu langsam... mit 20mhz kannst du nicht viel anfangen... ein dsp wäre auf sowas extra zugeschnitten...
>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...
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.
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
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
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
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.