{"id":286,"date":"2018-02-01T14:17:17","date_gmt":"2018-02-01T13:17:17","guid":{"rendered":"http:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/?page_id=286"},"modified":"2018-02-07T16:28:15","modified_gmt":"2018-02-07T15:28:15","slug":"microcontroller","status":"publish","type":"page","link":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/gruppe-2-tonerzeugung\/microcontroller\/","title":{"rendered":"Microcontroller"},"content":{"rendered":"<p>Die Gruppe Tonerzeugung verarbeitet die eingehenden Signale von der Gruppe 1 &#8211; Saiten. Diese stellt 8 x TTL-Eing\u00e4nge (0V\/5V TTL-Pegel) zur Verf\u00fcgung. Aus den \u00fcbermittelten Signalen werden zum einen die Frequenzen f\u00fcr die Wellenformen generiert und zum anderen eine charakteristische Klangfarbe (ADSR-H\u00fcllkurve) eines Instruments erzeugt. Die Wellenform und die H\u00fcllkurve werden durch eine analoge Schaltung multipliziert und als Summe (5Vpp) an die n\u00e4chste Gruppe weitergegeben. In folgender Abbildung ist das Blockschaltbild unserer Teilgruppe Tonerzeugung dargestellt.<\/p>\n<p><a href=\"http:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-content\/uploads\/sites\/21\/2018\/02\/VCO_BSB.png\"><img loading=\"lazy\" class=\"alignnone wp-image-413\" src=\"http:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-content\/uploads\/sites\/21\/2018\/02\/VCO_BSB-300x194.png\" alt=\"VCO_BSB\" width=\"458\" height=\"296\" srcset=\"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-content\/uploads\/sites\/21\/2018\/02\/VCO_BSB-300x194.png 300w, https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-content\/uploads\/sites\/21\/2018\/02\/VCO_BSB-624x403.png 624w, https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-content\/uploads\/sites\/21\/2018\/02\/VCO_BSB.png 935w\" sizes=\"(max-width: 458px) 100vw, 458px\" \/><\/a><\/p>\n<p>Die Microkontrollergruppe hat sich lange \u00fcber die Umsetzung des Programmiercodes Gedanken gemacht. Nach gef\u00fchlten Ewigkeiten sind wir beim Programmieren. Das Problem lag darin, dass wir den Sinus, den wir digital ausgeben m\u00f6chten, so berechnen, dass keinerlei h\u00f6rbare Spr\u00fcnge in der Funktion auftreten.<br \/>\nDer erste Gedanke, der verfolgt wurde, war der, dass eine Sinustabelle mit einer optimalen Anzahl von Sinuswerten unterschiedlich schnell durchlaufen wird. Da der Atmega32 mit drei Timern ausgestattet ist und nur drei Frequenzen parallel ausgegeben werden m\u00fcssen, sollte also jede Frequenz durch einen Timer erzeugt werden, der immer in den richtigen Zeitabst\u00e4nden einen Interrupt ausl\u00f6st, durch den der richtige Sinuswert ausgegeben wird. Auf diese Weise w\u00e4re allerdings die Umsetzung mit den Interrupts nicht sehr genau realisierbar. Wenn n\u00e4mlich ein Timer eine andere Frequenz steuern soll, da eine andere Saite bet\u00e4tigt wurde, kann erst in der Interruptroutine der aktualisierte Compare-Wert des Timers ge\u00e4ndert werden. Daher soll jetzt das Konzept ge\u00e4ndert werden, sodass nur ein Timer mit der immer gleichen Frequenz Interrupts ausl\u00f6st.<br \/>\nJe nach Frequenz wird dann jeder Wert, jeder 2. bzw.jeder x-te Wert der Sinustabelle ausgegeben.<\/p>\n<p>Das Ziel ist es, dass der Microkontroller einen digitalen Sinus ausgibt der dann von den Digital-Analogwandlern in einen analogen Sinus umgewandelt wird. Auf unserem Schaltplan sind diese rechts neben dem uc zu sehen. F\u00fcr die Signalweitergabe innerhalb der Gruppe haben wir uns auf ein 10 poliges Flachbandkabel geeinigt im Schaltplan gut zu sehen sind die daf\u00fcr gedachten Anschluss.Desweiteren besitzt der uc einen jtag Anschluss zum Programmieren und Debuggen. Es werden 8 TTL-Eingangssignale von der Saiten-Gruppe erwartet. Ausgegeben werden ein gruppeninternes ADSR-Steuersignal und die drei Frequenzen an die Effekte-Gruppe.<\/p>\n<p>Nach dem Erstellen der optimalen Sinustabelle, wird zum Testen der SPI-Funktionsweise mithilfe der im Projektlabor schon vorhandenen Testplatine \u00fcber das SPI ein einfaches Dreiecksignal ausgegeben.<\/p>\n<p>Die lookup tables wurden so angelegt, dass eine Periode dargestellt wird und die L\u00e4nge der Tabelle einer Zweierpotenz entspricht, sodass gem\u00e4\u00df der direkten digitalen Synthese (DDS) die unterschiedlichen Frequenzen erzeugt werden k\u00f6nnen.<\/p>\n<p>Bei dieser Methode wird nicht je nach Frequenz strikt jeder x-te Wert der lookup-table im Interrupt-Takt ausgegeben. Stattdessen wird der Fehler (zwischen mathematisch berechneter und auf ganze Zahlen gerundeter Schrittweite) aufsummiert und ab einer signifikanten Abweichung eine andere Schrittweite eingestellt. Die Rundung wird dadurch erzielt, dass der Z\u00e4hler, der f\u00fcr jede Frequenz unterschiedlich ist, nicht als ganzes die Schrittweite angibt, mit der das Array durchlaufen wird. Der Z\u00e4hler wird so gew\u00e4hlt, dass er mehr Bits lang ist, als zur Adressierung des Arrays n\u00f6tig sind und dann soweit geshiftet, dass die obersten Bits das Array adressieren k\u00f6nnen.<\/p>\n<p>Die Frequenzaufl\u00f6sung ist unter anderem dadurch begrenzt, dass die Frequenz, mit der die Interrupts ausgel\u00f6st werden, nicht zu gro\u00df gew\u00e4hlt werden darf. Ansonsten ist die \u00dcbermittlung der Daten f\u00fcr die drei DACs noch nicht abgeschlossen, bevor der n\u00e4chste Interrupt ausgel\u00f6st wird.<br \/>\nBesonderheiten:<\/p>\n<p>Die lookup-tables werden standardm\u00e4\u00dfig nicht in dem Programmspeicher abgelegt, sondern in dem zu kleinen Datenspeicher.<br \/>\nDurch das Einbinden der Datei &#8222;avr\/pgmspace.h&#8220; k\u00f6nnen allerdings konstante Variablen auf dem Programmspeicher abgelegt<br \/>\nwerden, was die Implementierung mehrerer Signalformen mithilfe von lookup-tables erm\u00f6glicht.<\/p>\n<p>Nachdem die Sinustabelle in richtiger Form angelegt war, konnten innerhalb kurzer Zeit die anderen Signalformen (Rechteck und S\u00e4gezahn) implementiert werden, indem jeweils eine weitere Tabelle angelegt wurde. Desweiteren wurden noch jeweils eine Oktave tiefer und eine Oktave h\u00f6her implementiert, welche dann \u00fcber einen Schalter am Geh\u00e4use ausgew\u00e4hlt werden k\u00f6nnen.<\/p>\n<p>Der Tonumfang ist technisch nur dadurch begrenzt, dass nur 8\u00a0 &#8220;Lichtsaiten&#8220; gebaut werden. In der Startmusik, die einmal gespielt wird, sobald der uC mit Spannung versorgt wird, k\u00f6nnen deshalb auch Halbt\u00f6ne usw. verwendet werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Gruppe Tonerzeugung verarbeitet die eingehenden Signale von der Gruppe 1 &#8211; Saiten. Diese stellt 8 x TTL-Eing\u00e4nge (0V\/5V TTL-Pegel) zur Verf\u00fcgung. Aus den \u00fcbermittelten Signalen werden zum einen die Frequenzen f\u00fcr die Wellenformen generiert und zum anderen eine charakteristische Klangfarbe (ADSR-H\u00fcllkurve) eines Instruments erzeugt. Die Wellenform und die H\u00fcllkurve werden durch eine analoge Schaltung [&hellip;]<\/p>\n","protected":false},"author":62,"featured_media":0,"parent":15,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/pages\/286"}],"collection":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/comments?post=286"}],"version-history":[{"count":5,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/pages\/286\/revisions"}],"predecessor-version":[{"id":422,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/pages\/286\/revisions\/422"}],"up":[{"embeddable":true,"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/pages\/15"}],"wp:attachment":[{"href":"https:\/\/service.projektlabor.tu-berlin.de\/wordpress\/octolaser\/wp-json\/wp\/v2\/media?parent=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}