Forum: Mikrocontroller und Digitale Elektronik 7Segmentanzeige mit MSP430F13x


von ruppi985 (Gast)


Lesenswert?

Hi Leute,

ich muß 3 4x7Segmentanzeigen übe einen MSP430F13x direkt über Port 5
ansteuern. Mein Problem. Ich habe momentan keinen Plan, wie ich auf den
3 Anzeigen unterschiedliche Werte anzeigen lassen kann. Hat das schon
mal jemand von Euch in C programmiert? Wäre schön, wenn jemand ein
Source als Beispiel hätte oder mir eine Idee liefern könnte, wie ich
das ganze angehen muß.

Ruppi985

von Rahul (Gast)


Lesenswert?

das nennt sich Multiplexen

von ruppi985 (Gast)


Lesenswert?

Hallo Rahul,

da ist mir klar, nur wie mach ich das...

von Rahul (Gast)


Lesenswert?

Suchst du mal hier im Forum.

Einfachstes Ding:
die Segmente der einzelnen Anzeigen zusammenschalten (alle a-Segmente,
alle b-Segmente...).
Der gemeinsame Pol (Anode oder Katode je nach Anzeigentyp) jeder
Anzeige wird auf einen weiteren Port-Pin gelegt.
Die Anzeigen werden dann der Reihe nach durch geschaltet, und
entsprechend der Stelle werden die Segmente beschaltet...

für 3 7Segmentanzeigen brauchst du dann ca. 10 Ausgänge.
Man könnte es auch mit einem BCD zu 7Segment-Decoder machen. Dann
bräuchte man nur einen 8-Bit-Port...

von Peter Dannegger (Gast)


Angehängte Dateien:

Lesenswert?

Du legst Dir im RAM einen Puffer an, wo Du für jedes Digit den
7-Segment-Code reinschreibst.

Dann im Timerinterrupt wird ein Digittreiber aktiviert und das Digit
ausgegeben.

Anbei mal ein Beispiel für 5 Digits aufm 8051.


Peter

von SuperGrobi (Gast)


Lesenswert?

hallo ruppi,

dieser code ist vom M16C, den hatte ich vorher auf nem MSP430 (F449)
geschrieben und dann so ziemlich 1 zu 1 auf dem M16C übernommen. Ich
hab damit 5 Anzeigen angesteuert. Ich finde leider den ursprünglichen
Code vom MSP430 nicht, aber du brauchst nur die Ausgänge/Ports
entsprechend deinen wünschen anpassen, dann sollte das funktionieren...


hoffe das ist hier nicht zu unübersichtlich.

/*********************************************************************** 
******
Name:    led_display
Parameters:  count, wert
Returns:  None
Description: Ansteuern der 7 Segment Anzeige
************************************************************************ 
*****/
void led_display(char count,long wert)
{
unsigned long Strobe[5], Digit = 0;

    Strobe[1] = wert / 10000;
    Strobe[2] = (wert - (Strobe[1] * 10000))/1000;
    Strobe[3] = (wert - (Strobe[1] * 10000)-(Strobe[2] * 1000))/100;
    Strobe[4] = (wert - (Strobe[1] * 10000)-(Strobe[2] *
1000)-(Strobe[3]*100))/10;
    Strobe[5] = (wert - (Strobe[1] * 10000)-(Strobe[2] *
1000)-(Strobe[3]*100)-(Strobe[4]*10));

  switch (count)            // Ansteuern der Stelle (Strobe)
  {
    case 1:              /* green on */
      p2 = 0x08;
      Digit = Strobe[1];
      p1_0 = Punkt2;
      break;
    case 2:              /* yellow on */
      p2 = 0x10;
      Digit = Strobe[count];
      p1_0 = Punkt3;
      break;
    case 3:              /* red on */
      p2 = 0x20;
      Digit = Strobe[count];
      p1_0 = Punkt4;
      break;
    case 4:
      p2 = 0x40;
      Digit = Strobe[count];
      p1_0 = Punkt5;
      break;
    case 5:
      p2 = 0x80;
      Digit = Strobe[count];
      p1_0 = Punkt1;
      break;
    default:
      p2 = 0x00;            /* all LED's off */

  }
  switch (Digit)              // Darstellen der 7 Segmentanzeigen
  {                    // in Abhängigkeit der gerade
    case 0:                // angesteuerten Stelle.
      Seg_0;
      break;
    case 1:
      Seg_1;
      break;
    case 2:
      Seg_2;
      break;
    case 3:
      Seg_3;
      break;
    case 4:
      Seg_4;
      break;
    case 5:
      Seg_5;
      break;
    case 6:
      Seg_6;
      break;
    case 7:
      Seg_7;
      break;
    case 8:
      Seg_8;
      break;
    case 9:
      Seg_9;
      break;
    default:
      Seg_0;
    }

}



und hier noch die Macros bzw. defs:

/* 7 Segment Ziffern */
#define Seg_1      {p1_1=0; p1_2=0; p1_3=0; p1_4=0; p1_5=1; p1_6=1;
p1_7=0; }
#define Seg_2      {p1_1=1; p1_2=0; p1_3=1; p1_4=1; p1_5=0; p1_6=1;
p1_7=1; }
#define Seg_3      {p1_1=1; p1_2=0; p1_3=0; p1_4=1; p1_5=1; p1_6=1;
p1_7=1; }
#define Seg_4      {p1_1=1; p1_2=1; p1_3=0; p1_4=0; p1_5=1; p1_6=1;
p1_7=0; }
#define Seg_5      {p1_1=1; p1_2=1; p1_3=0; p1_4=1; p1_5=1; p1_6=0;
p1_7=1; }
#define Seg_6      {p1_1=1; p1_2=1; p1_3=1; p1_4=1; p1_5=1; p1_6=0;
p1_7=1; }
#define Seg_7      {p1_1=0; p1_2=0; p1_3=0; p1_4=0; p1_5=1; p1_6=1;
p1_7=1; }
#define Seg_8      {p1_1=1; p1_2=1; p1_3=1; p1_4=1; p1_5=1; p1_6=1;
p1_7=1; }
#define Seg_9      {p1_1=1; p1_2=1; p1_3=0; p1_4=1; p1_5=1; p1_6=1;
p1_7=1; }
#define Seg_0      {p1_1=0; p1_2=1; p1_3=1; p1_4=1; p1_5=1; p1_6=1;
p1_7=1; }



gruß
Thomas

von ruppi985 (Gast)


Lesenswert?

Hallo,

danke euch allen, hilft mir erst mal weiter, sollte ich noch Probleme
haben, melde ich mich wieder. Nochmals vielen Dank


Ruuppi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.