Forum: Mikrocontroller und Digitale Elektronik MSP430 : Lautsprecher steuern?


von Daniel S. (daniel72)


Lesenswert?

Ich habe ein MSP430 Education System auf dem ein Lautsprecher vorhanden 
ist.

Kennt jemand ein ASM Beispiel für die Tonausgabe? Im Buch 
Mikrocontroller-Technik von Matthias Sturm sind nur paar Sätze über 
Lautsprecher geschrieben (natürlich ohne Beispielcode und nennenswerte 
Informationen über die Steuerung)!

Für Eure Hilfe bedanke ich mich bereits im Voraus.

Daniel

von Christian R. (supachris)


Lesenswert?

Was für ein "Education System" ist das? Ist das ein richtiger 
Lautsprecher oder so ein Piezo-Quäker?

von Daniel S. (daniel72)


Lesenswert?

Hallo Christian,

Es ist ein Lautsprecher. Das Board ist genau so einer, wie auf diesem 
Bild:

http://www.ttz.uni-magdeburg.de/messeportal/php/gfx/pictures/exponate/msp.gif

------------------------------------------
Im Buch steht so viel über Lautsprecher:
Der Lautsprecher wird durch das Portpin P2.4 getrieben und über eine 
einfache Gegentakt-B-Endstufe angesprochen. Der Lautsprecher dient zum 
Ausgeben von Pulsfolgen unterschiedlicher Frequenz.
------------------------------------------

Ich denke, dass man mit dem Lautsprecher eben nur ein Ton generieren 
kann. Es wäre mir sehr hilfreich wenn ich wüsste wie überhaupt anfangen.

Danke.
Daniel

von Rufus (Gast)


Lesenswert?

Hallo Daniel,
der Anfang ist ganz einfach:

 - Port P2.4 auf 1 setzen
 - 500 µs warten
 - Port P2.4 auf 0 setzen
 - 500 µs warten
 - zurück an den Anfang

und schon hörst Du einen 1 kHz-Ton.
Bin zwar kein MSP430-Experte, aber läufts ganz allgemein bei der 
Ton-Ausgabe.
Für den 8051er haben wir so die Töbe der Tonleiter erzeugt und können 
kleine Musikstücke spielen.

Viele Grüße
Rufus

von Daniel S. (daniel72)


Lesenswert?

Hallo Rufus,

Ich habe es mir auch im etwa so vorgestellt, jedoch suchte ich ein 
kleines Beispiel. Danke für die Angabe über die Wartezeit.

Sollte ich Schwierigkeiten haben, dann melde ich mich wieder hier.

Schöne Grüsse
Daniel

von Daniel S. (daniel72)


Lesenswert?

OK, ich habe folgendes Programm:

#include  <msp430x12x2.h>

;-----------------------------------------------------------------------
                 ORG    0E000h            ; Program Start
;-----------------------------------------------------------------------

RESET        mov.w    #300h,SP           ; Initialize stackpointer
StopWDT      mov.w    #WDTPW+WDTHOLD,&WDTCTL      ; Stop WDT
SetupP1      bis.b    #0FFh,&P1DIR       ; P1.0-P1.7 output


Mainloop     bic.b    #BIT4,&P2OUT       ; reset P2.4 (Lautsprecher AN)
             call     #Delay             ; call subroutine
             bis.b    #BIT4,&P2OUT       ; reset P2.4 (Lautsprecher AUS)
             call     #Delay             ; call subroutine


             jmp      Mainloop           ; repeat programm, endless loop

Delay        mov.w    #030000,R15        ; Delay to register R15
Delay_1      dec.w    R15                ; Decrement register R15
             jnz      Delay_1            ; Delay over? ZERO
             ret

;----------------------------------------------------------------------- 
;            Interrupt Vectors Used MSP430F12x
;-----------------------------------------------------------------------

             ORG      0FFFEh             ; MSP430 RESET Vector
             DW       RESET
             END


