mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F2274 LPM3 Clock ohne externen Oszi


Autor: Daniel Laqua (daniel_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich bekomme den ACLK nicht zum Laufen. Wir wollen extrem Energie sparen 
und den LPM3 benutzen. Externer Osci ist nicht mehr möglich, da Platine 
fertig aufgebaut. Der wacht nicht mehr auf, weil der Clock nicht läuft.


Hier der Code:

BCSCTL3 = LFXT1S1 + LFXT1S_2;                      // LFXT1 = VLO
IFG1 &= ~OFIFG;                           // Clear OSCFault flag
TACCR0 = 10;
TAR = 0;
TACTL = TASSEL_1 + MC_1;
__bis_SR_register(LPM3_bits + GIE);

Ich wäre für jede Hilfe Dankbar.

Vielen Dank

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird ohne externe Quelle am ACLK nix, denn im LPM3 ist der interne 
DCO deaktiviert. Keine Chance. Mit dem DCO kannst du höchstens auf LPM2 
runter gehn.

Autor: S. Z. (szimmi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Doch doch, das wird schon was mit dem VLO. Ersetze mal
BCSCTL3 = LFXT1S1 + LFXT1S_2;
durch
BCSCTL3 |= LFXT1S_2;
wie im angehaengten Beispiel.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach stimmt, der F2274 hat ja noch den VLO...hatte ich ganz vergessen.

Autor: Daniel Laqua (daniel_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten. Ich habe das jetzt geändert, aber der 
Timer A will leider noch immer nicht zählen, dem zu folge wacht er nicht 
mehr auf.

Autor: Daniel Laqua (daniel_l)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich werd mal versuchen das Beispiel einzubauen. Die arbeiten dabei mit 
dem WDT-Interrupt und nicht mit dem Timer A. Hier der Code:

#include "msp430x22x4.h"

volatile unsigned int i;

void main(void)
{
  WDTCTL = WDT_ADLY_1000;                   // WDT 1s*4 interval timer
  BCSCTL1 |= DIVA_1;                        // ACLK/2
  BCSCTL3 |= LFXT1S_2;                      // ACLK = VLO
  IE1 |= WDTIE;                             // Enable WDT interrupt
  P1DIR = 0xFF;                             // All P1.x outputs
  P1OUT = 0;                                // All P1.x reset
  P2SEL = 0;                                // All P2.x GPIO function
  P2DIR = 0xFF;                             // All P2.x outputs
  P2OUT = 0;                                // All P2.x reset
  P3DIR = 0xFF;                             // All P3.x outputs
  P3OUT = 0;                                // All P3.x reset
  P4DIR = 0xFF;                             // All P4.x outputs
  P4OUT = 0;                                // All P4.x reset

  while(1)
  {
    __bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, enable 
interrupts
    P1OUT |= 0x01;                          // Set P1.0 LED on
    for (i = 5000; i > 0; i--);             // Delay
    P1OUT &= ~0x01;                         // Clear P1.0 LED off
  }
}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
  __bic_SR_register_on_exit(LPM3_bits);     // Clear LPM3 bits from 
0(SR)
}

Das Beispiel funktioniert zumindest :))

Autor: Daniel Laqua (daniel_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wie meistens lag das Problem, warum es nicht ging an einer anderen 
Stelle versteckt. Nur so viel, man darf den Osci natürlich nicht 
deaktivieren, wenn man ihn dann noch verwenden möchte. Hier der Code, so 
wie es funktioniert:

void Delay(unsigned long DelayTime)
{
  BCSCTL3 |= LFXT1S_2;                      // ACLK = VLO

  TACCTL0 = CCIE;
  TACCR0 = DelayTime;
  TACTL = TASSEL_1 + MC_1;

  __bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, enable 
interrupts
}

und hier die Interruptroutine:

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
    __bic_SR_register_on_exit(LPM3_bits);     // Clear LPM3 bits from 
0(SR)
    TACTL = 0; // stop timer
}

Vielen Dank für die Hilfe!

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.