mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Launchpad TimerA zeigt komisches Verhalten


Autor: mistes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
folgenden Code habe ich auf meine Launchpad. Halte ich meinen Finger 
auf/ über den Controller blinkt P1.6 fröhlich im Sekundentakt. Entferne 
ich meine Hand, toggelt  die LED rasend schnell. Ich dachte zuerst an 
ein floaten irgendwelcher Eingänge, doch meine LED wird unabhängig der 
Eingänge vom timerA getoggelt.
Versteht das jemand?
#include  <msp430g2231.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1SEL |= 0x40;              // P1.6 Pin-Option: TA0.1
  P1OUT &= ~0x01;              // LED on P1.0 off
  P1DIR |= 0x41;                // P1.0, P1.6 output

  P1OUT |= 0x8;                //PULL UP
  P1REN |= 0x8;                //P1.3 PullUp enabled

  
 // TACCTL1 =  CCIE;                       // CCR1 interrupt enabled    
 // TACCTL0 =  CCIE;              // CCR0 interrupt enabled 
  CCTL1 = OUTMOD_3;              // Set at TACCR1, reset at TACCR0
  TACCR1 = 50;
  TACCR0 = 100;                       
  TACTL = TASSEL_1 + MC_1 + TAIE;           // ACLK, upmode, interrupt

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interrupt
}


Autor: mistes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt sich denn da keiner aus? Ich bin wirklich am Ende...

Autor: mistes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das AVR-Symbol steht wahrscheinlich nicht umsonst neben der 
Interneteadresse!?
Weis denn jemand ein Forum in dem man um die Uhrzeit Leute erwischt, die 
sich mit MSP430 Controllern auskennen?

Gruß

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

Bewertung
0 lesenswert
nicht lesenswert
Natürlich sind hier auch Leute unterwegs, die sich mit MSP430 auskennen. 
Nur kannst Du nicht damit rechnen, daß die den ganzen Tag das Forum 
durchstöbern, um Deine Frage innerhalb eines Zeitfensters von gerade mal 
zwei Stunden zu beantworten.

Das geschilderte Phänomen klingt so, als würde die Takterzeugung des 
'F2231 durch Dein Handauflegen beeinflusst. Dadurch wird natürlich auch 
die Taktquelle für Timer_A verändert, und die Blinkfrequenz Deiner LED 
folglich auch.

Die Taktquelle ist, wenn nichts anderes initialisiert wird, der interne 
RC-Oszillator (DCO).

Ich habe jetzt gerade keine Lust dazu, mir den zugehörigen Family User's 
Guide herunterzuladen und anzusehen, was exakt die verschiedenen 
Initialisierungen bedeuten, die Du da vornimmst; Du solltest Dir 
heraussuchen, wie exakt der Systemtakt (MCLK) erzeugt wird, wie hoch er 
ist, und wie der Takt, den Du als Quelle für Timer_A verwendest, erzeugt 
wird, das müsste ACLK sein.

Desweiteren könntest Du heraussuchen, was genau Deine Initialisierung 
des Timer_A und dessen Capture&Compare-Einheit bedeutet, bzw. auf 
welchem Wege Du zu den Werten gekommen bist.

Such das raus, dokumentiere es, und wenn Dir dabei keine Unstimmigkeiten 
aufgefallen sind, dann kann man über weitere Details nachdenken.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den 32 KHz Quartz installiert?

Autor: Pulldown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mistes schrieb:
> Hi Leute,
> folgenden Code habe ich auf meine Launchpad. Halte ich meinen Finger
> auf/ über den Controller blinkt P1.6 fröhlich im Sekundentakt. Entferne
> ich meine Hand, toggelt  die LED rasend schnell. Ich dachte zuerst an
> ein floaten irgendwelcher Eingänge, doch meine LED wird unabhängig der
> Eingänge vom timerA getoggelt.
> Versteht das jemand?

mistes schrieb:
> P1OUT |= 0x8;                //PULL UP
>   P1REN |= 0x8;                //P1.3 PullUp enabled

So ist es mir jetzt auch gegangen. :-(((

Durch Änderung der Befehlsfolge auf
P1REN |= 0x8;                //P1.3 PullUp enabled
P1OUT |= 0x8;                //PULL UP
klappts auf einmal :-)))

