Hi, habe da mal eione Frage.Müssen von der Schule aus mit dem Attiny 26 eine tonausgabe verwirklichen. Nun wissen wir nicht ob wir Tiefpässe brauchen oder direkt von dem ausgang an die boxen gehen können. Und wäre nett wenn uns jemand sagen könnte, wie das geht das er generell Töne heraus gibt. Und ob einer vielleicht schon weiß wie das C+ Programm heisst, oder uns ein Beispiel geben kann. Vielen Dank im vorraus. Imke
verschiedene möglichkeiten, die mir psontan einfallen: 1. Port togglen 2. PWM 3. D/A-Wandler benutz mal die Boardsuche. da findet sich auf jeden fall was...
was wäre denn das einfachste? Ist PWM leicht? Kann die Box direkt an den Ausgang oder müssen irgendwelche Schaltungen bzw Bauteile vor geschaltet werden? Kannst du mir vielleicht ein Beispiel geben oder eine seite oder eine Anleitung,wäre echt sehr hilfreich? Weil wir müssen das in 2 wochen ab geben und ehrlich gesagt, haben wir nicht gerade viel ahnung davon! Vielen dank schonmal für eure hilfe
Am einfachsten ist sicherlich einen Port in der gewünschten frequenz zu toggeln, wird sich aber ohne weitere beschaltung nicht so toll anhören... das mindeste wär mal n stützkondenstator um den ausgang zu glätten... die pc-lautsprecherboxen kannst du direkt dranhängen. deren verstärker müsste eigentlich ausreichen. mit pwm wirst du wahrscheinlich klanglich das beste ergebnis erzielen... im board hier gibt's genügend beipsiele für so was. raussuchen tu ich dir das jetz nich...
Hier wär mal der Link zu dem PWM-Artikel: http://www.mikrocontroller.net/articles/PWM Entweder du hänst wie gesagt ne Box mit nem Verstärker ran oder so'n Mini-Lautsprecher (der Piepser vom PC) geht auch so normal! Des bekommsch du schon hin, PWM isch echt net so schwer! Gibt genug Beispiele! Such mal nach... tonerzeugung oder sowas in der Art, da findest du genug Zeug. mfg
vielen vielen dank für eure hilfe,das ist echt nett von euch. Nur eins ist noch,ich kenn mich mit der sache echt sozusagen null aus. Also euer stand ist bei 9 oder 10 und meiner ist bei 0 vielleicht sogar 1. habe auch sachen hier über tonausgabe gefunden, nur die schreiben als wenn die tag und nacht nichts anderes machen als das.Also ich versteh da net wirklich wat von.
Dann geh in die Bibliothek,lies ein paar Bücher und bring deinen Wissensstand zumindest auf 5. Stichwörter wären PWM ,Schwingungen,Tiefpass, Programmierung?... 1.Überlege dir wie muss ein Signal das in den Lautsprecher reingeht aussehen. 2.Wie kann ich dieses Signal erzeugen?
ja es muss ein rechtecksignal sein das hab ich mittlerweise mit bekommen und ich kann es mit mehreren sachen erzeugen is ja net gleich ein grund mich an zu machen
@Wolfram: Welches Buch zum Thema PWM würdest du denn empfehlen? @Imke: Vielleicht kann Euch Euer Lehrer Literatur-Hinweise geben. Die Datenblätter (Complete) von Atmel sind übrigens gespickt mit Beispielen...
Ej man Ej das war aber jetzt keine Anmache... Mal schaun ob dein Wissensstand wirklich bei 0 ist. Warum ein RechteckSignal? Ein Ton (eine Frequenz) ist doch eigentlich ein Sinussignal. Welche Frequenz sollte das (Rechteck?)signal besitzen wenn du einen Ton mit der Frequenz 440Hz erzeigen willst?
Du kannst auch erstmal ganz profan eine Zählschleife zur Zeitverzögerung nehmen und einen Pin togglen. Und danach dann den Timer mit dem "toggle pin und clear on compare"-Modus. Die PWM-Modies sind nicht so das richtige, wenn es nur darum geht, die Frequenz zu ändern. Peter
Hallo, das ist falsch Boxen mögen keine Rechtecksignale vor allem die Hochtöner nicht, weil hier das Membran zu abrupt gestoppt wird. Bei einer Schwingung hingegen wird es langsammer abgebremst. Ich müsst also Filter bauen der die Rechtecksignale abrundet wenns sichs auch nach etwas anhöhren soll. Leider ist ein Filter nur für bestimmte frequenzen ausgelegt. Googel also auch mal nach Sinuston. Ich würde das per D/A-Wandler machen wird sich um einiges besser anhören als PWM wird aber von der Programmierung etwas aufwendiger sein.
[OT] ...Modies... Mehrzahl der Mehrzahl des Modus... Ist nicht böse gemeint, brachte mich nur zum Schmunzeln. [/OT]
@Thomas "das ist falsch Boxen mögen keine Rechtecksignale vor allem die Hochtöner nicht, weil hier das Membran zu abrupt gestoppt wird." Das ist auch falsch ! Die Boxen mögen nur nicht, wenn Du hinter den AVR nen 100W-Verstärker auf Vollanschlag schaltest. Die Signalform ist dabei egal, nur das Frequenzspektrum ist entscheidend. Ein 100W-Box ist für 100W über das ganze Hörspektrum ausgelegt, d.h. 100W weißes Rauschen überlebt sie. Der Hochtöner ist aber nur etwa 15W-fest, d.h. bei 100W und 10kHz geht der hops, egal ob Sinus oder Rechteck. Peter
aha und warum verrecken Höchtöner an schwächeren Verstärker eher als welche an stärkeren Verstärkern? Weil die Schwachen Verstärker immer total übersteuert angefahren werden damit überhaupt was rauskommt. Und was dann bei hohen Frequenzen rauskommt ist eher ein Rechteck als ein Sinus.
dann packt man halt einen (aktive) Tiefpass hinter den AVR-Pin und setzt die Grenzfrequenz auf 15kHz. Meistens gehen Boxen deswegen über den Jordan, weil irgendein Mensch damit was zutun hat...(Bedienerfehler)
also jetzt doch ein rechtecksignal? Ich dachte das das impulspausenverhältnis unterschiedlich ist und so die einzelnen töne durch verscheidene frequenzen entstehen? Oder jetzt doch sinus? Arrrrrr! Kennt ihr net jemanden der das schon mal gemacht hat? Ich mein wie ihr euch damit aus kennt ist das doch sicherlich kein problem für euch und irgend jemand wird sowas doch mal zusammen gefuchtelt haben! Und jetzt doch ein tiefpass hinter den AVR-Pin anschliessen? Ich bedanke mich noch mal für eure hilfe
Wenn's erstmal nur piepsen soll und keine Car-Hifi-Qualität erforderlich ist, dann könnte man sich hier mal orientieren: http://www.hanneslux.de/avr/divers/index.html ...
Hi, ich würde eine Tabelle im Flash ablegen und am Port mit einer R2R Widerstandskette die resultierende Spannung abgreifen. Sieht mit 16Stufen schon recht passabel aus. Im Timerinterrupt fährst Du dann deine Tabelle durch. Ist genauso einfach, wie PWM zu programmieren und das Ergebnis um ein vielfaches besser. vy73 DG1RTO DL1RON silent key RIM
Wenn ihr einen Tiny26 verwendet, dann habt ihr hoffentlich genügend ports frei um die Töne nicht mit PWM ausgeben zu müssen! Um einen 10 kHz Sinus auszugeben müßtet ihr laut Shannon Theorem mit mindestens 20kHz quantisieren. Da ein einziger Quantisierungsschritt in PWM allerdings mit mindestens 5 Impulsen erzeugt werden sollte um annähernd eine erträgliche Qualität zu erlangen, wären etwa 100kHz PWM Frequenz notwendig. Da macht der uC aber sonst nichts mehr anderes. Viel einfacher: Nimm einfach n Ausgänge und bau dir einen DA Wandler mit einer Widerstands-Cascade auf: R3 O3 -------[===]-----+ R2 | O2 -------[===]-----+ R1 | O1 -------[===]-----+ R0 | O0 -------[===]-----+---------+------ out | | - | | | --- | |Rx ---Cx | | | - | | | GND GND
Wenn man kein software PWM benutzt ist der controller doch nicht ausgelastet. R2R ist aber auch nicht das wahre, 16 bit Qualität bekommst du damit auch nicht hin. Ich denke mal 8 bit ist maximum und das kann man mit einen schnellen hardware PWM auch machen ohne das es sich wirklich schlimm anhört.
Also Jungs, es geht um einen Anfänger, also immer Schritt für Schritt. Er muß ja auch Erfolgserlebnisse haben, d.h. erstmal den Rechteck zum Laufen kriegen. Sinus geht mit dem Tiny26 auch prima, der hat ja ne PLL, also kann man die PWM-Frequenz bis zu 250kHz hochsetzen, das hört kein Mensch mehr und der Lautsprecher wirkt automatisch als Tiefpaß. Ein externer DAC ist also völlig überflüssig bzw. mit normalen 1%-Widerständen kriegt man nicht mal 8 Bit hin. Für den Sinus legt man eine Tabelle mit 1/4 Schwingung im Flash ab (z.B. 16 Werte) und gibt die dann entsprechend der gewünschten Frequenz nacheinander auf die PWM, z.B. im T0-Interrupt. Peter
Wenn es Sinus und evtl. mehrere Töne gleichzeitig sein dürfen: Suche mal nach "direkte digitale Synthese" http://www.mikrocontroller.net/forum/read-1-134540.html#134581 und alle anderen Links in diesem Thread. Der Clou ist: eine Sinus-Tabelle z.B. mit 256 Einträgen. Der Zugriff auf diese Tabelle geschieht mit einem Pointer, der ein Vorkomma- und ein Nachkomma-Byte hat. Wir wollen z.B. 440 Hz erzeugen, die Samplefrequenz sei 10 kHz, also habe ich 10000 / 440 = 22,7272 Samples für eine Sinusvollwelle. also addiere ich in das Nachkommabyte jedesmal 256*0,7272=186,1632 -> 186 und dann mit Carry die 22 in das Vorkommabyte, das dann als Index in die Tabelle zeigt. Die genaue Frequenz ist 10000/(22+186/256)=440,01375 Hz. So kann man leicht n Töne gleichzeitig erzeugen, für jeden braucht man die 2 Additionswerte und dir 2 "Akkumulator"-Bytes. Das hochwertige Akku-Byte zeigt in die Tabelle (die braucht man nur einmal), die n Tabellenwerte werden addiert und ausgegeben (egal ob PWM oder ADC).
die Möglichkeit mit dem da Wandler ist auch nicht besonderst schwierig. Man schalten einem Port einen 8bit D/A-Wandler nach. Dann legt man die Werte einer Sinuskurve ab die man dann einfach am Port ausgibt, je nach Wartezeiten bis man den nächsten Wert übergibt ändert sich automatisch die Frequenz. Evtl. noch ein Transistor dahinter der die Leistung etwas anhebt. Und ein 8bit Sinuston ist halt doch was anderes als ein kratzender PWM-Ton. Außerdem hat mal halt bei PWM das Problem das der Tiefpassfilter ja nur auf eine bestimmt Frequenz eingestellt wird. Um man dann ganz komische Lautstärkeverhältnisse abhängig vom Frequenzgang bekommt.
Genau so hatte ich mir das auch gedacht... man kann bei 250 kHz PWM einen sound mit bis zu 3 bit pro sample ausgeben weil 250000Hz/(2^3) = 31250Hz und das sollte man nicht mehr hören. Wenn dieser Wert unter 20000Hz geht hört man ein hintergrund-piepsen. Erstmal würde ich aber versuchen per PWM einfach irgend eine hörbare Frequenz auszugeben um einfach ein piepsen zu haben.
Es spricht doch einiges dafür, die PWM-Frequenz noch höher zu legen, z.B. 8MHz, dann habe ich bei 8-bit-PWM ebenfalls 31250Hz. @Thomas warum sollte PWM irgendwie kratzend sein?? Da die Samplerate - wie oben beschrieben - konstant ist, hat der Tiefpassfilter (nahezu) keinen Einfluss auf die Lautstärke. ... je nach Wartezeiten bis man den nächsten Wert übergibt ändert sich automatisch die Frequenz. Das ist bei der o.g. Methode eben nicht so. Man gibt immer mit der konstanten maximalen Sample-Frequenz (idealerweise ist die gleich mit der PWM-Frequenz) die online-berechneten - besser gesagt gelookten - Werte aus der Tabelle aus. Dabei überspringt man jedesmal mehrere (im oberen Beispiel 22-23) Tabelleneinträge. Vorteil der DDS: man kann nahezu jede beliebige Frequenz mit hoher Genauigkeit erzeugen. Bei anderen Methoden gelingt das - vor allem bei hohen Frequenzen - nicht mehr, da bei kleinen Teilern der Sprung um 1 eine große Frequenz-Änderung ergibt.
@Lupin "Genau so hatte ich mir das auch gedacht... man kann bei 250 kHz PWM einen sound mit bis zu 3 bit pro sample ausgeben" ??? Die 250kHz hast Du bei vollen 8Bit (PLL = 64MHz), damit kannst Du selbst einen guten 20kHz Sinus basteln (bloß hören wird den kaum einer). "Erstmal würde ich aber versuchen per PWM einfach irgend eine hörbare Frequenz auszugeben um einfach ein piepsen zu haben." Meine Rede ! Ignorier erstmal die vielen Sinus-Tips und machn Rechteck. Man kann den Berg nicht mit einem Schritt besteigen. Peter
Achso, ich dachte der tiny hat eine max pwm freq von 250kHz, hab mich schon gewundert :) Ich kenne mich halt nicht damit aus. Bei 64 MHz PWM ist 8 bit ja absolut kein Problem mehr. Dann währen 11 bit theoretisches Maximum und das ist schon echt gut, wenn man bedenkt das man dafür keine externe Hardware benötigt!
Hier ist ein weiteres Beispiel mit dem Tiny15. Es werden Melodien abgespielt, deren Einzeltöne gedämpfte Sinus-Schwingungen sind. Die Ausgabe erfolgt über PWM mit 100kHz. http://www.hanneslux.de/avr/divers/melody/melody04.html Dank an AR. und Peter D. für die Inspiration... ...
Vielleicht passt das hier zum thema? http://elm-chan.org/works/mxb/report_e.html Klingt sehr schoen und laeuft mit fasst keine Hardware. Edward
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.