mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7Segmentanzeige mit MSP430F13x


Autor: ruppi985 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das nennt sich Multiplexen

Autor: ruppi985 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rahul,

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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (Gast)
Datum:
Angehängte Dateien:
  • MUX.C52 (802 Bytes, 128 Downloads)

Bewertung
0 lesenswert
nicht 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

Autor: SuperGrobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ruppi985 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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


Ruuppi

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.