Hei zusammen Ich hab mir vor kurzer Zeit ein Xplained A1 mit einem XMEGA128A1 gekauft um mich mit gcc auseinanderzusetzen. Da der Beispielcode von ATMEL ziemlich kritisch ist für mich habe ich von Grund auf angefangen. Buttons und LED's ansteuern geht ziemlich einfach. Nun möchte ich gerne Töne ausgeben. Hat jemand von euch Beispielcode wie man über den Speaker auf dem Board einen Ton mit einer bestimmten Frequenz o.ä. ausgeben kann? Ich habs leider nicht geschafft. =/ Danke und Gruss Farin
:
Verschoben durch Moderator
Ist mir jetzt ein Rätsel warum der Beitrag verschoben wurde, da er explizit mit den programmatikalischen Aspekten der Wiedergabe von akustischen Signalen auf einer bestehenden Schaltung verweist. Aber egal. Hat das jemand schon einmal gemacht? =)
1. Doku von atmel zum xplain board runterladen. 2. Schauen wo der Speaker angeschlossen ist. 3. Hier schauen wie ich einen Portpin als Ausgang konfiguriere. 4. Dann schauen wie ich einen Timer mit Interrupt konfiguriere. 5. Im Interrupt den Portpin toggeln. 1-5 bei fragen, frag Gruß jonas
Das Ganze ist mir klar. Ich bin gerade auf Arbeit darum hab' ich den Code nicht hier aber das Ganze hab ich schon gemacht. Der Speaker liegt auf PortB, Pin2. Das Toggeln funktioniert auch. Aber ich krieg keinen Ton dabei raus.. =( Muss ich noch etwas anderes aktivieren ausser dem PORTB als Ausgang.
Da der Speaker auf PortB, Pin2 liegt toggle ich diesen Pin in einer while(1)-schleife und einem delay von 200 ms. Das Toggeln funktioniert auch. Aber ich krieg keinen Ton dabei raus.. =( Muss ich noch etwas anderes aktivieren ausser dem PORTB als Ausgang.
Hast du ein Oszi um dir das Signal mal anzusehen? Dazu, mal nachgedacht, welche Frequenz du damit erzeugst? Ich hab mal so überschlagen und bin so bei 5Hz gelandet. Das kann kein Mensch hören. Versuch mal 20ms oder 2ms. Das sollte man dann hören können. Gruß Jannis
200 ms = 2,5 Hz, da alle 400ms ein Takt. Da hörste nichts, wie oben schon geschrieben. ;)
Hei Leute Also das ist mein Code. Dieser funktioniert leider nicht. F_CPU ist übrigens auf 32000000 gesetzt. Any ideas? Ich wäre euch extrem dankbar.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | #define SOUNDPORT PORTB
|
5 | #define LEDPORT PORTE
|
6 | #define SOUNDPIN PIN2
|
7 | |
8 | int main(void) |
9 | {
|
10 | SOUNDPORT.DIR = 0xFF; |
11 | while(1) |
12 | {
|
13 | LEDPORT.OUT = 0xFF; |
14 | SOUNDPORT.OUTTGL = (1<<SOUNDPIN); |
15 | //Bit-toggling
|
16 | _delay_ms(20); |
17 | SOUNDPORT.OUTTGL = (1<<SOUNDPIN); |
18 | }
|
19 | return 0; |
20 | }
|
Gruss Farin
Du solltest den Verstärker noch einschalten. Sei gewarnt, das ein einfaches toggeln des Output Pins eine recht hohe Lautstärke erzeugt:
1 | #define MISC_PORT PORTQ
|
2 | #define AUDIO_SD PIN3_bm
|
3 | // PortQ for Audio Shutdown
|
4 | MISC_PORT.DIRSET = AUDIO_SD ; |
5 | MISC_PORT.OUTSET = AUDIO_SD ; |
Kleinere Lautstärken machst du besser mit dem DAC. Ohne an der Sysclk rumzufummeln startet der XMega übrigens mit 2 Mhz, das steht aber im Datenblatt...
schau doch mal im AVR Studio 5 Software Framework, da gibt es die Ursprungs-App mit Sound-Ausgabe: File -> New -> Example Project -> Kit -> Xmega A1 Xplained -> Xmega A1 Xplained Demo application
Durch ASF ist diese App leider alles andere als übersichtlich, da kann ich schon verstehen, das man als Anfänger schnell mal den Durchblick verliert. Der Schaltplan allerdings ist sehr hilfreich und sollte am Anfang stets ausgedruckt neben der Tastatur liegen :D
Na dann such mal 'nen Schaltplan vom XPLained Board... ^^ Ich hab' schon Stunden zugebracht das zu suchen... Die einzigen Angaben stehen in der Dokumentation zum Board und die ist ziemlich verkackt...^^ Vielen herzlichen Dank übrigens an Matthiasm jetzt funktioniert alles perfekt so wies sein soll. Warum dieser Port gesetzt werden muss ist aber ein Rätsel für mich.. ;-) Gruss Farin
Raphael B. schrieb: > Na dann such mal 'nen Schaltplan vom XPLained Board... ^^ Nichts leichter als das! > Ich hab' schon Stunden zugebracht das zu suchen... Die einzigen Angaben > stehen in der Dokumentation zum Board und die ist ziemlich verkackt...^^ Wo hast Du bloß stundenlang gesucht? Die gewünschte Information liegt auf der Atmel-Website direkt unter den "Documents"-Tab für das XMega A1 Xplained: http://www.atmel.com/dyn/products/tools_docs.asp?category_id=163&family_id=607&subfamily_id=1965&tool_id=17168 -> Atmel AVR1924: XMEGA A1 Xplained Hardware User Guide dort auf das CD-Icon klicken -> (führt zu folgendem Direktlink) http://www.atmel.com/dyn/resources/prod_documents/AVR1924.zip Das ZIP-Archiv enthäl eine PDF-Datei mit dem kompletten Schaltplan, Maßzeichungen der Platine incl. Bemaßung aller Steckverbinder, Bestückungsplan, sowie der Stückliste. Wo ist jetzt Dein Problem? Gruß, Thorsten
Ich glaube, dein Toggeln ist falsch: (ich kenn jetzt zwar Atmel Chip nicht näher, schaut aber verdächtig aus) while(1) { LEDPORT.OUT = 0xFF; SOUNDPORT.OUTTGL = (1<<SOUNDPIN); //Bit-toggling _delay_ms(20); SOUNDPORT.OUTTGL = (1<<SOUNDPIN); } zieht den Pin z.B. hoch, wartet 20ms, dann runter. Und SOFORT wieder hoch. Der Impuls ist nur ganz kurz, wird vielleicht je nach Beschaltung raus gefiltert. Signal schaut dann irgendwie so aus: ^____________________________^_________________________^ Vielleicht mal so while(1) { LEDPORT.OUT = 0xFF; SOUNDPORT.OUTTGL = (1<<SOUNDPIN); //Bit-toggling _delay_ms(20); // AUSKOMMENTIERT SOUNDPORT.OUTTGL = (1<<SOUNDPIN); } oder so while(1) { LEDPORT.OUT = 0xFF; SOUNDPORT.OUTTGL = (1<<SOUNDPIN); //Bit-toggling _delay_ms(20); SOUNDPORT.OUTTGL = (1<<SOUNDPIN); _delay_ms(20); /* NEU */ } probieren...
Raphael B. schrieb: > Vielen herzlichen Dank übrigens an Matthiasm jetzt funktioniert alles > perfekt so wies sein soll. Warum dieser Port gesetzt werden muss ist > aber ein Rätsel für mich.. ;-) Freut mich ! Der Onboard Verstärker hat einen Shutdown Pin, der Strom spart, wenn der Pin auf Low ist. Den Schaltplan hast du ja inzwischen , und bei Interesse - das Datenblatt des Amps ist ja kein Geheimnis. Ist bei Batteriebetrieb auch recht praktisch. Allerdings muss man den Amp gut 100 mSec einschalten, bevor man Sound haben will.
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.