Ich habe im Manual keinen Hinweis auf die Reihenfolge gefunden. 
Vielleicht hilft Euch der Hinweis.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pulldown schrieb:
> Durch Änderung der Befehlsfolge auf
> P1REN |= 0x8;                //P1.3 PullUp enabled
> P1OUT |= 0x8;                //PULL UP
> klappts auf einmal :-)))

Die beiden Zeilen werden in dem ursprünglich geposteten Programm gar 
nicht benötigt.
Der Interrupt sollte auch nicht erlaubt werden wenn keine 
Interruptroutine vorhanden ist.
Da ACLK vom LFXT1 kommt, wenn nicht auf den VLO umgestellt wird, muss 
der Uhrenquarz angeschlossen sein.
Bei 32KHz und den TACCRx Werten aus dem ursprünglich geposteten Programm 
blinkt die LED dann natürlich mit über 300 Hz.

Bei angeschlossenm Uhrenquarz funktioniert diese vereinfachte Version, 
die LED blinkt mit etwa 3 Hz:
#include  <msp430g2231.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;     // Stop WDT
  P1SEL |= 0x40;                // P1.6 Pin-Option: TA0.1
  P1DIR |= 0x40;                // P1.6 Output

  CCTL1 = OUTMOD_3;             // Set at TACCR1, reset at TACCR0
  TACCR1 = 5000;
  TACCR0 = 10000;                       
  TACTL = TASSEL_1 + MC_1;      // ACLK, upmode

  _BIS_SR(LPM3_bits);           // Enter LPM3
}

Autor: Pulldown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein lieber Stefan, es ging mir um die internen Pullup Widerstände. Bei 
der ersten Aufrufsequenz schienen sie unwirksam.

Meine Anwendung läuft bereits. Das Ganze war als Hinweis für andere 
Verzweifelte gedacht. Vielleicht weist du mehr und kennst die richtige 
Seite im Family Guide.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei meinen Launchpads (Rev.1.3 und Rev.1.4) ist es nicht notwendig an 
P1.3 (S2) den internen Pullup einzuschalten weil ein externer Pullup 
verbaut ist. Bei der neusten Revisionen des Boards soll TI diesen 
Widerstand und auch den Kondansator am gleichen Anschluss weggelassen 
haben.

Bei Tests an P1.4 konnte ich keinen Unterschied feststellen zwischen
P1REN |= 0x10;                //P1.4 PullUp enabled
P1OUT |= 0x10;                //PULL UP
und
P1OUT |= 0x10;                //PULL UP
P1REN |= 0x10;                //P1.4 PullUp enabled
Es funktioniert beides.

Autor: Pulldown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan schrieb:
> Bei meinen Launchpads (Rev.1.3 und Rev.1.4) ist es nicht notwendig an
> P1.3 (S2) den internen Pullup einzuschalten weil ein externer Pullup
> verbaut ist.

N i  c h t   e x t e r n! Intern!



Stefan schrieb:
> Bei Tests an P1.4 konnte ich keinen Unterschied feststellen zwischenP1REN |= 
0x10;                //P1.4 PullUp enabled
> P1OUT |= 0x10;                //PULL UPundP1OUT |= 0x10;                //PULL 
UP
> P1REN |= 0x10;                //P1.4 PullUp enabled
> Es funktioniert beides.

Das ist interessant. Ich werde es bei Gelegenheit auch noch mal 
probieren.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pulldown schrieb:
> N i  c h t   e x t e r n! Intern!

Das hatte ich schon richtig verstanden. Aber bei allen Launchpads bis 
mindestens Rev.1.4 ist ab Werk ein externer Pullup verbaut. Damit ist es 
natürlich etwas schwieriger zu erkennen ob der interne Pullup zusätzlich 
richtig eingeschaltet wird.
Ein Board ohne Pullup an P1.3 habe ich nicht, deshalb der Test an P1.4.

Autor: Pulldown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan schrieb:
> Ein Board ohne Pullup an P1.3 habe ich nicht, deshalb der Test an P1.4.

Das dürfte egal sein. Wie oben geschrieben, teste ich das bei 
Gelegenheit noch einmal. Ich messe dann den Strom durch den Portpin oder 
hat einer bessere Idee?

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.