cc2.tv
 
  Forenübersicht
  Anmelden
  Registrierung
  Mitgliederliste
  Teammitglieder
  Hilfe
  Suche
  FAQ
  Forenregeln
  Wie poste ich richtig?
  Impressum

cc2.tv-Fan-Club » CC2tv +CC2audio » ATM18/AVR, Arduino + Sonstiges » AVR Synthesizer-Projekt » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (30): [1] 2 3 4 5 nächste » ... letzte » Antwort erstellen
Zum Ende der Seite springen   AVR Synthesizer-Projekt
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

rolfdegen ist offline
AVR Synthesizer-Projekt Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo zusammen und nachträglich Frohes Fest..

Angeregt durch die letzte TV-Folge 73 des CC2 habe ich wieder Lust bekommen etwas zu bauen. Ein Synthesizer soll es werden. Allerdings bin ich mir im Moment über das Konzept noch nicht ganz im klaren.

Anfang der 90er Jahre stellte die Elektor in einer ihrer Ausgaben einen digitalen Sound Synthesizer Chip mit der Bezeichnung "Sam9203" von der Firma Dream aus Frankreich vor. Diesen Chip habe
ich damals für mein erstes Synthesizer-Projekt bestellt und mit der Entwicklung eines Synthesizer begonnen. Leider habe ich schnell feststellen müssen, das meine Knowhow und mein Entwicklungswerkzeug dafür nicht ausreichte. Die Entwicklung verlief dann leider im Sand und übrig geblieben sind außer dem Synthesizer-Chip jede Menge Erfahrung.

Um einen Überblick über den jetzigen Stand der Musikelektronik zu bekommen, habe ich aus dem Internet ein paar Bauanleitungen für einen Synthesizer zusammengetragen.

Links zu Synthesizer-Selbstbau:
http://www.musiksynthesizer.de/
http://www.analog-synth.de/
http://www.doepfer.de/DIY_Synth_d.htm
http://www.uni-bonn.de/~uzs159/
http://www.art-ignition.de/ptsblog/?p=217
http://www.msarnoff.org/1bitsynth/
http://www.mikrocontroller.net/topic/232845
http://synth-diy.blogspot.com/2008/10/avr-synth-part-1.html
http://code.google.com/p/4bitsynth/
http://modularsynthesis.com/avrsynth/avrsynth.htm
http://www.dream.fr/devices.html


Heutzutage unterscheidet man zwischen zwei Bauarten von Synthesizern. Analoge Synthesizer und digitale Synthesizer. Analoge Synthesizer besitzen zur Klangerzeugung einen spannungsgesteuerten Oszillator. Digitale Synthesizer erzeugen den Ton über digitale Sound-Prozessoren auch DSP genannt.

Im zweiten Teil meines Beitrages möchte ich etwas näher auf die Hardware eines Synthesizer eingehen.

Bis dahin liebe Grüße Rolf

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rolfdegen: 27.12.2011 18:46.

27.12.2011 18:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo..

Ich habe noch einen interessanten Link zu einem AVR Synthesizer-Projekt gefunden. Dieses Projekt ist aus dem Jahr 2007 und Sound-Demos hören sich sehr gut an. Schaut mal rein..

Link: http://www.avrx.se/index.html

Gruß Rolf
27.12.2011 21:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo..

Für mein Synthesizer-Projekts habe ich mich jetzt für die Entwicklung eines Digitalen Synthesizer entschieden. Grundlage für die Entwicklung wird das 36,- € teure AVR Xplain Demo-Kit mit einem leistungsfähigen ATxmega128A1 Chip aus der neuen XMEGA-Familie sein. Das Board ist bestückt mit einem ATxmega128A1-Controller mit internen 128KB Flash, 8 MB SDRAM, 8 MB DataFlash, USB, einem Audioverstärker samt Lautsprecher, Potentiometer, Temperatursensor, 8 Mini-Tasten und 8 Leds.

AT AVR XPLAIN Demo-Kit


Für die Klangerzeugung besitzt der ATxmega 128A1 zwei Zweikanalige 12Bit Digital-Analog Wandler, 8 16Bit Timer/Counter und 24 PWM Kanäle zur verfügung.

Für die Programmierung verwende ich den In-System-Programmer "AT AVR-ISP MK2" von ATMEL. Alle beiden Produkte gibt es bei Reichelt.

Gruß Rolf

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von rolfdegen: 28.12.2011 20:15.

28.12.2011 20:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Level5 Level5 ist männlich
Mitglied

images/avatars/avatar-307.jpg

Dabei seit: 13.03.2008
Beiträge: 46
Wohnort: Wendeburg bei Peine

Level5 ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Ich hätte noch ein paar Links beizutragen:

http://mutable-instruments.net/shruthi1
Hierbei handelt es sich um einen Digital-Synth mit wechselbaren Analogfilter-Platinen.
Die Software ist frei, die Platinenlayout-Dateien können auch runtergeladen werden.
Es werden auch regelmässig komplette Bausätze angeboten (habe schon mehere Exemplare gebaut).
Leerplatinen oder vorprogrammierte Controller-Chips sind auch erhältlich.

Ein anderes Projekt wäre der Preen FM-Synth.
http://sites.google.com/site/preenfm/
Wie der Name schon vermuten lässt, handelt es sich hier um einen Synthesizer, der auf Frequenzmodulation (Operatoren) basiert.
Auch hier sind alle Infos und die Software frei, und es werden gelegendlich Bausätze angeboten.

Beide AVR-Synths klingen einfach super und ergänzen sich prima.

Gruss, Matze
28.12.2011 20:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo Level5

Danke für deine Tips. Die Sachen werde ich mir gleich mal ansehen.

Gruß Rolf

PS: Der Shruthi-Synthesizer (auf was für Namen die Leute kommen.. lol) ist mir schon durch die tollen Klangbeispiele auf der Website aufgefallen. Tolles Gerät, ich bin echt beeindruckt.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 28.12.2011 20:45.

28.12.2011 20:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallöchen..

Gerade auf heise online gelesen. Die Firma Nativ Instruments verschenkt zu Weihnachten einen kostenlosen Software Synthesizer namens "Skanner" inklusive Demo-Sounds.

Link für Skanner: http://www.native-instruments.com/#/de/p...eaktor/skanner/

Bei der Installation des Skanner-Programms ist zu beachten, das eine zweite Software namens "Reaktor 5" mitinstalliert werden muss und am Ende eine Registrierung notwendig ist. Alles beide ist Freeware.

Ich habe mir die Software installiert. Allerdings entstehen bei mir auf dem Rechner beim abspielen der Presets kurze Störgeräusche. Das liegt warscheinlich an dem Soundchip auf dem Mainboard. Dieser scheint für die Wiedergabe etwas überfordert zu sein. Mit einer separaten Soundkarte in meinem Rechner hätte ich das Problem warscheinlich nicht.

Gruß Rolf

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von rolfdegen: 29.12.2011 16:56.

29.12.2011 16:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Der Synthesizer

Die ersten Synthesizer wurden Mitte der Sechziger Jahre von Robert Moog gebaut. Diese Geräte wurden nach seinem Erbauer auch „Moog-Synthesizer“ genannt. Der Moog-Synthesizer wies alle Merkmale auf, die sich heute noch in einem echten oder Softwarebasierenden Synthesizer wieder findet.



Die Hauptkomponenten eines Analogen Synthesizers bestehen aus einem Spannungsgesteuerten Oszillator (VCO = Voltage Controlled Oscillator), einem Spannungsgesteuerten Filter (VCF = Voltage Controlled Filter) und einem Spannungsteuerten Verstärker (VCA = Voltage Controlled Amplifier). Der Spannungsgesteuerte Oszillator (VCO) erzeugt eine elektrische Sinus-, Dreieck- oder Rechteck-Schwingung die reich an Oberwellen ist. Mit dem Spannungsgesteuerten Filter (VCF) kann man den Oberwellenanteil im Frequenzspektum beeinflussen oder ganz entfernen. Der Spannungsgesteuerte Verstärker verändert die Amplitude des Ausgangssignals zu den Lautsprechern.

