Forum: Mikrocontroller und Digitale Elektronik MSP430 - Delay 10us mit Timer B


von Tony _. (tony_s)


Lesenswert?

Hey,

Ich möchte mit dem MSP430f149 und dem Timer B eine Verzögerung von 10us
(+/- 5%) realisieren. Der MSP430 läuft mit 8MHz. Der Timer B ist ein
Free Running Timer. In der Interrupt Routine setze ich das Flag, damit
ich aus der Schleife komme.

Das Problem: Aus mir noch unbekannten Gründen ist die Verzögerung nur
7.5us, gemsssen mit KO.

Was mach ich falsch? Den Timer höher zählen lassen, kann wohl nicht die
Antwort sein, oder?


void Wait10us()
{
    chTime10us_up = FALSE;
    TBCTL &=~ MC_2;  // Stopp Timer
    TBCCR1 = TBR + 80; // Neuer Capture Value (8MHz)
    TBCTL |= MC_2; // Restart Timer
    TBCCTL1 = CCIE; // CCR2 interrupt enabled

    do
    {
        _NOP();
    }while (chTime10us_up == TRUE);
}

von szimmi (Gast)


Lesenswert?

Hiho,
bitte mal die Initialisierung und die ISR mitsenden.

von Tony _. (tony_s)


Angehängte Dateien:

Lesenswert?

hier...

von szimmi (Gast)


Lesenswert?

In
do
    {
        _NOP();
    }while (chTime10us_up == TRUE);

liegt der Hund begraben. Du initialisierst chTime10us_up mit FALSE,
diese Schleife wird also sofort verlassen. Wenn Du es so machen
willst,musst Du schon auf (chTime10us_up == FALSE) abfragen.
Ich nehme an, dass die 7,5µs, welche Du misst, die reine Laufzeit ist.
Allerdings sind die 10µs allgemein zu hinterfragen.
Wenn es schon 10µs sein müssen,macht man es denke ich geschickterweise
über eine Schleife mit NOPs, welche Du ausmisst.
Bei Deiner Timerlösung solltest Du ausserdem bedenken, dass beim
Anhalten des Timers alle anderen Kanäle beeinflusst, eventuelle
Capturing-Messungen (wie in Deinem Beispiel Kanal CCR0), kannst Du dann
wegschmeissen.

von Tony _. (tony_s)


Lesenswert?

Kopfschüttel - Logisch!

Diese Sequenz scheint es in Sich zu haben. Wenn ich mit dem KO
hinschaue, dann kann ich sehen, dass es ca. 15us dauert, bis diese
Addition abgeschlossen ist.
TBCCR1 = TBR + 80;

Vielleicht gibt es noch einen besseren Weg.

von szimmi (Gast)


Lesenswert?

Jetzt bin ich aber voellig verwirrt. Die Addition dauert 15us, die ganze
Routine 7,5us ? Riecht stark nach Nobelpreis...

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.