Ich glaube so sollte es im etwa funktionieren. Das Problem ist, dass ich 
aber nichts höre. Sehr wahrscheinlich liegt das an der Loop Pause. 
Welche Zahl soll ich wählen, damit ich z.B. auf einen hörbaren Ton 
komme?

Danke.

von Rufus (Gast)


Lesenswert?

Hallo Daniel,
am Besten ist der Anschluss eines Oszilloskops an P2.4: dann siehst Du 
sehr schnell, ob sich was tut und Du kannst das Delay so einstellen, daß 
Du einen hörbaren Ton erzeugst. Meistens vertut man sich mit der 
Wartezeit und der Ton ist so hoch, daß man als Mensch nichts hört.
Ohne Oszilloskop: einfach den Delay-Wert variieren von sehr klein bis 
sehr hoch.
Oder anhand der Befehlsliste ermitteln, wie lange ein Assembler-Befehl 
dauert und dann die Zeit der Delay-Schleife ausrechnen.

Viele Grüße

Rufus

von jens (Gast)


Lesenswert?

Port P2.4 als Ausgang! Wie kommst du darauf das mov.w #030000,R15 eine 
Zeit von 500µs ergibt? Ich denke der Wert sollte deutlich kleiner sein.

von Christian R. (supachris)


Lesenswert?

Sowas geht doch viel besser über den Timer. P2.4 ist TA2 Anschluss, da 
kannst du mit dem Timer A und der Output Unit ganz leicht beliebige 
Frequenzen erzeugen, einmal einstellen und dann läuft das von alleine. 
Schau mal in die Code-Beispiele und den User Guide.

von Daniel S. (daniel72)


Lesenswert?

@Rufus
Oszilloskop habe ich leider nicht. Nur einen PC, EDU Board und IAR 
Entwicklungsumgebung.

@jens
Ich habe weiter oben die einzige drei Zeilen zum Lautsprecher aus dem 
MSP430 Buch von Matthias Sturm angegeben. Darin steht:
Der Lautsprecher wird durch das Portpin P2.4 getrieben ...

Die Werte habe ich nurn bis zu:
mov.w     #000500,R15
variert, leider hört man immer noch nichts.

Da ich IAR verwende, kann ich auch das ganze Schritt für Schritt 
debuggen. Bei der Zeilen:
bic.b    #BIT4,&P2OUT
bis.b    #BIT4,&P2OUT
sollte ich doch zumindest einen Knick hören, jedoch bleibt alles stumm!

Kann sein, dass ich etwas vergessen habe oder falsch mache bzw. wäre 
#BIT4,&P2OUT richtig angesichts der Buchbeschreibung (Portpin P2.4)?

@Christian
Wie geht das mit P2.4 (TA2) und Timer A konkret? Kannste mir bitte 
eventuell ein kleines Beispiel angeben (par Zeilen zum setzen bzw. 
reseten)? Danke.

Danke

von Stefan (Gast)


Lesenswert?

>Kann sein, dass ich etwas vergessen habe
Wurde schon erwähnt!
Du musst Pin2.4 als Ausgang definieren:
1
bis.b    #0x10,&P2DIR

von Daniel S. (daniel72)


Lesenswert?

DANKE

Eine Frage noch. Was soll ich nun verwenden:
bis.b    #0FFh,&P2DIR

oder

bis.b    #0x10,&P2DIR

?

von Stefan (Gast)


Lesenswert?

>Eine Frage noch. Was soll ich nun verwenden:
Das hängt von Dir und Deiner Applikation ab!
1
bis.b    #0FFh,&P2DIR
P2.0 - P2.7 sind Ausgänge

1
bis.b    #0x10,&P2DIR
Nur P2.4 ist Ausgang
(reicht ja wohl im Moment, um die Quäke zum tönen zu bringen ;-))

von Daniel S. (daniel72)


Lesenswert?

Alles klar.

Es geht auch mit verschiedenen Tönen jetzt :)

Danke

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
Noch kein Account? Hier anmelden.