Gruß Rolf
29.12.2011 23:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Level5 Level5 ist männlich
Mitglied

images/avatars/avatar-307.jpg

Dabei seit: 13.03.2008
Beiträge: 46
Wohnort: Wendeburg bei Peine

Level5 ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Ich habe im Laufe dieses Jahres einen Nachbau des Minimoogs begonnen.
Bis auf die Glide-Funktion (Portamento) funktioniert bereits alles.
Die Klaviatur wird extern angeschlossen.

So sieht er momentan aus:

Dateianhang:
jpg Mini_Front_Knopf.jpg (144,19 KB, 1.748 mal heruntergeladen)
30.12.2011 17:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
d.-debilo d.-debilo ist männlich
Mitglied

images/avatars/avatar-848.jpg

Dabei seit: 10.04.2010
Beiträge: 1.275
Wohnort: Haiger Flammersbach

d.-debilo ist offline
RE: AVR Synthesizer-Projekt Beitrag: beantworten | zitieren | editieren | melden       | Top

Zitat:
Original von rolfdegen
Hallo zusammen und nachträglich Frohes Fest..


Ja, auch so!

Wollte nur mal meine Bewunderung für die Musik- und Musiktechnikfreaks hier mitteilen.

*immerwiederdummguckundstaun* cool
30.12.2011 18:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallöchen..

Ich möchte die Zeit hier im Forum noch für ein paar Infos nutzen, bevor ich zur Silvesterparty bei Monika (meine Nachbarin auf der 1.Etage) gehe.

Gestern bekam ich zwei Päckchen von Reichelt-Elektronik. Das eine enthielt das bestellte XMEGA-A1 Xplained Demo-Kit und das Andere den AVRISPMK2 Programmier-Adapter.

Schnell waren die Sachen ausgepackt und miteinander verbunden. Aber wie das so immer ist, funktionierte nichts reibungslos. Der Original Atmel USB-Treiber für das Xplained Board ließ sich nicht auf meinem modernen Win7 Rechner installieren. Nach langer Suche im Internet und vielen Experimenten an der Rechnerhardware und verschiedenen USB-Treibern gab ich entnervt auf.

Gut dachte ich, das Xplained Board brauch ja für die Stromversorgung nur die 5Volt vom USB-Anschluß. Ein USB-Treiber ist nur dann erforderlich, wenn man das Board über die USB-Schnittstelle programmieren will. Also entschied ich mich für die andere Möglichkeit der Programmierung über den AVRISPMK2. Den hab ich ja schließlich deswegen mitbestellt.

Gesagt getan... und schon wartete das nächste Problem auf mich. Der Programmier-Adapter hatte einen 6pol. Pfostenstecker und das XPlained Board für die Verbindung eine 10pol. Buchenleiste.

Im Inet wurde ich nach schneller Suche fündig und lötete mir einen Adapter, der die beiden Geräte miteinander verband. Leider gab es für den AVRISPMK2-Programmer keine Anleitung und keine Treiber-CD. Nach längerer Studie auf der ATMEL Homepage kam mir die Erleuchtung. Der Treiber für den Programmier-Adapter wird zusammen mit der Entwicklungsumgebung (IDE) AVR-Studio5 installiert.

Gesagt getan.. mich bei ATMEL kostenlos registriert und AVR-Studio5 heruntergeladen und installiert. In AVR-Studio konnte ich dann den Programmie-Adapter auswählen und das Xplained Board ansprechen. Leider funktionierte das aber immer nur bei jedem zweiten Versuch. Das konnte so nicht richtig sein. Kabel nochmals und nochmals überprüft, Steckverbindungen geprüft. Alles ok, also kanns nur irgenwie an der Software haken.. dachte ich.

Stunden mit Experimenten vergingen.. und dann wurde ich im INet wieder fündig. Ein kleiner Tip von einem hilfsbereiten Mitstreiter verbringt machmal Wunder. Ein 100KOhm Widerstand zwischen der ankommenden Datenleitung und Ground am XPlained Board war die Lösung. Schnell den Lötkoben angeschmissen und einen 100K Ohm gesucht. Hab diesen dann auf das Xplaind-Board gelötet und alles funktionierte dann reibungslos.

Jetzt kann die Silvesterparty kommen großes Grinsen ebueb

In dem Sinne an alle CC2-Freunde und dem "Dreigestirn" einen guten Rutsch ins neue Jahr und viel Glück.

Gruß Rolf aus Wuppertal

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 31.12.2011 17:19.

31.12.2011 17:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo Level5

Tolles Projekt. Ich liebe "Moog-Sounds". Vielleicht kannst du ja ein paar Klangbeispiele auf Youtube hochladen.

Was mich noch interessiert, wo bekommt man noch diverse VCA- und VCF-Chips her. Ich liebeugle bei meiner Entwicklung mit der Kombination aus Digitaler-Sounderzeugung und analoger Filte- und Amplitudensteuerung.


Gruß Rolf

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rolfdegen: 31.12.2011 17:28.

31.12.2011 17:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Level5 Level5 ist männlich
Mitglied

images/avatars/avatar-307.jpg

Dabei seit: 13.03.2008
Beiträge: 46
Wohnort: Wendeburg bei Peine

Level5 ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Wenn Du mit dem Suchbegriff "Minimoog DIY" bei YouTube suchst, findest Du einige Beispiele von anderen Nachbauern (z.B. von "eierreiter"). So klingt meiner auch.


Bei Doepfer bekommt man noch den SSM2044 und den CEM3379.
Ein VCA lässt sich mit einem LM13700 aufbauen, den bekommt man bei Reichelt.
Zusätzlich gibt es noch den SSM2164, der sowohl als Filter, alsauch als VCA nutzbar ist.
Wie bei allen obsoleten SSM - und CEM - IC's ist die Beschaffung aber oft nicht einfach, und kosten nicht gerade wenig.
In der Bucht wird manchmal etwas Passendes angeboten (Suchbegriff "CEM" oder "SSM").

Sieh Dir mal die Filter-und VCA-Schaltungen vom Shruthi an, da kommen diese Chips zum Einsatz.

Guten Rutsch!

Matze
31.12.2011 18:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Lutz G
Mitglied

Dabei seit: 01.11.2007
Beiträge: 850
Wohnort: Hamburg

Lutz G ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Zitat:
Original von Level5
Wenn Du mit dem Suchbegriff "Minimoog DIY" bei YouTube suchst, findest Du einige Beispiele von anderen Nachbauern (z.B. von "eierreiter"). So klingt meiner auch.


Klingt der so?

http://www.youtube.com/watch?v=rX6GSUfxTwo&feature=related

Ich bin auch ein großer Freund von Synths, hab in meinem Retro-PC einen Roland-LA-Synth (Roland LAPC-I).

Der tönt dann u.a. so:

http://www.youtube.com/watch?v=ILA7OaEUmrI

Alles weitere dazu in meinem Lotek64 Artikel über diese XXL-ISA-Karte:

http://www.lotek64.com/main/download/Lotek64_14.pdf


Lutz

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Lutz G: 01.01.2012 10:51.

01.01.2012 10:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Level5 Level5 ist männlich
Mitglied

images/avatars/avatar-307.jpg

Dabei seit: 13.03.2008
Beiträge: 46
Wohnort: Wendeburg bei Peine

Level5 ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Zitat:
Original von Lutz G
Klingt der so?

http://www.youtube.com/watch?v=rX6GSUfxTwo&feature=related

Lutz


Ja, so klingt er.
Im ersten Video (Teil 1) ist der Aufbau von ihm zu sehen, so einen Kabelsalat habe ich aber nicht.
Ich habe die Layouts der Original-Platinen übernommen und an meine Bedürfnisse angepasst, z.B. andere Anschlussleisten, und Leiterbahnen auf die Bestückungsseite umgesetzt.
Im Gehäuse wurde dann ein sauberer Kabelbaum gebunden.

