mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430- TimerA0 soll TimerB0 wiederholt starten


Autor: Wolfgang-G (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der TimerA0 soll in Abständen von 1s den TimerB0 starten. TimerB0 soll 
später mal mit 8 kHz laufen und sich nach 8 Durchläufen abschalten.
Nach dem im Anhang entworfenen Programm wird der TimerB0 nach dem 
Rücksetzen des µC immer nur einmal aktiviert (LED rot blinkt) aber dann 
nie wieder, obwohl mit TBCTL = MC_1 der TimerB0 neu gestartet wird. 
(denk ich mir)
Was könnte ich falsch machen? Muss evtl. noch etwas zurückgesetzt 
werden?
MfG
Wolfgang

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>void STOP_B0 (void)
>{
>TBCTL = MC_0;      // Timer Stop
>}

mit TBCTL = MC_0 setzt Du auch die Clocksource auf TBCLK zurück!
Besser: TBCTL &= ~MC_0;

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hiho,
du machst bei Stop folgendes:
void STOP_B0 (void)
{
TBCTL = MC_0;      // Timer Stop
}

Du setzt TBCTL knallhart auf MC_0 und löscht damit alle anderen Bits in 
dem Register (die Du mit TBCTL = TBSSEL_1 + TBCLR gesetzt hast).
Das TBCLR ist denke ich nicht notwendig beim Restart. Aber das TBSSEL_1 
sollte stehenbleiben, damit der Timer den ACLK als Eingangsclock nimmt.
Probiere mal:
void STOP_B0 (void)
{
TBCTL &= ~MC_0;      // Timer Stop
}

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oerks.
Wieder mal zu langsam. Zwei "Schlaue", ein Gedanke :-)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, zwei "Schlaue" und der gleiche falsche Gedanke ;-)

TBCTL &= ~MC_3; ist wohl angesagt

~MC_0 würde das TBCTL-Register gar nicht ändern!

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo. Wo Du Recht hast, hast Du recht. Aber auch
TBCTL &= ~MC_1;
sollte reichen. (Muss je wenigstens noch ein bissl rumnoergeln um nicht 
voll als Depp dazustehen :-)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist mir auch echt peinlich :-)
Aber die einfachsten Dinge scheinen manchmal die schwierigsten zu 
sein...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolfgang:
Vor lauter Bit-Schubserei hab ich ganz vergessen noch was anzumerken!
Ich weiss jetzt nicht, ob Dein Code-Bsp vollständig ist, aber Du benutzt 
Deine globale Variable 'g' uninitialisiert!
Du hast wahrscheinlich Glück, dass Dein Compiler/Linker für Dich ein 
Stückchen Init-Code im MSP platziert, der alle Variablen zu Beginn Null 
setzt. Aber darauf würde ich mich nicht unbedingt verlassen.
Also: Variablen besser immer initialisieren, bevor sie benutzt werden!

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dank an alle,
mit TBCTL &= ~MC_1  voller Erfolg

>Deine globale Variable 'g' uninitialisiert!
>Du hast wahrscheinlich Glück, dass Dein Compiler/Linker für Dich ein
>Stückchen Init-Code im MSP platziert, der alle Variablen zu Beginn Null
bisher hatte ich damit keine Probleme, aber bei der Deklaration der 
globalen Variablen diese auf 0 zu setzen, ist wohl ein besserer Stil

noch eine Frage:
während

#define MC1                 (0x0020)  /* Timer A mode control 1 */
#define MC0                 (0x0010)  /* Timer A mode control 0 */

im Register TBCTL    MC1 das Bit 5 bzw. MC0 das Bit 4 zuordnet,
kann ich die folgenden Definitionen nicht deuten
insbesondere, was bedeutet das kleine u?

#define MC_0     (0*0x10u)  /* Timer A mode control: 0 - Stop */
#define MC_1     (1*0x10u)  /* Timer A mode control: 1 - Up to CCR0 */
#define MC_2     (2*0x10u)  /* Timer A mode control: 2 - Continous up */
#define MC_3     (3*0x10u)  /* Timer A mode control: 3 - Up/Down */
MfG
Wolfgang

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MC_0 bis MC_3 sind einfach die möglichen Kombinationen
aus den Bits MC0 und MC1.
z.B.: MC_3 = MC0 + MC1 = 0x10 + 0x20 = 0x30
Das 'u' steht vermutlich für 'unsigned' also vorzeichenlos

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.