Forum: Mikrocontroller und Digitale Elektronik MSP 430 Launchpad TX, printfEasy


von Bernd N (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

im Anhang findet sich ein kleines C Programm welches "Hello World" mit 
einer Baudrate von 9600 an den Launchpad USB/COM Port sendet. Ein 
ähnliches Beispiel findet sich im Netz und ich habe es lediglich ein 
wenig umgeschrieben.

Wird der Taster auf dem Board gedrückt so toggeln die LED's und hello 
world wird ausgegeben, soweit so gut.

Setze ich die Ausgabe von Hello World in die while Schleife dann sind 
die ersten 30 Zeichen nicht in Ordnung, nach Neustart des 
Terminalprogramms ist es ok. Setze ich die Ausgabe in "main" (vor dem 
endless loop) dann kommt nur Schrott heraus.

Kann es sein das der Oscillator im Startmoment nicht auf der richtigen 
Frequenz ist ? aber selbst wenn ich 1 Sekunde warte passiert es genauso. 
Verwendet man die Ausgabe innerhalb des Tasteninterrupts dann gehts.

Wäre schön wenn jemand eine Idee dazu hat.

von Stefan (Gast)


Lesenswert?

Hab mir jetzt deine Timer-UART nicht genauer angeschaut, aber 
anscheinend funktioniert sie ja zumindest teilweise...

>Setze ich die Ausgabe in "main" (vor dem
>endless loop) dann kommt nur Schrott heraus.
Kann ja auch nur ein einziges Mal ausgeführt werden, danach ist der µC 
ja in der Endlosschleife!

>Setze ich die Ausgabe von Hello World in die while Schleife dann sind
>die ersten 30 Zeichen nicht in Ordnung...
Ich habe "Bauchschmerzen, weil:
1.) Du den Taster per IRQ abfrägst, ohne zu Entprellen.
2.) Du in der ISR das GIE-Bit erneut setzt und damit verschachtelte IRQs
    zulässt, was mit hoher Wahrscheinlichkeit zu unvorhergesehenen
    Effekten führen wird!

von Bernd N (Gast)


Lesenswert?

Hallo Stefan,

Bauchschmerzen brauchst du keine haben :-) ich bin mir deiner 
Anmerkungen voll bewußt :-)

Der Code, insbersondere die Timerklamotte ist ein Beispiel von TI, 
logisch das vor "while" das Ganze nur einmal ausgeführt wird aber 
dennoch sollte es an der Stelle funktionieren.

>> Hab mir jetzt deine Timer-UART nicht genauer angeschaut, aber
>> anscheinend funktioniert sie ja zumindest teilweise...

Hatte gehofft das sich jemand genau diesen Teil anschaut :-) ja, im 
Prinzip funktioniert es.

von Stefan (Gast)


Lesenswert?

Bernd N schrieb:
> Bauchschmerzen brauchst du keine haben :-) ich bin mir deiner
> Anmerkungen voll bewußt :-)

Dann korrigiere halt erstmal den Teil des Codes, der offensichtlich 
Probleme macht / machen kann!
Oder verwendest Du einen Taster, der per Hardware bereits entprellt ist?
Und warum muss GIE innerhalb der ISR wieder gesetzt werden, was willst 
Du damit erreichen?

von Bernd N (Gast)


Lesenswert?

Ich glaub du verstehst mich falsch, ich will gar keinen Taster. Ich 
möchte lediglich Daten am TX Pin so ausgeben das es funktioniert.

Vielleicht ein bischen mehr zu mir, die TI MC's sind neu für mich aber 
Programme schreiben kann ich schon ne ganze Weile :-) der Code ist ein 
Beispiel von TI und ich frage mich warum dieser nicht richtig 
funktioniert. Besser gesagt, die Tasterklamotte ist ebenso von TI und da 
ich jetzt ein wenig mit dem Code gespielt habe ist mir oben genanntes 
Verhalten aufgefallen.

Wenns ne vernünftige UART wäre dann wärs ja einfach, das ist ein Timer 
gefummel um 9600 Baud hinzubekommen.

Interessant ist, es funktioniert bedingt aber eben nicht korrekt und 
daher die Frage, kann es sein das der Osci ne Einschwingzeit braucht und 
ja, wie prüfe ich ob die CLK auch genau tickt.

Versteh mich nicht falsch, ich hatte die Erwartungshaltung das Beispiele 
vom Hersteller funktionieren und da die MSP's für mich neu sind frag ich 
halt.

von Stefan (Gast)


Lesenswert?

Bernd N schrieb:
> Ich glaub du verstehst mich falsch, ich will gar keinen Taster. Ich
> möchte lediglich Daten am TX Pin so ausgeben das es funktioniert.
Nun gut. Ich hatte verstanden, du willst TX'en, wenn der Taster gedrückt 
wird. Dann solltest Du den aber auch entprellen!

> Vielleicht ein bischen mehr zu mir, die TI MC's sind neu für mich aber
> Programme schreiben kann ich schon ne ganze Weile :-) der Code ist ein
> Beispiel von TI und ich frage mich warum dieser nicht richtig
> funktioniert. Besser gesagt, die Tasterklamotte ist ebenso von TI und da
> ich jetzt ein wenig mit dem Code gespielt habe ist mir oben genanntes
> Verhalten aufgefallen.
Auch OK :-)
Aber ich kann mir ehrlich gesagt nicht vorstellen, dass TI in einem 
Bsp-Code z.B. GIE innerhalb einer ISR setzt...

> Interessant ist, es funktioniert bedingt aber eben nicht korrekt und
> daher die Frage, kann es sein das der Osci ne Einschwingzeit braucht und
> ja, wie prüfe ich ob die CLK auch genau tickt.
Du hast ja selbst gesagt, dass auch ein Delay von 1s nicht geholfen hat.
Normalerweise ist der DCO recht fix eingeschwungen.
Testen kannst Du das, indem Du Dir SMCLK an P1.4 ausgeben lässt (P1SEL 
u. P1DIR entsprechend setzen). GGf. Divider für SMCLK beachten!

von Stefan (Gast)


Lesenswert?

Nachtrag (aus'm Datenblatt):
The internal DCO provides a fast turn-on clock source and stabilizes in 
less than 1μs.

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.