Dateianhänge:
jpg Mini_Platinensatz.jpg (125,13 KB, 1.707 mal heruntergeladen)
jpg Mini_Kabelbaum.jpg (138 KB, 1.697 mal heruntergeladen)
02.01.2012 16:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo Level5

Tolle Bilder von deinem Synthi. Der Klang ist natürlich mooglisch. Den bekommt man aber nur durch analoge Klangerzeugung und analoge Filtertechnik hin.

Mir schwebt natürlich ein ganz anderes Konzept von einem Synthesizer im Kopf umher. Ich will den Klang lieber digital erzeugen und zusätzlich Wellenformen aus dem Speicher des Xplained-Board benutzen.

Mein Entwicklungskonzept werde ich hier etwas später genauer erklären. Im nächsten Beitrag möchte ich vorab noch ein wenig die History und Funktionen eines Digitalen Synthesizer erklären.


Gruß Rolf
02.01.2012 17:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
perlian perlian ist männlich
Mitglied

images/avatars/avatar-631.gif

Dabei seit: 04.05.2010
Beiträge: 853
Wohnort: Osnabrück

perlian ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo zusammen

ein sehr interessantes Thema

Ich habe selbst noch einen Korg MS20 und bin an sowas sehr interessiert.

ebueb
06.01.2012 10:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stevie Stevie ist männlich
Mitglied

Dabei seit: 31.03.2007
Beiträge: 221

Stevie ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Intressanter Beitrag. Ich hab mir noch nicht die Links angesehen, aber ich habe ein Hörspiel wo es um "Die Vögel" von Hitchcock geht und der Sound, von den Vögeln kam auch aus einem Syntheziser. Oskar Sala hat das mit seinem Mixturtrautonium gemacht. Das ist ein sehr intressantes Instrument und mir gefällt der Klang. Ich finde besonders gut diese Schiene, auf der man über die Töne gleiten kann. Komisch das das nicht zum Standard bei heutigen Keyboards geworden ist.

Sowas im selbstbau mit moderner Hardware, wäre auch intressant.
06.01.2012 13:00 Beiträge des Benutzers | zu Buddylist hinzufügen
Level5 Level5 ist männlich
Mitglied

images/avatars/avatar-307.jpg

Dabei seit: 13.03.2008
Beiträge: 46
Wohnort: Wendeburg bei Peine

Level5 ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Bei Döpfer bekommt man Trautonium-Module für das A-100 - System, die mit modernen Bauteilen aufgebaut sind.
Die Gleitschiene gibt es in moderner Form (Ribbon Controller, auch von Döpfer erhältlich).
06.01.2012 19:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Der digitale Synthesizer
Bis 1980 gab es nur analoge Synthesizer, welche in der Regel alle modular aufgebaut waren. Unter Modular versteht man die flexible Verkabelung von VCO-Modulen (Voltage Controlled Oscillator) mit VCF-Modulen (Voltage Controlled Filter) und VCA-Modulen (Voltage Controlled Amplifier) in einem analogen Synthesizer.

Sequential Circuits baute 1978 den ersten mikroprozessorgesteuerten polyphonen Synthesizer mit der Bezeichnung "Prophet 5". Er besaß fünf Stimmen mit jeweils Minimoog-ähnlicher Architektur, deren Parameter erstmals digital gesteuert und gespeichert wurden. Dadurch war es nunmehr möglich, die an den Reglern eingestellten Patches abzuspeichern und wieder abzurufen.

Erst 1980 kam Yamaha mit dem GS-1, dem ersten digitalen Synthesizer, auf den Markt. Dieser verwendete zur Klangerzeugung die FM-Synthese. Die FM-Synthese bezeichnet ein technisches Modulationsverfahren bei dem im einfachsten Fall mittels zweier Oszillatoren die erste Frequenz direkt von der Frequenz des zweiten Oszillators frequenzmoduliert wird.





Der DX7
1983 kam der DX7 von Yamaha auf den Markt. Der DX7 war nicht größer als ein heutiges Keyboard. Die Klangerzeugung des DX7 war die digitale FM-Synthese. Jede der sechzehn Stimmen wurd durch sechs Sinus-Oszillatorschaltungen (Operatoren) gebildet, die in Algorithmen kombiniert waren und sich gegenseitig modulieren ließen. Insgesammt standen 32 Algorithmen zur Verfügung. Die Klangerzeugung der beiden Synthesizer-Chips im DX7 waren vollständig digital implementiert. Die digitalen Werte der Sinusschwingungen wurden aus einem internen ROM ausgelesen und weiterverarbeitet. Die Klangauflösung des DX7 betrug allerdings nur 12 Bit. Darüber hinaus war der DX7 einer der ersten Synthesizer mit MIDI-Schnittstelle und sechzehnstimmige Polyphonie. Neben dem internen Klangspeicher (32 Speicherplätze) war er mit einem zusätzlichem Speichermedium (Cartridge) ausgestattet.

Sound Sampling
Eine weitere Revolution in der Geschichte des digitalen Synthesizer, war das Sampling. Beim Sampling werden natürliche Klänge digitalisiert. Diese digitalen Wellenformen bilden dann die Grundlage der Klangerzeugung. Mit dem Sampler war etwas möglich, was bisher nur dem mit Magnetbändern funktionierenden, analogen Mellotron vorbehalten blieb: die reale Wiedergabe akustischer Instrumente. Die ersten Systeme, wie das Fairlight CMI, der Emulator I von E-MU oder später auch das Synclavier von New England Digital, waren extrem teure Geräte, die nur den „Großen“ der Branche vorbehalten waren. Außerdem waren die technischen Möglichkeiten der Wiedergabe wegen der geringen Auflösung und Speicherkapazität zunächst begrenzt. Peter Gabriel und Kate Bush veröffentlichten 1982 die ersten Aufnahmen, auf denen „gesampelte“ Klänge zu hören sind. 1985 kam mit dem Mirage von Ensoniq der erste für die breite Masse erschwingliche Sampler auf den Markt. Sampling prägte schon bald das Klangbild der Popmusik der 1980er Jahre. Heute können mit Computer und Soundkarte umfangreiche Sampling-Bibliotheken geladen und für computerbasierte Musikarrangements genutzt werden.

Gruß Rolf

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 07.01.2012 11:27.

07.01.2012 11:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo

Es ist mir erst jetzt aufgefallen, das ich ein anderes Xplain-Kit besitze, als oben im Forum beschrieben. Hier die richtige Abbildung und technische Beschreibung:

XMEGA-A1 Xplained kit

Technische Daten
Atmel® ATxmega128A1 microcontroller
External memory
8MB SDRAM
Atmel AT32UC3B1256
Communication gateway
Programmer for Atmel AVR® XMEGA®
Analog input (to ADC)
Temperature sensor
Light sensor
Analog output (from DAC)
-Mono speaker via audio amplifier
Digital I/O
UART communication through USB gateway
Eight mechanical button switches
Eight LEDs
Eight spare analog pins
24 spare digital pins


Schematic

Revision history and known issues
To identify the revision of the Atmel XMEGA-A1 Xplained kit locate the bar-code sticker on the back side of the board. The first line on the sticker shows the product ID and the revsion. For example "A09-0560/7" can be resolved to ID=A09-0560 and revision=7.

Revision 7
The Atmel XMEGA-A1 Xplained kit, revision 7, is the first released revision of the XMEGA-A1 Xplained kit.

This kit replaces the Atmel Xplain evaluation kit. Information about the original Xplain evaluation kit can be found in application note AVR1907.

Light sensors
The output range on the light sensor is 0V - 3.3V. The ADC reference must therefore be high enough to match the output range of the light sensor when doing measurements.

USB test points
Touching the test points for the USB data lines on the back side of the board while there is ongoing communication might interrupt the device and cause the device to stop responding. The kit must be reconnected to start working properly again.

XMEGA-A1 Xplained Hardware User's Guide

XMEGA-A1 Xplained Getting Started Guide

Gruß Rolf

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von rolfdegen: 07.01.2012 17:01.

07.01.2012 16:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Lutz G
Mitglied

