mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik anfänger frage:Timer_A mit MSP430


Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo. weisst jemand von euch wie ich timer einstelle für paar sekunden 
sleepmode?
welche register sollen definiert werden, ich habe bei TI-code angeschaut 
aber leider habe nichts verstanden. kommt mir alles neu vor.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sleepmode? Du willst den MSP schlafen legen und ihn mit dem Timer 
nach ein paar Sekunden aufwachen lassen?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas geht am besten mit dem WDT, der Timer A ist viel zu mächtig für 
solche kinkerlitzchen. Schau dir mal die C-Demos von TI an, da ist sowas 
gut beschrieben.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ja Jörg so ein art ja.aber mit Timer und kein wait schleife oder 
so.
ich schau mal in C von TI. aber falls jemand Idee hat bitte schön

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Watchdog so in der Art:

WDTCTL = WDTPW + WDTHOLD + WDTCNTCL + WDTTMSEL + WDTSSEL + WDTNMI;
// Watchdog anhalten, Timer auf "0", Counter-Mode, ACLK, NMI
IE1 |= WDTIE;      // Watchdog Interrupt Enable
WDTCTL = 0x5A3C ;  // Watchdog Start

_EINT(); // Interrupt generell an


...CODE....
LPM3; // schlafen legen
...CODE...

// Watchdog ISR
#pragma vector=WDT_VECTOR
__interrupt void WATCHDOG_ISR (void)
{
 LPM3_EXIT;
}



Voraussetzung ist natürlich das der ACLK einen Takt hat.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie lange dauert der LPM3? wo kann ich die zeit änedern? welcher 
register muss ich einstellen? danke

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder über den Frequnenzteiler vom ACLK (je nach MSP Typ) oder im 
Watchdog Register (WDTCTL) den Wert für WDTIS.

Bei ACLK = 32,768KHz und Standardeinstellung für WDTIS = 00, kommt der 
Interrupt jede Sekunde.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
halo, icih habe mir das angeschaut klingt bisschen einfacher, nur ich 
weiss nicht wie und wo kann ich die 5sekunden einsetzen oder 
erreichen???
hier ist ein 8Mhz quarz eingesetzt, wird dann druch 8 dividiert oder?
der CCR0 = 50000, heisst doch es wird bis 50000 gezählt?


//////
void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P4DIR |= 0x02;                            // P4.1 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_2 + ID_3;                  // SMCLK, up mode
  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{

  P4OUT ^= 0x02;                            // Toggle P5.1 using 
exclusive-//OR
  CCR0 += 50000;

}
////////

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
8MHz sind schon recht viel um damit 5 Sekunden Interrupts zu machen :)

Timer A mit Teiler 8 = Takt 1MHz -> 1uS pro Schritt, also würde man 
einen Timer benötigen der bis 5.000.000 Zählt (wenn ich mich nicht 
verrechnet habe).

Du müsstest deinen Takt also vorher im Basic Clock Modul noch mal runter 
teilen.

Allerdings ist ein Low Power Mode 0 relativ witzlos (bringt ja nicht 
viel). Kein 32,768KHz Quarz zur Hand? Der 8MHz Hängt an XT2?
Welchen MSP benutzt du eigentlich?

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein 32,768khz. ich habe 2*8Mhz angeschlossen.

ich kann aber wenn es nicht geht mit 8Mhz, der quarz mit 32 tauschen, 
muss nur halt umlöten. aber wenn es mit 8 mhz auch geht dann kann ich 
erstmal probieren.
was sagst du dazu

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze msp430f169.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zweimal einen 8MHz Quarz an einen MSP430 anzuschliessen macht absolut 
keinen Sinn.
Und einen LowPower Modus mit einem 8MHz Quarz zu benutzen macht 
eigentlich auch keinen sinn, da dann viel unnötige Leistung verbrutzelt 
wird.
Also wie bereits in anderen Beiträgen vorgescholagen, einen 8MHz Quart 
durch einen 32.768kHz Quarz tauschen.

Übrigens sind 8MHz ausserhalb der Spezifikationen, falls der MSP430 mit 
3.3V gespiesen wird. Ca 7MHz sind bei 3.3V das Maximum. Im Datenblatt 
gibts so eine Grafik, welche die maximale Clock Frequenz in Abhängigkeit 
der Speisespannung aufzeigt.
Aber Du bist nicht der erste, der diese Grafik übersehen hat. Mir sind 
sogar schon Eval. Boards untergekommen, die mit 3.3V arbeiten und der 
MSP mit 8MHz betrieben wird...

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok ich tausche erstmal den Quarz. dann schaue ich wie sich das verhalten 
mit dem code. bis dann leute

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übrigens das muss ich dann in XIN1/XOUT1 anschliessen ?

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau. Den langsamen Quarz am besten an XIN/XOUT anschliessen und den 
schnellen Quarz an XT2IN/XT2OUT.
Den Timer für den Aufweck-IRQ kannst du dann vom ACLK Takt speisen, 
welcher vom langsamen Quarz stammt. Die CPU (MCLK) kannst Du wahlweise 
vom langsamen oder schnellen Quarz takten lassen. Am besten jedoch vom 
schnellen, so viel ich weiss. Damit kann die CPU ihre Aufgabe schnell 
erfüllen und sich dann gleich wieder schlafen legen (LPM).

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Übrigens sind 8MHz ausserhalb der Spezifikationen, falls der MSP430
> mit 3.3V gespiesen wird. Ca 7MHz sind bei 3.3V das Maximum.

Wie heißt es so schön: It depends.

Es gibt neuere MSP430-Varianten, die bei 3.3V Versorgungsspannung für 16 
MHz Takt spezifiziert sind, das sind die MSP430F2001..3 und 2011..3. Die 
können diese Taktfrequenz auch mit dem internen DCO erzeugen, was 
natürlich nur eingeschränkt genau ist (~2.5%).

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er hat aber den MSP430F169 und bei diesem ist es definitiv ausserhalb 
der Specs.
Aber Du hast recht, es gibt jetzt neue Typen die das vertragen.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe den 32khz angeschlossen, und diesen program zum test 
geschrieben, aber es kommt nix.
void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P4DIR |= 0x02;                            // P4.2 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled

  TACTL = TASSEL_1 + MC_2;                  // SMCLK, up mode
  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{

  P4OUT ^= 0x02;                            // Toggle P4.2 using 
exclusive-OR


}

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evt. das vergessen:

_EINT();  //Interrupt generell an


Was für ein Compiler hast du?

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kinder, Kinder,
guggst Du im Anhang. Richtigen Header includieren (#include 
<msp430x16x.h> glaub ich)
und dann testen.
Alles auf der TI-Homepage zu finden.

Autor: szimmi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nanu,
Anhang ging nicht. Zweiter Versuch.

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IAR compiler habe ich. Header ist richtig auch.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird der Interrupt angesprungen? Zählt der Timer?

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke euch. lösung gefunden endlich mal :))

musste einfach nur interrupt auslösen.  => _BIS_SR(GIE);
und ein variable als zähler definieren, der mir 5 mal zählt wenn 50000 
erreicht ist. mehr war nicht

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.