mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 : Lautsprecher steuern?


Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

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

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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/gf...

------------------------------------------
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

Autor: Rufus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

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

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE

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

oder

bis.b    #0x10,&P2DIR

?

Autor: Stefan (Gast)
Datum:

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

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

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar.

Es geht auch mit verschiedenen Tönen jetzt :)

Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.