Dabei seit: 01.11.2007
Beiträge: 850
Wohnort: Hamburg

Lutz G ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Schafft man es, dass so ein Teil analog klingt? Mir ist bei einem Kraftwerk Video aufgefallen, daß da wohl nur noch Laptops auf der Bühne eingesetzt werden, auf denen wohl Softsynths (?) laufen. Klingt bei "Autobahn" dann erstaunlich oldschool.
(Bei Youtube "kraftwerk autobahn" eingeben, 1.Hit)

Ich nehme mal an meine Roland LAPC-I (=MT-32 + zusätzliche FX-Sounds) ist etwas nach dem DX7 einzuordnen? Hier wird eine Kombination zwischen kurzem Sample und generiertem Klang verwendet - die LA Synthese (bei der ein kurzes Sample des Anklangs verwendet wird und der anschließende in der Regel recht gleichbleibende Klang durch einfache subtraktive Synthese generiert wird - Quelle Wiki)

Lutz

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Lutz G: 07.01.2012 17:52.

07.01.2012 17:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo Lutz

Ich denke das die heutigen PC-Soundkarten fast alle im Stande sind, die "Naturgetreuen" Analog-Sound der alten Synthesizern wiederzugeben. Maßgebend ist hier die Qualität der DAC's (DigitalAnalog Wandler) auf den Boards und die Sythesizer Software.

Mitte der 1990er Jahre wurden durch schnellere PC's die "Softsynths" echtzeitfähig und ersetzen auch in professionellen Studios zunehmend die Hardware-Synthesizer.
Anwender solcher Softwarelösungen bemängelt allerdings, dass bei der Bedienung eines Software-Synthesizers das eigentliche Spielgefühl etwas verlorengeht.

Gruß Rolf
07.01.2012 19:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo zusammen..

Wochenend ist Bastelzeit und so hab ich schon mal angefangen ein wenig mit dem XPlained-Kit herumzuspielen.

Zuvor aber noch ein Hinweis auf die Verbindung zwischen Xplained-Kit und dem AVRISP mkII Programmier-Adapter.
Da der 6pol. Stecker des AVRISP mkII nicht an den JTAG/PDI-Anschluss des Xplained-Kits passt, habe ich den 6pol.
Stecker abgeschnitten und die Kabel an einen 10pol. Steckverbinder gelötet (siehe Abbildung).

AVRISP mkII Adapter


Hinweis!
Um Übertragungsfehler zwischen dem Xplained-Board und dem AVRISP mkII zu vermeiden, sollte auf dem Xplained-Board
ein 68K Widerstand (PullDown) zwischen der Data-Leitung und GND gelötet werden. Das rote Kabel am AVRISP mkII ist der Pin 1.

Gruß Rolf

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 14.01.2012 19:06.

14.01.2012 18:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo zusammen

Nach langer Zeit bin ich am Samstag (also Gestern) mal wieder zu Conrad-Electronik in Düsseldorf gefahren. Ist ja mit der Bahn von Wuppertal nur ein Katzensprung entfernt. Eigentlich wollte ich mir bei Conrad eine neue Lötstation kaufen. Meine alte Lötstation von Stannol MPL-4010 gab letzte Woche beim zusammenlöten von ein paar Bauteilen für mein Synthesizer-Projekt den Geist auf. Das gute Stück hatte schon einige Jahre und Lötstunden auf dem Buckel (wie ich großes Grinsen ).

Aber das Angebot im Conrad-Shop in Bezug auf Lötstationen und anderen schönen Dingen die ein Elektroniker Herz höher schlagen lassen wzB. ein Digitales Oszilloskop, war leider sehr enttäuschend. Ich habe mich dann für keines der "Hobby"-Angebot entschieden und bestelle mir später die ERSA Lötstation i-CON 1 im Internet. Diese digitale 80Watt Lötstation ist ausgestattet mit einem automatischer Standby-Sensor im Lötkolben. Diese Automatik erkennt die Ruhephase und senkt die Temperatur nach der vorgewählten Standby-Zeit auf die vorgewählte Standby-Temperatur. Blitzschnelles Auf- und Nachheizen des Lötkolbens von Raumtemperatur auf 350 °C in ca. 9 s, von Standby (280 °C) in ca. 3 s. Heizelement und Lötspitze sind voneinander getrennt. Extrem kurzer Abstand vom Griff zur Spitze (45 mm), dünnes und leichtes Kabel für maximalen Komfort. Antistatischer Griff mit Soft-Pad. Superleicht, 30g.

Bild: ERSA Lötstation i-CON 1



Also dachte ich, damit sich die Fahrt zum Conrad-Shop auch lohnt, kann ich noch ein paar andere nützliche Dinge für mein Elektronik-Hobby einkaufen. Ich habe mich dann für eine preiswerte Lupenlampe, einen neuen Tastkopf für mein altes Röhren Oszilloskop von Hameg und ein paar Messspitzen mit Kabel entschieden. Zuhause angekommen habe ich alles ausgepackt und ausprobiert. Die Lupenlampe ist super. Jetzt seh ich wenigstens mal das was ich da zusammenlöte ebueb

Aber etwas fehlte mir noch Zuhause in meinem Arbeitzimmer. Der Wunsch danach kam mir, als ich neulich in der Entwicklungsabteilung unserer Firma war. Fast jeder Entwickler hatte zwei LCD-Monitore auf dem Schreibtisch stehen. Auf einem Monitor sah man Elektronischen Schaltpläne und auf dem anderen eine Entwicklungsumgebung.

Das wollte ich unbedingt auch so haben und bin nochmals in die Stadt gegangen und habe mir einen zweiten LCD-Monitor mit LED-Hintergrundbeleuchtung von Samsung gekauft. Diesen habe ich schnell zu Hause zusammengebaut und neben meinem 5 Jahre alten LCD-Monitor (auch von Samsung) gestellt. Was mir aber sofort auffiel, war die Tatsache, das mein alter LCD-Monitor keine richtiges Weiß mehr darstellen konnte. Nach einigen Recherchen im Internet sind wohl die CCFL-Röhren für die Hintergrundbeleuchtung des Monitors zu alt und haben nicht mehr genug Leuchtkraft um den Monitor voll auszuleuchten. Werde später versuchen die CCFL-Röhren auszutauschen. Die Preise im Internet liegen so bei 20-30 Euro so das sich eine Reparatur vielleicht noch lohnt.

Bild: Links neuer LCD-Monitor mit LED-Backlight und rechts alter LCD-Monitor mit CCFL-Röhren


Auf dem Bild kann man den weißen Farbunterschied leider nicht genau erkennen. Aber wenn man vor den beiden Monitoren sitzt, kann man es sehr deutlich sehen.
Wenn mir der Austausch der CCFL-Röhren gelungen ist, werde ich hier berichten wies geht. Ich denke, das ich nicht der einzige bin, der dieses Problem mit einem Monitor hat.

Gruß Rolf

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von rolfdegen: 22.01.2012 12:57.

22.01.2012 12:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Der 1.Sound

Bevor ich mit der Programmierung des Atmel XMEGA-A1 Xplained beginne, möchte ich noch eine kurze Anleitung für das aktuelle AVR-Studio 5 und dem neuen XMega-Prozessor geben. Das Programm ist kostenlos und kann auf der ATMEL-Homepage heruntergeladen werden. Der Treiber für den AVRISP mkII Programmer ist in AVR-Studio 5 integriert.

Startet man AVR-Studio5 zum ersten mal, dann hat man die Möglichkeit ein Beispiel-Projekt zu laden. Dazu klickt man auf den Menü-Punkt "File > New > Example Project". Sofort öffnet sich ein Auswahl-Fenster mit verschiedenen Programm-Beispielen.

Bild: Auswahl eines Programmbeispiels


Klickt man auf der linken Spalte auf Kit, so erscheinen in der Auswahl u.a. zwei Projekte für das XMEGA-A1 Xplained Kit, das dann geladen werden kann. Die XMEGA-A1 Xplained demo aplication ist zB. ein Spiel mit Sound- und LED-Effekten.

Bild: C-Programm-File



Um das Programm auf das Xplained Kit zu übertragen, wählt man unter dem Menü-Punkt "Project > XMEGA-A1 XPlained Demo2 Properties" oder den Tasten "ALT+F7" unter "Debugging > Selected debugger" den AVRISP mkII mit PDI Interface aus, dann kann das C-Programm mit dem klicken auf den grünen Pfeil in der Menüleiste oder mit der Tasten "F5" übertragen werden.

Bild: Auswahl Debugger AVRISP mkII


Das Kompelieren und anschließende Übertragen der 127KByte großen Programmdatei dauern auf meinem PC insgesammt ca. 8 Sekunden. Nach Abschluss der Übertragung startet das Programm automatisch und es leuchten die Led's nacheinander auf. Betätigt man eine Taste, so erklingt ein Geräusch. Wie das Spiel genau funktioniert, habe ich aus Zeitgründen leider noch nicht herausfinden können. Vielleicht weis es jemand verwirrt

Youtube-Video:XMEGA-A1 Xplained Demo

Gruß Rolf

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rolfdegen: 22.01.2012 17:59.

22.01.2012 17:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
blubb blubb ist männlich
Mitglied

images/avatars/avatar-343.jpg

Dabei seit: 24.05.2008
Beiträge: 1.942
Wohnort: ::1/128

blubb ist online
Beitrag: beantworten | zitieren | editieren | melden       | Top

Ui, ist das wirklich AVR-Studio in den Screenshots oder ist das doch nur Visual Studio mit den AVR-Studio SnapIns und Add-Ons? Das sieht ja mal richtig hübsch aus und Visual Studio zum Verwechseln ähnlich.

Sehr schick das ganze. ebueb
22.01.2012 18:29 Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Der XMEGA

Der XMega Mikrocontroller wurde Februar 2008 von Atmel vorgestellt. Er unterscheidet sich von seinem Vorgänger, dem ATMega, u.a. in erweiterten Peripherien und Funktionen:

- 4 DMA-Kanäle
- Hardware-Kryptographie (AES und DES)
- Taktraten bis 32 MHz
- Programmspeicher von bis zu 384 KiB
- ADCs mit Auflösung von 12 Bit
- DACs mit Auflösung von 12 Bit
- Jedem Pin ist ein externer Interrupt zuweisbar
- 8-channel Event-System

Das Clock System
Die Clock Source und Frequenz Einstellungen werden bei Atxmega im Gegensatz zu megaAVR‘s nicht über Fuse Bits eingestellt sondern im Programm. Für die ersten Programmierversuche ist also keine Änderung der Fuse Bits notwendig.
2MHz interner RC Oszillator ist die Grundeinstellung beim Start eines Atxmegas. Man kann über den 2MHz RC Oszillator beim Systemstart erste Initialisierungen laufen lassen bevor man per Software auf einen anderen Oszillator umstellt da die externen Oszillatoren meist mehr Zeit benötigen bis diese richtig laufen.


C-Code zum Einstellen auf intern 32MHz RC Oszillator und LED blinken
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
/* 
 *  LED-Test
 *  LED0 an PortE blinkt
 *  
 */
 
#define F_CPU 32000000UL	// Clock-Frequenz für XMega-Controller festlegen (wichtig für delay-Funktion)
#include <avr/io.h>
#include <util/delay.h>

#define LED_OUT PORTE.OUT	// legt den Namen für das Ausgangsregister von PORTE fest
#define LED_DDR PORTE.DIR	// legt den Namen für das Datenrichtungsregister von PORTE fest
#define LED_0 PIN0              // definiert einen Namen für einen bestimmten Ausgang in dem fall LED_0



int main (void) {
  
  // Enable Clock sources. 32MHz
  OSC.CTRL = OSC_RC32MEN_bm;
  // Wait for Oscillators is stable
  while(!(OSC.STATUS & OSC_RC32MRDY_bm));
  // Set System Main Clock */
  CCP = CCP_IOREG_gc;
  CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
 
  // Pin0 von PORTE (LED0) wird auf Ausgang gesetzt
  LED_DDR = 0x01;
  // Ab hier Programm-Endlosschleife
  while(1) {
		// Pin0 von PORTE (LED0) toggln (ein- und ausschalten)
		PORTE.OUTTGL = (1<<LED_0);
		// Warteschleife 0.5sec
		_delay_ms(500);
     }                      
      return 0;                 
}


Das Programm schaltet jede 500msec die LED_0 an PORTE ein bzw. aus.

Gruß Rolf

Dieser Beitrag wurde 6 mal editiert, zum letzten Mal von rolfdegen: 22.01.2012 19:05.

22.01.2012 18:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo

Hier ein einfaches Code-Beispiel um eine 8Bit Sinus-Schwingung über den Lautsprecher des Xplained Board wiederzugeben.

Die Wiedergabefrequenz lässt sich durch ändern der Warteschleife vergrößern oder verkleinern.

Bild: Sinus


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
//***********************************************************
//  Sinusgenerator_01.c
//
//  Created: 29.01.2012 10:41:42
//  Author: Rolf Degen
//
//*********************************************************** 

#include <avr/io.h>
#define  F_CPU 32000000UL	// Clock-Frequenz festlegen (wichtig für delay-Funktion)
#include <avr/io.h>
#include <util/delay.h>

#define LED_OUT PORTE.OUT	// legt den Namen für das Ausgangsregister von PORTE fest
#define LED_DDR PORTE.DIR	// legt den Namen für das Datenrichtungsregister von PORTE fest
#define LED_0 PIN0	        // definiert einen Namen für einen bestimmten Ausgang in dem Fall für LED_0

#define NR_OF_SAMPLES 256       // Number of samples in sample buffer.
#define MISC_PORT PORTQ         // Port für Lautsprecher-Verstärker
#define AUDIO_SD PIN3_bm        // Portbit schaltet Verstärker ein 

static void clock_init (void);
static void dac_init (void);

// Sinus-Tabelle
static const uint16_t sinus[NR_OF_SAMPLES] = {
	128, 131, 134, 137, 140, 143, 146, 149,
	152, 155, 158, 162, 165, 167, 170, 173,
	176, 179, 182, 185, 188, 190, 193, 196,
	198, 201, 203, 206, 208, 211, 213, 215,
	218, 220, 222, 224, 226, 228, 230, 232,
	234, 235, 237, 238, 240, 241, 243, 244,
	245, 246, 248, 249, 250, 250, 251, 252,
	253, 253, 254, 254, 254, 255, 255, 255,
	255, 255, 255, 255, 254, 254, 254, 253,
	253, 252, 251, 250, 250, 249, 248, 246,
	245, 244, 243, 241, 240, 238, 237, 235,
	234, 232, 230, 228, 226, 224, 222, 220,
	218, 215, 213, 211, 208, 206, 203, 201,
	198, 196, 193, 190, 188, 185, 182, 179,
	176, 173, 170, 167, 165, 162, 158, 155,
	152, 149, 146, 143, 140, 137, 134, 131,
	128, 124, 121, 118, 115, 112, 109, 106,
	103, 100, 97, 93, 90, 88, 85, 82,
	79, 76, 73, 70, 67, 65, 62, 59,
	57, 54, 52, 49, 47, 44, 42, 40,
	37, 35, 33, 31, 29, 27, 25, 23,
	21, 20, 18, 17, 15, 14, 12, 11,
	10, 9, 7, 6, 5, 5, 4, 3,
	2, 2, 1, 1, 1, 0, 0, 0,
	0, 0, 0, 0, 1, 1, 1, 2,
	2, 3, 4, 5, 5, 6, 7, 9,
	10, 11, 12, 14, 15, 17, 18, 20,
	21, 23, 25, 27, 29, 31, 33, 35,
	37, 40, 42, 44, 47, 49, 52, 54,
	57, 59, 62, 65, 67, 70, 73, 76,
	79, 82, 85, 88, 90, 93, 97, 100,
	103, 106, 109, 112, 115, 118, 121, 124	
};

