XPlained A1 Soundausgabe

OP #2509923
Lesenswert?

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
Gast #2510061
Lesenswert?

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
OP #2510239
Lesenswert?

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.
OP #2510924
Lesenswert?

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
(Firma: matzetronics) #2510952
Lesenswert?

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...
Gast #2511281
Lesenswert?

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
#2511305
Lesenswert?

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
#2511329
Lesenswert?

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...
(Firma: matzetronics) #2511492
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren