MSP430G2231 Launchpad 7-Seg flackert

#2421417
Lesenswert?

Hallo zusammen,

ich möchte das Programmieren erlernen und setze mich deshalb mit dem 
Launchpad und dem MSP430G2231 auseinadner. Als Übung will ich eine 
7-Segment Anzeige programieren und wollte deshalb die demensprechende 
Hardware dazu erstellen, die ich einfach auf das Launchpad aufklemmen 
kann.

Fakten:
Die Ansteuerung, der 7-Segment Anzeige, erfolgt durch eine Treibestufe 
mit MOSFET's welche am Gate jeweils von einem Pin angesteurt werden.
Ich benutze eine 7-Segment Anzeige welche eine gemeinsame Anode hat, 
welche ich durch VCC des µC versorge.

So weit so gut nun Folgendes Problem:
Ich habe das alles aufgebaut und ein ganz einfaches Programm zum Testen 
geschrieben.
1
#include <msp430g2231.h>
2

3
void main(void)
4
{
5
   WDTCTL = WDTPW + WDTHOLD;    // Watchdog Timer anhalten
6

7
  P1DIR = 0xFF;        //Alle Pins als Output
8
  P1OUT = 0;        //schalte alle LEDs aus
9

10
  BCSCTL3 |= LFXT1S_2;      // VLOCLK 
11
  IFG1 &= ~OFIFG;        // loeschen des Oszillator Fehler Flag
12
  BCSCTL2 |= SELM_3 + DIVM_3;    // MCLK ist VLO geteilt durch 8 = ca. 1500 Hz
13
  
14
  while (1)
15
  {
16
    P1OUT = BIT0;
17
    P1OUT = BIT1;
18
    P1OUT = BIT2;
19
    P1OUT = BIT3;
20
    P1OUT = BIT4;
21
    P1OUT = BIT5;
22
  P1OUT = BIT6;
23
    P1OUT = BIT7;
24
    }
25
}

Als ich nun alle 8 Segmente (mit Punkte-Segment) zusammen angesteurt 
habe, haben alle Segmente "geflackert". Und folgendes Oszilogramm 
ergeben sich als ich an einem Pin gemessen habe.
Sieht fast aus wie ein PWM???

Meine versuchten Fehlerbehebungen:
Ich habe das ganze zuerste ohne Treiber, mit einer direkten Ansteuerung 
(mit Vorwiderstand), versucht. Da habe ich vermutet, dass der µC nicht 
genug Strom liefern kann und deshalb zusammenbricht. Als Folge dessen 
haben ich es ein zweites mal mit Treiber aufgebaut doch das Problem war 
immer noch das gleiche.
Ich habe daraufhin vermutet, dass das Stromversorgungs IC des Launchpads 
diesen Strom nicht mit macht und habe die Treiber durch eine externe 
Stromversorgung versorgt...doch leider hat dies zu keiner Verbesserung 
geführt.

Nun weiß ich leider nicht mehr weiter, habe aber die Vermutung, dass ich 
irgendwas beim Programmieren vergesse habe.

Ich hoffe es kann mir jemand helfen.
Danke schonmal für die Antworten :-)
Angehängte Dateien:
#2421425
Lesenswert?

Jonas Enderlin schrieb:

> Als ich nun alle 8 Segmente (mit Punkte-Segment) zusammen angesteurt
> habe, haben alle Segmente "geflackert".

Was meinst du mit 'geflackert'. Hast du das optisch gesehen?

> Und folgendes Oszilogramm
> ergeben sich als ich an einem Pin gemessen habe.

Ja, das würde ich in etwa als Oszillogramm an einem Pin bei diesem 
Programm
1
  while (1)
2
  {
3
    P1OUT = BIT0;
4
    P1OUT = BIT1;
5
    P1OUT = BIT2;
6
    P1OUT = BIT3;
7
    P1OUT = BIT4;
8
    P1OUT = BIT5;
9
  P1OUT = BIT6;
10
    P1OUT = BIT7;
11
    }

erwarten. Mit jeder neuen Zuweisung wird ein anderes Bit auf 1 gesetzt, 
so dass im schnellen Wechsel alle 8 Bits reihum einmal drann kommen. 
Betrachtet man 1 Bit, so ist es nur 1/8 der Zeit auf 1 und sonst 0. 
Deckt sich ganz gut mit deinem Oszillogram.


Ich sehe jetzt nichts Ungewöhliches. Das was du beobachtest, ist IMHO 
das was du programmiert hast.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren