Moin, für mein Modellboot möchte ich ein eigenes Soundmodul bauen. Ich arbeite erst seit kurzem mit den ATmegas in C und bin noch am lernen. Auf dem Schiff wird sich für die Steuerung sowieso ein Atmega644P befinden, über den das Soundmodul über TWI die Befehle erhalten würde. Für die algemeine Soundausgabe mit den Megas habe ich schon ein pdf gefunden, durch das ich mich erstmal durcharbeiten werde: http://www.uni-koblenz.de/~physik/informatik/ECC/sound.pdf Aber ich hätte da noch ein paar fragen. Ich habe im Internet ein bissle nach Sound für mein Boot gesucht und rausgefunden, dass ein z.b. ein Schiffshorn ca. 6-15kb groß ist, mono und 8-bit ist. Erste frage: Wie bekomme ich diese Sound in ein format, damit ich sie auch auf einen Mega packen kann. Ich habe schon gesucht, und gelesen, dass man die Sounds in das raw format konvertieren kann, aber nachdem ich das gemacht hatte und eine Datei geöffnet hatte, konnte ich die nicht auslesen. Zweite Frage: Welchen Mega/Tiny kann ich für sowas ambesten verwenden. Laut google, soll der Tiny25 gut sein, weil er FastPWM hat. Da der Platz dadrauf begrentz ist, der Chip aber relativ klein ist, könnte ich für jeden Sound einen eigenen Tiny nehmen, das wären dann ca. 4-5. Die schließe ich dann alle über Widerstände an den Verstärker an. Dritte Frage: Da die Sounds doch noch relativ groß sind, müsste ich sie wahrscheinlich noch irgenwie kompriemieren, damit sie auf einen Chip passen, wie stelle ich das ambesten an? Vierte Frage: Je nachdem wie Schnell ein Boot ist, verändert sich auch das Motorgeräusch. Lässt sich dass auch irgentwie verändern, wenn ich die Bytes des Soundfiles verändere? Fünfte Frage: Ich kenn mich in dem Bereich Verstärker nicht so aus. Welchen IC und Lautsprecher könnte ich dafür verwenden? Hier noch ein paar Eckdaten: Spannung: 12V (mit 3,3V und 5V Spannungsreglern) Lautstärke: Sollte lauter als Zimmerlautstärke sein Platz: der IC sollte mit Kühlkörper nicht allzugroß sein, und der lautsprecher (nur einer für mono) sollte nicht größer als 7x7cm bis 10x10cm sein. Ich bestelle meine Teile immer bei Reichelt, es wäre also schön, wenn sie die Teile auch haben. Wer natürlich ne komplett andere Idee hat, wie man das ganze einfach gestalten kann, immer her damit. Ich hoffe ich bekomme zumindest auf einen Teil der Fragen antworten. Und danke schonmal im voraus. MfG Philipp
Als Verstärker reicht sicher ein LM386 oder vergleichbar. Deinen Sound bekommst du nur auf dem AVR, wenn er klein genug ist. RAW ist schon das passende Dateiformat, da stehen dann 8 bit pro Sample zur Verfügung, und du kannst den Ton schneller oder langsamer abspielen (mit höherer oder niedriger Tonhöhe) wenn du die Samples in anderen Geschwindgkeiten ausgibst. Du brauchst noch einen D/A-Wandler, bei 8 Bit durch 8 Ausgänge des AVR und ein R2R Widerstandsnetzwertk machbar und ausreichend, es muss kein DAC08 sein. Um RAW in das Assembler- oder C-Programm aufzunehmen, musst du die Bytes in Konstanten für ein ARRAY umwandeln, und damit auch deren Schreibweise, also z.B: 0x56 0x9F, 0x51, ... Normalerweise ollte man so was selber programmieren können. Schwieriger wird es, wenn deine Sound RAW grösser sind als der Speicher des Prozessors. Du musst nicht nur eine Kompressionsmethode finden, die der AVR auch decodieren kann (MP3 wird etwas hart), sondern auch eine die du in unterschiedlicher Sample-Rate auslesen kannst damit du deine Geschwindigkeit anpassen kannst. Da gibt es ADPCM und andere, die aber alle nicht so effektiv komprimieren wie MP3. Daher sind viele Soundmodule mit GROSSEM Speicher ausgerüstet, den man an einen AVR natürlich auch extern anbinden könnte, z.B. ein serielles Megabyte-EEPROM.
Philipp Maricek schrieb: > Erste frage: Wie bekomme ich diese Sound in ein format, damit ich sie > auch auf einen Mega packen kann. Ich habe schon gesucht, und gelesen, > dass man die Sounds in das raw format konvertieren kann, aber nachdem > ich das gemacht hatte und eine Datei geöffnet hatte, konnte ich die > nicht auslesen. Normales RIFF-WAV bekommt jeder AVR hin > Zweite Frage: Welchen Mega/Tiny kann ich für sowas ambesten verwenden. > Laut google, soll der Tiny25 gut sein, weil er FastPWM hat. Da der Platz > dadrauf begrentz ist, der Chip aber relativ klein ist, könnte ich für > jeden Sound einen eigenen Tiny nehmen, das wären dann ca. 4-5. Die > schließe ich dann alle über Widerstände an den Verstärker an. > Dritte Frage: Da die Sounds doch noch relativ groß sind, müsste ich sie > wahrscheinlich noch irgenwie kompriemieren, damit sie auf einen Chip > passen, wie stelle ich das ambesten an? Speicherplatz bekommst du in Form von µ(SD) Karten praktisch umsonst, nimm die. > Vierte Frage: Je nachdem wie Schnell ein Boot ist, verändert sich auch > das Motorgeräusch. Lässt sich dass auch irgentwie verändern, wenn ich > die Bytes des Soundfiles verändere? Spiel' sie einfach schneller oder langsamer ab, wenn sich nur die Frequenz ändern soll. An http://elm-chan.org/works/sd8p/report.html könntest du dich orientieren.
Moin, danke schonmal für die Antworten. Eine frage noch, wofür brauche ich einen D/A-Wandler? Ich gebe die Bytes dann doch über PWM aus. MfG Philipp Maricek
Philipp Maricek schrieb: > Erste frage: Wie bekomme ich diese Sound in ein format sox > Zweite Frage: Welchen Mega/Tiny kann ich für sowas ambesten verwenden. > Laut google, soll der Tiny25 gut sein, weil er FastPWM hat. FastPWM ist nicht nötig. Die normale PWM eines ATMega1284P reicht vollkommen aus. Der hat auch genug Speicher für Deine Sounds. Die SW wird recht winzig werden, da bleibt noch einiges über. > Dritte Frage: Da die Sounds doch noch relativ groß sind, müsste ich sie > wahrscheinlich noch irgenwie kompriemieren, damit sie auf einen Chip > passen, Nein. 15kB Soundfiles bekommst Du neben dem Programm noch ca. 8 in 128kB Speicher. > Vierte Frage: Je nachdem wie Schnell ein Boot ist, verändert sich auch > das Motorgeräusch. Lässt sich dass auch irgentwie verändern, wenn ich > die Bytes des Soundfiles verändere? Entweder spielst Du sie langsamer oder schneller ab. Allerdings verändert sich der Klang auch mit unterschiedlicher Geschwindigkeit, so daß Du für verschiedene Geschwindigkeiten nicht nur die Abspielgeschwindigkeit ändern musst, sondern evtl. auch das Soundfile. > Fünfte Frage: Ich kenn mich in dem Bereich Verstärker nicht so aus. > Welchen IC und Lautsprecher könnte ich dafür verwenden? Hier noch ein > paar Eckdaten: z.B. TDA2030. evtl. als Brücke (Schaltung im Datenblatt) (LM3886 benötigt mindestens 20V) Gruß Jobst
Eventuell ist auch dieser Link hilfreich: http://www.mcselec.com/index.php?option=com_content&task=view&id=234&Itemid=57
Guten Morgen, ok danke, ich werde mich damit mal auseinander setzten. @MaWin: Jetzt hab ich gerade erst gecheckt, wofür der DAC wäre, ich werde das ganze dann wahrscheinlich auch mit dem DAC08 machen, weil die R2R Widerstandsnetzwerke laut wikipedia "Widerstandskiller" sind und sehr viel Platz brauchen. Den DAC08 gibts bei Reichelt einmal mit EP und einmal mit CP. Wo ist da der Unterschied? Nochmal kurz ne andere Frage, den 644p und den 1284p werde ich mit 20Mhz Quarzen betreiben. Was für Kerkos muss da mit anschließen? Bei 16Mhz habe ich bisher immer 22pf benutzt. MfG Philipp
Hi Gibt es als AppNote von Atmel: http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf http://www.atmel.com/dyn/resources/prod_documents/avr335.zip > weil die R2R Widerstandsnetzwerke laut wikipedia "Widerstandskiller" sind >und sehr viel Platz brauchen. Gibt es fertig als Bauteil. MfG Spess
Nimm doch einfach einen Microcontroller mit integrierten DA-Wandler. Als ATmega habe ich da zwar nur den ATmega64M1 mit ausreichend Flash gefunden, den man aber scheinbar nirgends bekommt (zumindest nicht bei Farnell, Digikey oder Reichelt), aber es gibt ja auch noch sowas wie STM32F100, was zwei 12 Bit DACs und 16 ADCs mit 12 Bit integriert hat. Wenn deine Bootsteuerung nicht in Serie gehen soll, dann kannst du dir auch ein Header-Board kaufen, um es auf Lochraster aufzubauen, z.B. hier: http://www.olimex.com/dev/stm32-h103.html und du brauchst dann nur noch den Audio-Verstärker und den Rest deiner Bootsteuerung anschließen und fertig ist die Schaltung. Quarze zum laufen zu bringen, richtiges Platinen-Layout, auf alles andere achten wie Abblockkondensatoren usw., ist nicht so einfach, falls du noch keine Erfahrung mit Microcontrollern hast.
Cool danke, werds mir mal anschauen. Ich werde einfach mal den DAC und die Widerstandsnetzwerke testen. Mal gucken was besser ist. MfG
Philipp Maricek schrieb: > @MaWin: Jetzt hab ich gerade erst gecheckt, wofür der DAC wäre, ich > werde das ganze dann wahrscheinlich auch mit dem DAC08 machen, weil die > R2R Widerstandsnetzwerke laut wikipedia "Widerstandskiller" sind und > sehr viel Platz brauchen. Da steht Widerstandsgrab, weil du so viele davon brauchst. Widerstände generell sind nicht lebendig :-) Viel ist aber relativ: Du könntest ja mal probeweise einen 4-Bit Wandler ausprobieren. Für ein paar Bootsgeräusche sollte das eigentlich ausreichen. Da braucht man dann 13 Widerstände (man verwendet wegen Genauigkeit am besten für 2 R zwei von den R Widerständen). Als SMD bekommst du das locker auf Daumengröße hin. Um die Bestückung zu vereinfachen, kannst du auch Widerstandsarrays verwenden: http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=Y1103DKR-ND Einzelne Widerstände sind allerdings preiswerter, da bekommst du problemlos 100 Stück für insgesamt 70 Cent: http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=RMCF0805JT10K0CT-ND Bei 4 Bit sollte die Genauigkeit von 5% noch ausreichen, zumal wenn die aus derselben Charge sind, meist sowieso genauer sind, relativ zueinander gesehen. Oder du selektierst die per Ohmmeter, falls es keine Serienproduktion werden soll. Bei höherer Auflösung besser einen Microcontroller mit integriertem DAC nehmen.
Wenn ich das richtig verstanden habe, bekomme ich mit einem Externen DAC eine bessere Soundqualität hin. MfG Philipp
Ich würde es mal ausprobieren. Wenn du keine HiFi-Boxen mit an Bord hast, dann bekommst du ggf. mit dem PWM-Ausgang genauso guten Sound hin, wie mit einem externen 8 Bit DAC, da der Lautsprecher und die akustischen Qualitäten des Boots dann die begrenzenden Faktoren sein könnten.
Es muss nicht immer Kaviar sein, es geht oft auch recht einfach... Die hier http://www.hanneslux.de/planet5b/Harzkamel/DSCN0003.JPG zu sehende Rucksackplatine mit ATTiny85 und LM386 enthält Geräusche für Anlasser, Dieselmotor, Bimmelbahnglocke und Hupe (Horn). Die "Drehzahl" des Diesels wird von einer Gleichspannung gesteuert, die per Tiefpass aus der Motor-PWM des Fahrtreglers gewonnen wird. Über 3 weitere Steuereingänge wird das Modul aktiviert (mit Anlasser beim Einschalten) und deaktiviert, bzw. Glocke und Horn ausgelöst. Die Geräusche für Glocke, Horn und Motor können gleichzeitig erzeugt werden. Die Ausgabe erfolgt über High-Speed-PWM und Tiefpasss, die Verstärkung mit einem LM386. Bei halb aufgedrehtem Lautstärke-Poti ist die Lautstärke ausreichend für eine Gartenbahn-Lok. Der LM386 wird mit 3 Li-Zellen (11,1 V Nennspannung) betrieben, der ATTiny85 mit 5V. Stromversorgung und Steuerung erfolgen über Steckverbinder vom RC-Fahrtregler der Lok. ...
Schau dir auch mal die Sounderzeugung der Diesel-Ente an. http://www.hubersoft.net/elektronik/dieselente/dieselente.html Auf der Seite gibts auch eine MP3, wie sich das dann anhört. Die Sounderzeugung basiert nur auf an- und abschalten eines Portpins. mfg mf
> frage noch, wofür brauche ich einen D/A-Wandler? Damit die Ausgabe auch programmtechnisch einfach zu realisieren ist, du hast hier den Eindruck hinterlassen, auch mit einfachsten Programmieraufgaben bereits überfordert zu sein. > Ich gebe die Bytes dann doch über PWM aus Wenn du das programmtechnisch beherrscht, dann kannst du dir den DAC sparen, er war nur als Vereinfachung des Programms gedacht, sozusagen Hardware statt Software. > ich werde das ganze dann wahrscheinlich auch mit dem DAC08 machen, > weil die R2R Widerstandsnetzwerke laut wikipedia "Widerstandskiller" > sind und sehr viel Platz brauchen. Ich weiß nicht, wie du Wikipedia liest: "Hier wird das analoge Ausgangssignal durch je einen parallel geschalteten Widerstand pro Bit erzeugt, der je nach Bit gewichtet ist. Zur Vereinfachung der Herstellung wird meist das R2R-Netzwerk verwendet. Man benötigt so viele Schalter, wie Bits zur Darstellung der digitalen Werte verwendet werden. ... Bei ungenauer Gewichtung der Bits treten Monotoniefehler auf. Das Parallel-Verfahren bietet einen guten Kompromiss aus Aufwand und Umsetzungsgeschwindigkeit und wird häufig verwendet. Bei hoher Umsetzerauflösung (Bitanzahl) besteht die Gefahr von Monotoniefehlern." Der Text ist akzeptabel und sagt nicht das aus was du meinst gelesen zu haben. Ja, normale gekaufte Widerstände ergeben keinen besonders guten DAC. Aber der ist bei einfachem Audio wie Schiffsdieselbrummen auch nicht notwendig. > Den DAC08 gibts bei Reichelt einmal mit EP und einmal mit CP. > Wo ist da der Unterschied? Siehe Datenblatt. Die Genauigkeit. E ist doppelt so genau (braucht man nicht, aber bei demselben Preis...). Allerdings ist der DAC08 nur zu empfehlen, wenn dein Verstärker mit +5V/-5V zum uC läuft, und nicht mit 12V zu 5V. Da sind Widerstände einfacher. Und wennn dir PWM kein Problem in der Programmierung macht, ist jener natürlich noch einfacher, nur 1 Leitung.
Einen 8-Bit-Wandler baut man mit 15 Widerständen:
1 | P7 ---10K||10K---+----------Rv-------+--------o Out |
2 | | | |
3 | P6 -----10K------+ | |
4 | | | \ | |
5 | P5 ---10K--10K---+---------| - \ | |
6 | | | \___| |
7 | P4 ---22K--18K---+ | / |
8 | | +5V---| + / |
9 | P3 ---47K--33K---+ | / |
10 | | |
11 | P2 --150K--10K---+ - - - - - - - - - |
12 | | +10V |
13 | P1 --220K--100K--+ : | : |
14 | | 1 |
15 | P0 ----680K------+---- --2K2--+-->0 Offset |
16 | : | K : |
17 | C | |
18 | | | |
19 | : GND : |
20 | - - - - - - - - - |
21 | Nur, wenn Offset benötigt wird |
22 | |
23 | Vout ss = Rv * 2mA |
Evtl. muss das MSB getrimmt werden. Ansonsten reicht das aus! PWM reicht allerdings auch aus! Die PWM ist linearer und für das Ohr immer noch schnell genug (80kHz hörst Du nicht!) Gruß Jobst
:
Bearbeitet durch Admin
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.