Segment Leds (Zahlen) steuern

ich habe heute ein schönes paket von Pollin bekommen und habe dieses 25 LCD Set für 3€ dazubestellt. Ich habe haufenweiße von diesen Zahlen bekommen:

(ich habe welche mit nur einer 8 , 2 x 8 und mit 3 x 8)

die mit 2 x 8 haben zb 18 pins (9 auf jeder Seite)

ich habe aber keine Ahnung wie ich die benutzen kann, denn meiner bombe fehlt noch der Timer, kleiner scherz am rande :wink:

ich will nur mal so zum testen eine zahl zb die 3 erscheinen lassen.

Sieben Pin für die Zahl (7 Segmente), einer für den Punkt und dann noch eine gemeinsame Anode bzw. Kathode.
Gibt es bei Pollin kein Datenblatt? Voraussichtlich brauchst Du auch noch Vorwiderstände.
Bei der Menge an Pins ist eigentlich nur der Anschluss über LED Treiberbausteien sinnvoll.

Hi

Oder mit einer kleinen Matrix :wink: So habe ich mein Tacho gebaut. Kannst also problemlos eine 4-stellige anzeige basteln, und hast dann noch 4 digitale Ausgänge über.

MFG, Robdeflop®

ja aber ich weiß nicht wo die zb Die GND pin ist :smiley:

der Aufdruck ist : BVN - 7572SR4

und das habe ich gefunden: http://www.pollin.de/shop/downloads/D120543D.PDF

aber geholfen hat es mir noch nicht :wink:

Steht doch alles drin was Du brauchst.

Unter "Pinbelegung" das 1. Bild:
Die sieben Segmente der 1. Ziffer verteilen sich auf die Pins 16, 15, 3, 2, 1, 18 und 17.
Anhand der Symbole sieht man, dass die Segmente eine gemeinsame Kathode (also Masse) haben, diese ist Pin 14.
Analog dazu hast Du die Pinbelegung der 2. Ziffer auf dem 2. Bild.
Die Punkte verwenden demnach die beiden noch übrigen Pins 4 und 9. Anhand der Lage würde ich sagen Pin 4 ist der linke Punkt.
Das Bild bei "Abmessungen" zeigt Dir noch an, wie die Pins durchnummeriert sind.

Super die erste zahl leuchtet aber die 2 Zahl leuchte nicht. Außerdem habe ich die Nummerierung beim ersten mahl nicht gesehen^^ aber jetzt du du es gesagt hast

vedel26:
Super die erste zahl leuchtet aber die 2 Zahl leuchte nicht.

Beschreib mal, wie Du was angeschlossen hast.

oder was ich noch versucht habe ist die hier zu testen:

http://www.pollin.de/shop/downloads/D120212D.PDF

da leuchtet überhaupt nix ich verstehe das nicht ich habe mir das viel leichter vorgestellt -.-'

also bei der LED habe ich PIN 15 der LED an GND angeschlossen und mal getestet ob etwas leuchtet egal was aber nix passiert.

ich nehme alles zurück ich merke erst jetzt das ich mich verlesen habe

vedel26:
oder was ich noch versucht habe ist die hier zu testen:

http://www.pollin.de/shop/downloads/D120212D.PDF

da leuchtet überhaupt nix ich verstehe das nicht ich habe mir das viel leichter vorgestellt -.-'

also bei der LED habe ich PIN 15 der LED an GND angeschlossen und mal getestet ob etwas leuchtet egal was aber nix passiert.

Da steht aber, dass Pin 15 die Anode ist. Pin 18 ist die Kathode und somit GND. LED leuchten nur wenn der Strom in die richtige Richtung fließt (ist ja schließlich eine Diode).
Und beachte auch die Spannung der LEDs. Wenn ich mich noch richtig erinnere, stand im vorigen PDF was von 1,7V. Wenn Du die LEDs ohne Vorwiderstand an 5V hängst, kann es sein, dass Du sie nur ganz kurz und dann nie mehr zum leuchten bekommst :wink:

Ja aber ich verstehe nicht wie man das Steuert mit dem Arduino ich bin ein totaler noob bei diesen LEDs. Ich will das es von zb: 10 auf 0 runter zählt aber ich weiß nicht wie man das Steuern soll^^

ich will das diese LED runter zählt:
http://www.pollin.de/shop/downloads/D120212D.PDF

Du kannst also schon einmal 7-Segmente ansteuern.
Pack dir jetzt die Beschaltung für jede der Ziffern in ein Feld eines Arrays und dann geh nur noch das Array durch (vorwärts, rückwärts, wie auch immer).

ja aber die anderen funktionieren anders. Ich weiß nicht wie man GND steuern soll -.-*

Die einfachste Möglichkeit ist hierbei über einen entsprechenden Treiber-IC zu steuern. z.B. der MAX7219 oder auch der TLC5940... oder du baust dir mit Transistoren eine entsprechende Schaltung auf.

Hi

Nein, brauchst du nicht :wink:
Ich habe einen 4 Stelligen Tacho mit lediglich 2 doppel-7-segment-anzeigen und 2 Widerständen gebaut. Hatten auch gemeinsame Anode, also muss man "nur" die anderen Pins auf Masse setzen.

int za[] = {1,2,3,4,5,6,7};
int z0[] = {1,2,3,4,5,6};
int z1[] = {2,3};
int z2[] = {1,2,4,5,7};
int z3[] = {1,2,3,4,7};
int z4[] = {2,3,6,7};
int z5[] = {1,3,4,6,7};
int z6[] = {1,3,4,5,6,7};
int z7[] = {1,2,3};
int z8[] = {1,2,3,4,5,6,7};
int z9[] = {1,2,3,4,6,7};
int zE[] = {1,4,5,6,7};
int zr[] = {5,7};