void clock_init(void)
{
   // interner Oszillator auf 32Mhz einstellen
      OSC.CTRL = OSC_RC32MEN_bm;
   // Warten bis Oszillator stabil ist
      while ((OSC.STATUS & OSC_RC32MRDY_bm) == 0);
   // System Clock selection
      CCP = CCP_IOREG_gc;
      CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
   // DFLL ein (Auto Kalibrierung)
      DFLLRC32M.CTRL = DFLL_ENABLE_bm;
}

void dac_init(void)
{
    // Parameter für DAC einstellen (DACB = Lautsprecher)
    // Single Kanal Operation
       DACB.CTRLB = ~(DAC_CHSEL_gm | DAC_CH0TRIG_bm) | DAC_CHSEL_SINGLE_gc;
    // DAC Referece-Spannung intern 1.0V 
	   DACB_CTRLC &= ~ (DAC_REFSEL_gm);
	// DAC Left-Adjust einschalten 8Bit-Auflösung
	   DACB_CTRLC |= (DAC_LEFTADJ_bm);
	// DAC Gain Callbration einstellen (Kompensiert Fehler bei der DAC Umwandlung)
	   DACB.GAINCAL = 127;
	// DAC aktivieren, 1CLK Takt, Refresh 16CLKs
       DACB.CTRLA = (DAC_CH0EN_bm | DAC_ENABLE_bm);
	// Verstärker für Lautsprecher einschalten
       MISC_PORT.DIRSET = AUDIO_SD ;
       MISC_PORT.OUTSET = AUDIO_SD ;
	// etwas warten bis Verstärker für Lautsprecher bereit
	   _delay_ms(500); 
}

int main (void)
{
   // RC-Oszillator auf 32MHz
      clock_init();
	  
   // DAC initialisieren
      dac_init();
	  
   // LED_0 einschalten
	  LED_DDR = 0x01;
	  PORTE.OUTCLR = (1<<LED_0);
   
   // DAC-Ausgabe
      uint8_t i = 0;
	  do {
		   // Warte bis DAC bereit
	          while (!DACB.STATUS & DAC_CH0DRE_bm) ;
		   // Lade Wert aus Sinus-Tabelle
		      uint8_t wavesample;
		      wavesample=sinus[i];
		   // Schreibe 8Bit-Sample in DATAH-Register von DAC Chanal 0
	 	      DACB.CH0DATAH = wavesample;
		   // Zeiger für Sinus-Tabelle inkrementieren
		      i++;
		      i %= NR_OF_SAMPLES;
		   // Warteschleife verändert Sinus-Frequenz
		    _delay_us(25);
	     }   while (1);		
           
  return 0;                 
}


Gruß Rolf

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von rolfdegen: 05.02.2012 13:05.

05.02.2012 12:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo

Kleiner Fehler im Code-Beispiel:

In Zeile 9+11 steht zweimal ein #include <avr/io.h> . Einmal genügt vollkommen ebueb


Als nächsten Schritt plane ich für das Explained-Board eine regelbare Frequenzeinstellung und die Ausgabe von Sinus, Dreieck, Sägezahn und Rechteck.

Gruß Rolf

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 05.02.2012 15:36.

05.02.2012 15:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Peter D Peter D ist männlich
Mitglied

Dabei seit: 10.05.2008
Beiträge: 293
Wohnort: Middle Franconia

Peter D ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Zitat:
Original von rolfdegen
steht zweimal ein #include <avr/io.h>

Das ist nicht so schlimm. Deshalb steht in der Include-Datei:
#ifndef _AVR_IO_H_
#define _AVR_IO_H_
..
..
#endif /* _AVR_IO_H_ */

Dadurch wird verhindert, dass sie mehrmals verwendet wird.

Gruß,
Peter
05.02.2012 22:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo Peter.
Danke für deinen Hinweis. Man lernt nie aus. ebueb

Gruß Rolf
06.02.2012 09:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo zusammen und happy weekend

Ein kleines Problem hat mich die Tage etwas beschäftigt. Der XMega-Prozessor auf dem Xplained-Board besitzt zwei Digital-Analogwandler mit einer Abtastrate von 1 MSPS. Das entspricht 1 Millionen A/D-Wandlungen pro Sekunde. Hört sich verdammt schnell an, ist es aber nicht wenn es um Audiowiedergabe geht.

Hier ein kleines Beispiel: Um eine 8 Bit Sinus-Schwingung mit Hilfe der Sinus-Tabelle aus dem oben abgebildeten Programm wiederzugeben, benötigt der DAC also 1.000.000/256 = 256usec. Das entspricht einer maximalen Sinusfrequenz von 3.9KHz. Für Audiowiedergabe ein bisschen wenig..

Die Lösung ist eigentlich ganz einfach. Um die Wiedgabefrequenz zu erhöhen kann man die Anzahl der Abtastungen aus der Tabelle reduzieren. Statt die vollen 256 Werte abzufragen, könnte man bei höheren Frequenzen einfach nur jeden zweiten Wert aus der Tabelle laden. Daraus ergibt sich eine doppelte Sinusfrequenz von zB. 1.000.000/128 = 128usec = 7.9KHz. Die Qualität des ungefilterten Ausgangssignals wird dadurch narürlich etwas schlechter (siehe Bild 1).

Bild 1: Sinus 12.5KHz ungefiltert


Bild 2: Sinus 12.5KHz gefiltert



Die Filterung des Ausgangssignals erfolgt auf dem Eplained-Board über den integrierten Audioverstärker (siehe Bild 3).

Bild 3: Audio-Verstärker auf dem Explained-Board


Datenblatt zum TPA0253


Gruß Rolf

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 11.02.2012 10:18.

11.02.2012 10:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
franz franz ist männlich
Mitglied

Dabei seit: 11.06.2008
Beiträge: 631
Wohnort: Ruhrgebiet,Hohenlohe

franz ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo,

nach Wikipedia: Nyquist-Shannon-Abtasttheorem

theoretisch reichen 2 Abtastwerte für die Darstellung einer Sinusschwingung
aber das gibt wohl nur bei aufwändiger Filterung ein sauberes Ausgangssignal

ich hab hier gerade ein Projekt von SD-Karte am laufen , ich schreibe die nächsten Tage
noch etwas dazu
11.02.2012 17:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
mopedfahrer
Mitglied

Dabei seit: 24.05.2011
Beiträge: 110

mopedfahrer ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo rolfdegen,

Zitat:
Original von rolfdegen
Wie das Spiel genau funktioniert, habe ich aus Zeitgründen leider noch nicht herausfinden können. Vielleicht weis es jemand

könnte es eine Art Memory-Spiel sein? Die LEDs geben vor, welchen Taster du drücken sollst. Und die Serie der Blinksignale wird immer länger. Also
  • LED1 blinkt - Taster 1 drücken
  • LED1,2 blinkt - Taster 1,2 drücken
  • LED1,2,1 blinkt - Taster 1,2,1 drücken
  • LED1,2,1,4 blinkt - Taster 1,2,1,4 drücken
  • usw.
Bei einer falschen Eingabe macht es "piep - piep" und alle LEDs leuchten auf. Dies ist dann vermutlich auch das Startzeichen für ein neues Spiel.

MfG mopedfahrer
12.02.2012 08:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo mopedfahrer

Danke für deinen Tip. Ich hab mir die das Spiel nochmals angesehen und die Beschreibung durchgelesen und da steht doch tatsächlich was von Memory game drin.

Wer lesen kann ist im Vorteil ebueb

Gruß Rolf

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rolfdegen: 12.02.2012 10:09.

12.02.2012 10:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Zitat:
Original von franz
Hallo,

nach Wikipedia: Nyquist-Shannon-Abtasttheorem

theoretisch reichen 2 Abtastwerte für die Darstellung einer Sinusschwingung
aber das gibt wohl nur bei aufwändiger Filterung ein sauberes Ausgangssignal...



Hallo Franz

