1-Bit zu 8-Bit Konversion

Dieses Thema im Forum "Lötkunst" wurde erstellt von elix, 31. August 2006.

  1. elix

    elix Tach

    Hallo zusammen
    Ich befinde mich wieder einmal an der unscharfen Grenze zwischen Soft und Hardware, da ich aber von Elektronik nur wenig Anhnung habe, eine kleine Frage an die Experten: es geht um 1-Bit-Sound aus einem kleinen Mikrokontroller, genauer dem PIC16F876A! Das funktioniert auch schon recht rund und pieps und tackert wild, doch irgendwie find ich die Auflösung schon ein bisschen sehr minimal bemessen... so dacht' ich mir, man könnte einfach ein paar Pins zusammenfassen und "irgendwie" zu einem höher aufgelösten Sample zusammensetzen, also z.B. aus 8 binären Zuständen einen 256-stufigen Spannungswert generieren? Oder was ich mir auch denken könnte wäre eine Art Parallelisierung von Sequenziell ausgegebenen Bits auf einem digitalen Ausgangsport... also z.B. immer 8 Bit in Folge münden in einem Sample.
    Wäre super wenn mir hier jemand vielleicht ein paar Wegweiser zum Fachchargon oder gar eine mögliche Lösung wüsst...
    Danke und Gruss!
     
  2. haesslich

    haesslich Tach

    ja, prinzipiell geht sowas. dafür gibts ja DA wandler. am besten wäre es, sowas dann auch zu benutzen. die gibts seriell (in 8bit z.b.: 8 bit hintereinander an den eingang des da wandlers ergeben dann ein sample) oder parallel (8 bit an die 8 eingänge des da wandlers ergeben ein sample).
    welche es gibt und welchen man für audio nehmen und wo bekommen kann, weiß ich allerdings nicht :sad:
     
  3. -FX-

    -FX- Tach

    Das da eine grundlegende Änderung der Programmierung fällig wird ist klar, ne ? Muss ja auch Controllerintern auf 8 Bit erzeugt werden sonst macht das ganze keinen Sinn.

    Wenn keine Pins gespart werden müssen ist ein DA-Wandler mit parallelen Eingängen in der Tat die einfachste und günstigste Lösung, oder eben ein Wandler aus Einzelwiderständen, dürfte aber vermutlich aber für Audio nicht allzu angebracht sein.

    Das mit der seriellen Ausgabe funktioniert aber auch, z.B. diverse DA-Wandler von Maxim (oder sogar alle des Herstellers ?) können SPI-Signale verarbeiten.

    Alternativ dazu ginge auch ein 49HC595 Schieberegister + parallelem DA-Wandler, das lässt sich dann auch mir SPI ansteuern.

    Nochmal zur Programmierung: Wenn dann noch unterschiedliche Wellenformen bei rauskommen sollen, wäre das DDS-Verfahren wahrscheinlich recht sinnvoll.

    Ein sehr schönes und gut dokumentiertes Projekt dazu gibt es gut versteckt auf http://www.mikrocontroller.net , in dem Falle eingesetzt als Funktionsgenerator ...
     
  4. elix

    elix Tach

    Super! Dank euch für die schnellen Antworten! Wie gesagt, bitte kein Vorwissen voraussetzen ;-)...so wie ich das verstanden hab schalt ich also einfach einen DA-Wandler dahinter, und das wars? Ich werd mich heut abend mal umsehen, was es da so gibt... eigentlich ist im moment die Qualität gar nicht so wichtig, es geht eher um die Lautstärke! Die Lösung mit den Widerständen würde vielleicht schon reichen, oder ist sowas viel zu aufwändig für 8-Bit? Eigentlich will ich einfach den kleinen Piezo-Pieepser durch eine Leitung zu meiner Soundkarte ersetzen... gibt es da nicht noch weitere Probleme, wenn ich mit 5V auf die Soundkarte gehe, da brauch ich sicher noch Zusatzwiderstände, oder was in die Richtung... lieg ich da richtig in der Annahme?
     
  5. tulle

    tulle bin angekommen

    Schau dir die Funktion 'pwm' an. Das ist quasi ein D/A Wandler, du mußt den Ausgang nur noch filtern (für experimentelle Sounds gehts auch ohne :D )
     
  6. elix

    elix Tach

    hmm, ja, PWM benutz ich eigentlich auch schon... ist doch einfach das (pulsweiten modulierte) Rechtecksignal, oder meinst du damit was anderes, tulle?
    Wenn ich den DA-Wandler jetzt selbst mit Widerständen bauen möchte, muss ich eigentlich einfach ein paar Widerstände bestimmter Grösse an die Pins bauen, und zusammenführen. Doch wie ich jetzt die Grösse genau bestimme, ist mir nach wie vor ein Rätsel... auf http://www.mikrocontroller.net/articles/DA-Wandler hab ich gesehen, dass es anscheinend auch unabhängig von der Grösse der Widerstände klappt, doch irgendwie gibt's doch da sicher einen Haken (Stromstärke, Leistung...), wenn ich das Ausganssignal dann direkt auf den Mic-Eingang der Soundkarte führ, hat da vielleicht schon jemand damit Erfahrung gemacht?
     
  7. -FX-

    -FX- Tach

    Nen ich glaube nicht, dass du von dem wirklich einen Plan hast, was du da machst.

    Was hat die Lautstärke mit der Bit auflösung zu tun ?

    Dein jetziges Programm, wie das auch immer genau funktioniert läuft doch auf 1Bit Auflösung - oder ? Was soll das für einen Sinn machen, das direkt in 8 Bit zu konvertieren

    Abgesehen davon gehört hinter einen DA-Wandler ein OP als Puffer ...

    Schreibe doch einfach mal, was dann Programm aktuell genau wie macht, auf welchem Controller das läuft und was du im nächsten Schritt erreichen willst ...
     
  8. tulle

    tulle bin angekommen

    Ja genau. Du mußt noch ein Filter hinterherhängen, um aus dem PWM eine Spannung zu bekommen. Für 'ne halbwegs ordentliche Qualität sollte man 'oversamplem', das Signal schneller auslesen. Ist dann quasi ein 1-Bit Wandler mit bsp. 256-fachen oversampling.

    Du meinst einen R-2R Wandler. Kann man auch. Allerdings ist die Dimensionierung ein Scheiß da du nie eine vernünftige Genauigkeit bekommst. Man kann zwar 0,1% Widerstände nehmen aber die Abweichung durch den Innenwiderstand des Ports ist ja nicht berücksichtigt.
    Ich würds so nicht machen, allerdings ists programmiertechnisch simplel.
    tschö,
    Micha
     
  9. elix

    elix Tach

    ...hab meinen Plan schon seit längerem verloren, das ist korrekt! Ist mir ein bisschen peinlich hier so Anfängerfragen zu stellen, aber danke für deine Geduld - FX - ! Nochmals zum Problem:
    Eigentlich bestand meine Aufgabe darin, mit einem PIC16F876A von microchip ;-) eine einfache Sirene zu bauen, was auch schon einigermassen geklappt hat. Programmiert wird der Kontroller per ICD 2 über USB, direkt in der Schaltung (ISP)... das Drumherum habe aber nicht selbst gelötet. Zu Testzwecken ist es absolut minimal gehalten: Am Port RC2 hängt einfach ein Piezo-Speaker und das wars :). Zur Kontroller noch ein LED an RB1 und natürlich ein Quartz bei 20 MHz (intern nur 5 MHz). Bis jetzt hab ich einfach in bestimmten Zeitabständen das Pin RC2 an oder ausgeschalten (5V/0V), um die Rechtecke an den Piezo führen, quasi eine Auflösung von 1-Bit.
    So, das ist also das Setting, nun dacht ich mir, ich könnt jetzt den PIC zu einem minimalen 8-Bit-Synth mit einem Line-Out umbauen!
    Am Kontroller sind also noch genügend Pins frei, um die Bits parallel zu verarbeiten bzw. DA zu wandeln. Am liebsten würd ich jetzt die Lösung von http://www.mikrocontroller.net/articles/DA-Wandler nachbauen, scheint mir recht günstig und durchsichtig zu sein. Auf Qualität sei vorerst mal gepfiffen.
    @FX: Du sprichst von einem 'OP als Puffer'? Ich glaub das könnte mir weiterhelfen, denn nach der DA-Wandlung muss ich das Signal doch sicher noch irgendwie begrenzen, und von seiner Leistung her an die Soundkarte-/Verstärker-Leistung anpassen?

    Das Ziel wäre ein kleiner 8-Bit-Synth, der über jede Soundkarte aufgenommen werden könnte!
     
  10. -FX-

    -FX- Tach

    ach quatsch dafür ist ein Forum doch da :)

    Trotzdem fehlen da noch ein paar Infos. Ich meine 1 und 8 Bit nimmt sich bei einem Rechtecksignal gar nichts, von daher sollte dir, bevor du anfängst, bewusst sein, was für ein Signal da rauskommen soll (Wellenform) und vor Allem wie es gesteuert werden soll (Tonhöhe).

    Entschliesst du dich jetzt, lediglich mit Rechteck bzw. etwas erweitert pulsweitenmoduliertem Rechteck zu arbeiten, kannst du dir den DA-Wandler sparen. Ansonsten schau dir wie schon gesagt mal das DDS-verfahren an, was eben ein wenig aufwendiger ist, womit man wellenformtechnisch aber schon flexibler ist.

    Ansonsten stellt sich programmiertechnisch eben die Frage, wie z.B. Triggerung & Tonhöhenänderung gesteuert werden sollen. Midi wäre sicherlich interessant und ist auch nicht allzu schwer zu realisieren. Kann die leider keinen Beispielcode schicken, da ich das biher nur mal in C für die Atmel ATMegas gemacht habe.

    Einfache Beschaltung bzgl. Midi kannst du dir z.B. auf www.ucapps.de abgucken. Achso, einen DA-Wandler aus Widerständen auch, fällt mir gerade so ein ...

    Und beim OP immer dran denken, dass die meisten Standard-OPs eine positive und eine negative Spnannung haben wollen ...
     
  11. elix

    elix Tach

    Jo, noch zur Wellenform: Sinus wird hard, das ist klar, da kann das DDS Verfahren sicher helfen. Das ist im Prinzip nichts anders als eine Wavetable-Synthese, lieg ich da richtig (http://de.wikipedia.org/wiki/Direct_Digital_Synthesis)?

    Problematisch wird's einfach mit dem begrenzten Speicher des Pics. Meiner hat gard mal 8k Flash-Speicher, doch ich brauch eben noch Platz für ein paar Noten, denn eigentlich soll der Synth gar nicht erst mit grossem Interface versehen werden, sondern eher als Player fungieren... wavetable-Sythese ist da vielleicht ein bisschen zu üppig, es wäre schön wenn alles realtime synthetisiert würde, was bei Sägezahn, Derieck und Rechteck sicher geht. Das ist für den Anfang auch ganz ok. Parallel dazu hab ich vor eine kleines Kompositionstool für den PC zu bauen, das dann direkt Tracks im geeigneten Datenformat ausgibt (Instrumente/Patterns).

    Zum Widerstands-Grab ;-)
    Zwei Artikel für die die's interessiert:
    http://de.wikipedia.org/wiki/R2R-Netzwerk
    http://www.avr-asm-tutorial.net/avr_de/avr_dac.html

    Ja, und weil ich mit dem Pic-Assembler ziemlich unzufrieden bin, werd ich jetzt endlich doch auf AVR umsteigen... werd mir noch heute bei Conrad das stk500 kit besorgen, gleich dazu noch den den CA3140 OpAmp und ein paar 10k Widerstände, wie beim zweiten link aufgeführt...
    wenn mir aber jemand noch ein gutes argument "pro pic" weiss, immer her damit... ehmm, ja, und welchen AVR ich genau bestellen werd, ist mir auch noch unklar... geh jetzt aber mal netz-wühlen...
     
  12. haesslich

    haesslich Tach

    das stk500 ist aber unverhältnismässig teuer so im vergleich gesehen...
     
  13. -FX-

    -FX- Tach

    Naja wie du schon selber erkannt hast ist einen Sinus live zu berechnen nicht so ganz ohne, mit dieser Art Controller wahrscheinlich unmöglich.

    Das mit der Abspielfunktion will mir zawr nicht in den Kopf rein (soll aj wohl kein Happy Birthday - Modul werden ? :) ) aber naja, ist ja schließlich deine Entscheidung.

    Ne kleine Software zur Ansteuerung ist eigentlich unsinnig, da MIDI wirklich leicht zu verarbeiten ist.


    Zum Thema PIC vs. AVR:
    Ein häufiges Diskussionsthema. Auch wenn die PICs in diesem Bereich scheinbar öfters verwand werden tendiere ich selber aber auch zu den AVRs, da die User Community einfach größer und bis auf ein paar Spaßvögel recht hilfsbereit ist. Mal abgesehen dacon eben eine Geschichte der Programmierung ...


    Thema Board:
    Gibt es von dem STK500 nicht inzwischen eine USB-Variante (STK500 II) ? Die wäre wohl sinnvoller...

    So schlecht ist das mit dem, auch wenn es teuer erscheint , gar nicht. Ich habe einmal das Projekt nachgebaut, wo nur der Programmierteil auf eine extra Platine gebracht wurde. Abgesehen davon, dass sich wie bei mir schnell mal ein Fehler einschleichen kann (z.B. durch die doppelseitige selbstgeätzte Platine) will das Chip darauf auch noch mit einem originalen Programmer beschrieben werden, da die Software dafür nur für AVRStudio vorliegt und dieses den STK200-kompatiblen einfachen Selbstbau-Adapter nicht unterstützt

    Gemessen am Ärger und Frust, den einen andere Lösungen einbringen KANN (!), ist es dann plötzlich sein Geld wert.

    Ich hatte übrigens am Anfang mit dem einfachen Selbstbau AVRISP-Programmer für den Parallelport gebastelt, der brachte nur Ärger ein, in dem er mir rätselhafterweise alle paar Tage einen Controller wahrscheinlich durch Fuses geschossen hat.
     
  14. elix

    elix Tach

    wow, hab wohl echt meinen PIC gekillt, zwar nicht ganz, aber richtig funktioniert hat auf jeden fall nichts mehr... musste wohl oder übel nochmals von vorn beginnen und das board nun doch selbst zusammlöten... jetzt klappt's auch wieder. Werd wohl dieses Sirene-Projekt nun doch noch mit dem pic machen...
    an alle PICer: Sobald in MPLAB das Runterladen des Codes nicht beim ersten Anlauf sauber von statten geht, ist sicher was faul! Das ist wahrescheinlich einfach eine Abnützungserscheinung, wenn man das Ding schon vielfach neu beschrieben hat... irgendwann funktionierte bei mir z.B. einfach ein Schalter-Pin nicht mehr (RB0 Interrupt)...

    Danach ist AVR angesagt, wahrscheinlich eben doch mit stk500, damit ich mindestens der programmer-hardware trauen kann ;-). Version 2 hab ich aber bei Conrad nirgends gesehen, wo kriegt man die denn her (Schweiz/Deutschland)? - Und hat jemand schon mit dem Stk500/AVRStudio unter Linux gearbeitet?

    Mit dem Synth werd ich also noch ein bisschen warten, aber die Infos zur DA-Geschichte kann ich dann sicher gut gebrauchen! - Vielleicht versuch ich dann doch MIDI einzubauen, ist sicher einfacher als die ganze Arbeit doppelt zu machen, und seperat ein Prog für den PC zu basteln...
    aber eine art Songmodus muss trotzdem her, doch auf happy börthday steht ich nicht besonders ;-) sowieso soll der synth eigentlich gar nicht standardmässig Note für Note abarbeiten, sondern fortlaufen Noten/Frequenzen/Bits erzeugen! Vielleicht auch abhängig von div. Sersonren, aber davon hab ich noch keien Ahnung... ich schau dann sicher wieder mal hier vorbei ;9
     
  15. -FX-

    -FX- Tach

    ne Art digitale Cracklebox :)
     

Diese Seite empfehlen