int anzeige[] = {13,12,11,10};

void Anzeigen(int wert)
{
  if(wert < 1000)
  {
    char buffer[3];
    itoa(wert, buffer, 10);
    zeigean(buffer[0], 0);
    zeigean(buffer[1], 1);
    zeigean(buffer[2], 2);
  }
  else
  {
    zeigean(10, 0);
    zeigean(11, 1);
    zeigean(11, 2);
  }
}

void zeigean(char w, int a)
{
  pinMode(anzeige[a], OUTPUT);
  digitalWrite(anzeige[a], HIGH);
  
  for(int i=0;i<7;i++)
  {                      
    pinMode(za[i]-1, INPUT);
  }
  
  switch(w)
  {
  case '0':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z0[i]-1, OUTPUT);
      delay(2);
    }
    break;
  case '1':
    for(int i = 0; i < 2; i++)
    {
      pinMode(z1[i]-1, OUTPUT);
    }
    break;
  case '2':
    for(int i = 0; i < 5; i++)
    {
      pinMode(z2[i]-1, OUTPUT);
    }
    break;
  case '3':
    for(int i = 0; i < 5; i++)
    {
      pinMode(z3[i]-1, OUTPUT);
    }
    break;
  case '4':
    for(int i = 0; i < 4; i++)
    {
      pinMode(z4[i]-1, OUTPUT);
    }
    break;
  case '5':
    for(int i = 0; i < 5; i++)
    {
      pinMode(z5[i]-1, OUTPUT);
    }
    break;
  case '6':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z6[i]-1, OUTPUT);
    }
    break;
  case '7':
    for(int i = 0; i < 3; i++)
    {
      pinMode(z7[i]-1, OUTPUT);
    }
    break;
  case '8':
    for(int i = 0; i < 7; i++)
    {
      pinMode(z8[i]-1, OUTPUT);
    }
    break;
  case '9':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z9[i]-1, OUTPUT);
    }
    break;
  case 10:
    for(int i = 0; i < 5; i++)
    {
      pinMode(zE[i]-1, OUTPUT);
    }
    break;
  case 11:
    for(int i = 0; i < 2; i++)
    {
      pinMode(zr[i]-1, OUTPUT);
    }
    break;
  }
  
  for(int i=0;i<7;i++)
  {                      
    pinMode(za[i]-1, INPUT);
  }
  //digitalWrite(anzeige[a],LOW);
  pinMode(anzeige[a], INPUT);
}

Is aber "nur" der code für ne dreistellige Anzeige

Müsstest nur die Pins anpassen.
Pin 13: Anzeige 1, Anode
Pin 12: Anzeige 1, Anode
Pin 11: Anzeige 1, Anode
Pin 10: Anzeige 1, Anode

Die Pins 0 - 6 sind die Kathoden von a - g.

Den Code solltest du eig sehr leicht verstehen, is wirklich sehr einfach aufgebaut :wink:

MFG, Robdeflop®

OK... das is auch ne möglichkeit. Mit der Hand durch den Rücken in den Bauch... Aber deshalb stand das "nur" ja in Anführungszeichen :wink:

P.S: das funktioniert vielleicht mit der 7-Segment LED - aber lass dir ja nicht einfallen einen "richtigen" Verbraucher so zu schalten - dein Arduino wird brennen.

Hi

Nö, mein Ardu Uno hat das locker stundenlang gepackt :wink:
Außerdem pulsieren die Segmente ja auch und sind nicht dauerhaft an^^
Aber man könnte natürlich auch Transistoren nehmen, falls man nich extra einen Treiber-IC kaufen will. Sofern man die Transistoren da hat :slight_smile:

MFG, Robdeflop®

Robdeflop:
Hi
Nein, brauchst du nicht :wink:
Ich habe einen 4 Stelligen Tacho mit lediglich 2 doppel-7-segment-anzeigen und 2 Widerständen gebaut. Hatten auch gemeinsame Anode, also muss man "nur" die anderen Pins auf Masse setzen. ...
MFG, Robdeflop®

Hallo Robdeflop
Wenn Du ein Multiplex machst müssen die Vorwiderstände auf die 8 Kathoden. Nur so kannst Du sicher sein, daß Du den Arduino nicht kaputmachst und daß die Segmente gleichmäßig leuchten.
Der Kode funktioniert vielleicht aber Du mußt die Ausgänge mit digitalwrite() einen Zustand geben.

Grüße Uwe

Hi

Die Vorwiderstände sind auf den Kathoden :wink:
Muss ich digitalWrite auch verwenden wenn ich die Pins als Eingang definiere? Ist es dann egal ob HIGH oder LOW? Weil so funzt es eigendlich wunderbar.

MFG, Robdeflop®

Hallo Robdeflop
"Die Vorwiderstände sind auf den Kathoden" Hatte ich nicht verstanden, Du schriebst von nur 2 Widerständen.

Nein, bei Eingängen aktivierst oder deaktivierst Du mit digitalWrite() den internen Pullup-Widerstand.

Ich meinte folgendes:

...
 switch(w)
  {
  case '0':
    for(int i = 0; i < 6; i++)
    {
      pinMode(z0[i]-1, OUTPUT);
      delay(2);
    }
    break;
...

Grüße Uwe