Um den Hardwareaufwand des Ausgangsfilters am Digital Analog Converter (DAC) so gering wie möglich zu halten, bevorzuge ich lieber eine höhere Abtastrate des Audiosignals.

Dabei stellt sich mir die Frage, welche welche Grenzfrequenz der Tiefpass am Ausgang des DAC's haben sollte. Der DAC arbeitet mit einer Taktfrequenz von 1Mhz und die kleinste Auflösung bei einer Sinusfrequenz von ca. 16KHz liegt bei 64 Bytes.

Bild 1: Sinuskurve 16.0 KHz ungefiltert am DAC-Ausgang vom XMega

Deutlich sind hier die 64 Abtaststufen pro Sinusschwingung zu erkennen. Die Auflösung am Oszilloskop beträgt hierbei 10usec pro Raster.


Bild 2: Sinuskurve 16.0 KHz ungefilter am DAC-Ausgang vom XMega (hohe Auflösung)

Hier ist das gleiche Sinussignal mit einer Auflösung von 1usec pro Raster abgebildet.


Gruß Rolf
12.02.2012 14:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
franz franz ist männlich
Mitglied

Dabei seit: 11.06.2008
Beiträge: 631
Wohnort: Ruhrgebiet,Hohenlohe

franz ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo, rolfdegen

soviel ich weiß,muß beim Tiefpass die Grenzfrequenz gleich der halben Abtastrate sein (finde ich jetzt nicht schriftliches zu) und dann möglichst steil in den Sperrbereich gehen
also bei Deiner Schaltung 500kHz Grenzfrequenz

hier ist noch ein Wiki-Artikel über eine typische Tiefpassschaltung

Butterworth-Filter
leider nur die Übertragungsfunktion, einfachere Berechnungsformeln fehlen

für den einfachen R-C Tiefpass gibt es hier einen Onlinerechner

http://www.sengpielaudio.com/Rechner-RCglied.htm

1Mhz ist aber schon eine hohe Abtastfrequenz fürn Audiobereich, wäre interessant , wie ein 15kHz Sinus
beim CD-Player mit 44,1 Khz Abtastfrequenz aussieht?
12.02.2012 23:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Wiesolator Wiesolator ist männlich
Mitglied

images/avatars/avatar-813.png

Dabei seit: 12.02.2012
Beiträge: 238
Wohnort: Stuttgart

Wiesolator ist offline Fügen Sie Wiesolator in Ihre Kontaktliste ein
Beitrag: beantworten | zitieren | editieren | melden       | Top

Prinzipiell sollte es irrelevant sein, da die Oberwellen auf der Grundfrequenz (in deinem Beispiel 20kHz) liegen werden. Damit ist die eigentlich erste mögliche Oberton-Frequenz erst bei 40kHz, die nächste bei 60kHz und so weiter. Weiteres theoretisches findet man dazu unter der Fourier-Transformation. Je nach Wellenform bilden sich eben entsprechend andere Obertöne aus.

Daher kann man eigentlich nach dem Abtast-Theorem von 2*fmax = 40kHz davon ausgehen, das bei 40kHz der Tiefpass in guter 3. Ordnung so ziemlich abschnüren sollte, und das bereits ab den 20kHz des Audio-Bereichs. Hat auch einen gewaltigen Vorteil wenn man den stufigen Signalverlauf genauer anschaut. Es "klingelt" an jedem Schwinger nach einer Stufe an jedem Oberton, den man damit eben eliminiert. Hinterher ist die maximal realisierbare Kurvenform bei ca. 20kHz, was eigentlich wieder den Vorgaben entspricht.

Selbst für komplexere Kurvenformen ist das für unser Ohr kein Problem, da wir die Obertöne nie wahrnehmen können. Sieht man also im Regelfall nur noch am Messplatz etwas von der schönen Kurve, real hört man nur die unteren Frequenzanteile im Hörbereich der betreffenden Kurvenform.

Aus der Erklärung hoffe ich, das es einleuchtet, mit 40 oder 50kHz für absolut brauchbare Abtastungen zu arbeiten. Das führt im weiteren bei der Sinus-Synthese auf den analogen Filter, und die DDS (direkte digitale Synthese) weiter, die eine konstane Abtastrate besitzt, und einen fein durchstimmbaren Bereich (je nach Auflösung des Phasen-Akkumulators) hat. Bei 8-Bit-Auflösung der DA-Wandler habe ich aber bei 8192 Samples als obersten Limit für eine komplette Wellenform herausgefunden, die nur noch Sprünge von nur einem Digit besitzt. Als Phasen-Akkumulator haben sich für den Audio-Bereich 2 Bytes (16-Bit) als weitaus zu wenig herausgestellt, da sollten es 3 Bytes (24-Bit) sein.

Zudem lassen sich neben der Sinus-Tabelle direkt Sägezahn (direkte Phasenlage) und Rechteck (Phase > Pi = 1) ableiten. Damit hat man schon die ganzen drei Grundwellenformen eines typischen Synthesizers komplett. Den Rest kann man direkt über Wavetables (spezielle Wellenformen - Tabellen - anstatt der Sinus) herleiten. Weiterhin kann man mit reinen Sinuswellen auch additiv jede komplexe Wellenform generieren, wenn man mehrere Phasen-Akkumulatoren programmiert, die über die Sinus-Tabelle zu einem Summensignal addiert. Dort bilden eigentlich nur die Resourcen des verwendeten µC die Schranken.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Wiesolator: 13.02.2012 00:33.

13.02.2012 00:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallo Wiesolator

Danke für deinen Beitrag und die tolle Unterstützung. Deine Mail habe ich erhalten. Das Excel-Programm und die Sinus-Tabellen werde ich mal testen und schaun, ob ich das irgendwie verwenden kann.

Auch dir lieber Frank nochmals recht herzlichen Dank. Gruß Rolf

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 13.02.2012 16:36.

13.02.2012 16:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rolfdegen rolfdegen ist männlich
Mitglied

images/avatars/avatar-873.jpg

Dabei seit: 11.07.2008
Beiträge: 1.720
Wohnort: Wuppertal

Themenstarter Thema begonnen von rolfdegen

rolfdegen ist offline
Beitrag: beantworten | zitieren | editieren | melden       | Top

Hallöchen an alle Besucher meines Projekts

Neu bei den XMegas ist der integrierte 4 Kanal DMA-Controller. Der DMA-Controller (Direct Memory Access) ermöglicht das Übertragen von Daten zwischen Speicher und Peripheriegeräten ohne große Prozessorauslastung. Während der DMA-Controller Daten von einem Speicherbereich zu einem anderen Bereich kopiert, kann die CPU andere Aufgaben wzB. Tastenabfrage oder Textausgabe auf einem LC-Display ausführen.

Bild 1: Datenübertragung mit CPU


Bild 2: Datenübertragung mit DMA-Controller



Die DMA-Funktion habe ich im folgenden Code-Beispiel für die Übertragung der Sinus-Tabelle zum Digital-Analog-Wandler (DAC) benutzt. Gleichzeitig ist die CPU mit der Tastenabfrage und dem Ein- oder Ausschalten von LED und Sound beschäftigt.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
//***********************************************************
//  Sinusgenerator_02.c
//
//  Created: 13.02.2012 10:41:42
//  Author: Rolf Degen
//
//*********************************************************** 

#define  F_CPU 32000000UL	// Clock-Frequenz festlegen (wichtig für delay-Funktion)
#include <avr/io.h>
#include <util/delay.h>

#define LED_OUT PORTE.OUT	// legt den Namen für das Ausgangsregister von PORTE fest
#define LED_DDR PORTE.DIR	// legt den Namen für das Datenrichtungsregister von PORTE fest
#define LED_0 PIN0			// definiert einen Namen für einen bestimmten Ausgang in dem Fall für LED_0

#define NR_OF_SAMPLES 256   // Number of samples in sample buffer.
#define MISC_PORT PORTQ
#define AUDIO_SD PIN3_bm
#define TASTEN_PORT PORTD


void clock_init(void);
void dma_start(void);
void timer_init(void);
void dac_init(void);
void dma_init(void);
void laudspeaker_on(void);
void laudspeaker_off(void);

