www.mikrocontroller.net

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


Autor: Tony _s (tony_s)
Datum:

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

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hiho,
bitte mal die Initialisierung und die ISR mitsenden.

Autor: Tony _s (tony_s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier...

Autor: szimmi (Gast)
Datum:

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

Autor: Tony _s (tony_s)
Datum:

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

Autor: szimmi (Gast)
Datum:

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

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.