uint8_t Buffer[256];

// Sinus-Tabelle
static const uint8_t sinus[NR_OF_SAMPLES] = {
	128, 131, 134, 137, 140, 143, 146, 149,
	152, 155, 158, 162, 165, 167, 170, 173,
	176, 179, 182, 185, 188, 190, 193, 196,
	198, 201, 203, 206, 208, 211, 213, 215,
	218, 220, 222, 224, 226, 228, 230, 232,
	234, 235, 237, 238, 240, 241, 243, 244,
	245, 246, 248, 249, 250, 250, 251, 252,
	253, 253, 254, 254, 254, 255, 255, 255,
	255, 255, 255, 255, 254, 254, 254, 253,
	253, 252, 251, 250, 250, 249, 248, 246,
	245, 244, 243, 241, 240, 238, 237, 235,
	234, 232, 230, 228, 226, 224, 222, 220,
	218, 215, 213, 211, 208, 206, 203, 201,
	198, 196, 193, 190, 188, 185, 182, 179,
	176, 173, 170, 167, 165, 162, 158, 155,
	152, 149, 146, 143, 140, 137, 134, 131,
	128, 124, 121, 118, 115, 112, 109, 106,
	103, 100, 97, 93, 90, 88, 85, 82,
	79, 76, 73, 70, 67, 65, 62, 59,
	57, 54, 52, 49, 47, 44, 42, 40,
	37, 35, 33, 31, 29, 27, 25, 23,
	21, 20, 18, 17, 15, 14, 12, 11,
	10, 9, 7, 6, 5, 5, 4, 3,
	2, 2, 1, 1, 1, 0, 0, 0,
	0, 0, 0, 0, 1, 1, 1, 2,
	2, 3, 4, 5, 5, 6, 7, 9,
	10, 11, 12, 14, 15, 17, 18, 20,
	21, 23, 25, 27, 29, 31, 33, 35,
	37, 40, 42, 44, 47, 49, 52, 54,
	57, 59, 62, 65, 67, 70, 73, 76,
	79, 82, 85, 88, 90, 93, 97, 100,
	103, 106, 109, 112, 115, 118, 121, 124
};

void timer_init(void){
	// CH1 = TCD0 overflow
       EVSYS.CH1MUX = 0xD0;
	// Vorteiler: clk/1   
	   TCD0.CTRLA = TC_CLKSEL_DIV1_gc;
    // 1MHz 
	   TCD0.PER = 31; // change Sinus-Frequence     
}

void clock_init(void){
   // interner Oszillator auf 32Mhz einstellen
      OSC.CTRL = OSC_RC32MEN_bm;
   // Warten bis Oszillator stabil ist
      while ((OSC.STATUS & OSC_RC32MRDY_bm) == 0);
   // System Clock selection
      CCP = CCP_IOREG_gc;
      CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
   // DFLL ein (Auto Kalibrierung)
      DFLLRC32M.CTRL = DFLL_ENABLE_bm;
}

void dac_init(void){  
   // Parameter für DAC einstellen (DACB = Lautsprecher)
   // Kanal 0 Auto Trigger (über Event1)   
	  DACB.CTRLB = DAC_CH0TRIG_bm;
	  DACB.CTRLB &= ~ (DAC_CHSEL_gm); 
   // Event 1 triggert den DAC  
	  DACB.EVCTRL = DAC_EVSEL_1_gc; 
   // DAC Conversion Interval = 1CLK (1usec); DAC Channel Refresh Timing Control 16CLK
      DACB_TIMCTRL = 0x00;
   // DAC Referece-Spannung intern 1.0V 
	  DACB_CTRLC &= ~ (DAC_REFSEL_gm);
   // DAC Left-Adjust einschalten 8Bit-Auflösung
	  DACB_CTRLC |= (DAC_LEFTADJ_bm);
   // DAC Gain Callbration einstellen (Kompensiert Fehler bei der DAC Umwandlung)
	  DACB.GAINCAL = 127;
   // DAC aktivieren, 1CLK Takt, Refresh 16CLKs
      DACB.CTRLA = (DAC_CH0EN_bm | DAC_ENABLE_bm);
}	  

void dma_start (void){
   // Buffergröße 256 Byte
      DMA.CH0.TRFCNT = 256;
	  DMA.CH0.SRCADDR0 = (((uint32_t)(&Buffer))>>0*8) & 0xFF;
	  DMA.CH0.SRCADDR1 = (((uint32_t)(&Buffer))>>1*8) & 0xFF;
	  DMA.CH0.SRCADDR2 = (((uint32_t)(&Buffer))>>2*8) & 0xFF;
	  DMA.CH0.CTRLA = 0xA4;   // Aktivieren, Wiederholen, 1 Byte, Single
}

void dma_init(void){
	DMA.CTRL = DMA_CH_ENABLE_bm; // Aktivieren Single Buffer, Burst Size 1Byte
	DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_TRANSACTION_gc | DMA_CH_SRCDIR_INC_gc
	| DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc;
	DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_DACB_CH0_gc; // DACB CH0 is trigger Quelle
	DMA.CH0.DESTADDR0 = (((uint32_t)(&DACB.CH0DATAH))>>0*8) & 0xFF;
	DMA.CH0.DESTADDR1 = (((uint32_t)(&DACB.CH0DATAH))>>1*8) & 0xFF;
	DMA.CH0.DESTADDR2 = (((uint32_t)(&DACB.CH0DATAH))>>2*8) & 0xFF;
}

void laudspeaker_on (void){
   // Verstärker für Lautsprecher einschalten
      MISC_PORT.DIRSET = AUDIO_SD ;
      MISC_PORT.OUTSET = AUDIO_SD ;
}

void laudspeaker_off (void){
   // Verstärker für Lautsprecher einschalten
      MISC_PORT.DIRSET = AUDIO_SD ;
      MISC_PORT.OUTCLR = AUDIO_SD ;
}

int main(void){
	
	clock_init();
    timer_init();
    dac_init();
    dma_init();
         
 // SRAM-Buffer mit 256 Werten aus der Sinus-Tabelle füllen
    uint16_t i = 0;
    for (i = 0; i < 256 ; i++) {
	     Buffer[i] = sinus[i];
	}
 
 // Datenübertragung mit Hilfe der DMA-Funktion zum DAC starten	 
	dma_start();
	
 // Lautsprecher aus
	laudspeaker_off();
 // LED_0 ausschalten
	LED_DDR = 0x01;
	PORTE.OUTSET = (1<<LED_0);
 // PORTD auf Eingang schalten
	PORTD.DIRSET = 0x00;
 // Pullup-Widerstände an PORTD aktivieren	
	PORTD.PIN0CTRL = 0x38;
	
 // Tasten-Flag (Flag = 1 Taste gedrückt / 0 = Taste nicht gedrückt 
	uint8_t key_flag = 0;
 // Schleife Tastenabfrage
	while (1){
	   if (!( PORTD.IN & 0x01 )) { // Tastenport für SW0
			if (key_flag == 0) {
				key_flag = 1;
				PORTE.OUTCLR = (1<<LED_0); // LED on
				laudspeaker_on();
				while(!( PORTD.IN & 0x01 )){_delay_ms(50);}  // Taste entprellen
			}	
			else{
				key_flag = 0;
				PORTE.OUTSET = (1<<LED_0); // LED off
				laudspeaker_off();	
				while(!( PORTD.IN & 0x01 )){_delay_ms(50);}  // Taste entprellen
			}											
		}
	}	
	
	return 0;
}


Gruß Rolf

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rolfdegen: 13.02.2012 23:06.

13.02.2012 22:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Seiten (30): [1] 2 3 4 5 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
 
Antwort erstellen
cc2.tv-Fan-Club » CC2tv +CC2audio » ATM18/AVR, Arduino + Sonstiges » AVR Synthesizer-Projekt

Impressum - Datenschutzerklärung

Forensoftware: Burning Board, entwickelt von WoltLab GmbH