7Segment-4Stellig gegen 2Stellig ausgetauscht Anzeige funktioniert nicht mehr

Hallo ich habe mein 4 Stelliges Display gegen ein 2 Stelliges ausgetauscht. Seit dem funktioniert meine Anzeige nicht mehr. Auf dem Display sind alle Segmente an und sonst geht nichts mehr. Benutze die SevSeg Bibliothek könnte es vielleicht daran liegen?

#include <TimeLib.h>
#include <SevSeg.h>

SevSeg sevseg;
  int startBtn=2;     //Button pull up
  int startBtnSig=0;  //Button pull up
  int resetBtn=5;    //Button pull up  
  int resetBtnSig=0; //Button pull up
// Zeit und Zeit speicherung
  int minuten,saveMinuten;
  int sekunden,savSekunden;
// Status Button
  int getrueckt,isZmZweiten;
  int gestartet=HIGH;
 
void setup() {  
  byte digitPins[]={3,4};
  byte segmentPins[]={6,7,8,9,10,11,12,13};
  bool updateWithDelays = false; // Default 'false' is Recommended
  bool disableDecPoint = true;
  sevseg.begin(COMMON_ANODE,2,digitPins,segmentPins,updateWithDelays,disableDecPoint);
  sevseg.setBrightness(90);
  pinMode(startBtn, INPUT);         //Button pull up
  digitalWrite(startBtn, HIGH);     //Button pull up
  pinMode(resetBtn, INPUT);        //Button pull up
  digitalWrite(resetBtn, HIGH);    //Button pull up
  }

// Vorsicht alle Variablen sind !Konstanten(Pull up)
void loop() {  
  startBtnSig=digitalRead(startBtn);
  resetBtnSig=digitalRead(resetBtn);
  
  if (startBtnSig==LOW) {         // Wenn Taste gedrückt
      delay(1000);
      getrueckt++;
      gestartet=LOW;
      isZmZweiten=getrueckt%2;      
      if (isZmZweiten==0) {gestartet=HIGH;}
      }
  else {
       if (gestartet==LOW) {starten();}
        else {setTime(0,saveMinuten,savSekunden,0,0,0); reset();}
        }
  sevseg.refreshDisplay();  
}

void starten() {
  minuten=minute();
  sekunden=second();          
  saveMinuten=minuten;
  savSekunden=sekunden;
  sevseg.setNumber(sekunden);          
}

void reset() {
  if (resetBtnSig==LOW) {
      delay(1000);      
      saveMinuten=0;      
      savSekunden=0;
      getrueckt=0;  
      sevseg.setNumber(0);
      }
}

Hallo,

sind die Anzeigen zueinander kompatibel?
Stimmen die Segmentanschlüsse? Kann man korrigieren.
Stimmt der generelle Typ gemeinsame Anode/Kathode überein?
Anhand von Steckbrettbild kann man nichts überprüfen, dass kannst nur du vor Ort machen.

sind die Anzeigen zueinander kompatibel?

Weiß ich nicht sie wurden unabhängig von einander gekauft.

Stimmen die Segmentanschlüsse? Kann man korrigieren.

Ja, also meines Wissens stimmen diese: PIN 6-13 = A-G + DP
Anzeige oben: 1,B,C,E,D
unten: G,DP,A,F,2

Stimmt der generelle Typ gemeinsame Anode/Kathode überein?

Da gab es gerade schon eine Unstimmigkeit. Das 4 stellige war Anode und das 2 Stellige ist Kathode.
Dies habe ich auch gerade im Sketch geändert nun leuchten die Segmente nicht mehr(was auch der eigentliche Anfangszustand ist) aber des weiteren passiert nichts mehr sprich wenn ich den Startbutton drücke kommt keine Anzeige.

Hallo,

ich kann deinen Aufbau und Beschaltung aus der Ferne nicht im Detail kontrollieren. Überprüfe nochmal ob die Beschaltung der Anzeige stimmt. Wenn der Anzeigetyp von gemeinsam Anode auf Kathode wechselte, dann muss du auch die Beschaltung dieses Pins ändern. + / - Man kann nicht alles per Software lösen. :wink: Desweiteren, fällt mir jetzt erst auf, ist die Widerstandsbeschaltung generell falsch. Jedes Segment benötigt seinen eigenen Vorwiderstand. An den gemeinsamen A/K gehört kein Widerstand.

mastershredder:
Weiß ich nicht sie wurden unabhängig von einander gekauft.

Das musst du bei sowas von Anfang an überprüfen. Da kann man die Datenblätter anschauen. Idealerweise sind beim Verkäufer verlinkt. Oder man sucht nach dem Typ

Hallo,

bei nochmaliger Überlegung ist auch die Beschaltung der gemeinsamen A/K falsch. Der Controller Pin dafür verkraftet den Summenstrom aller Segmente sowieso nicht. Du benötigst 2 Transistoren für diese 2 Pins zum umschalten des Digits. Die aktuell falsche Beschaltung und die Gutmüdigkeit der Controllerpins hat derzeit schlimmeres verhindert. Im dümmsten Fall würden "nur" alle Segmente unterschiedlich hell leuchten.

Ja, eigentlich sind solche Anzeigen zum Multiplexen gedacht. D.h. man schaltet alle paar Millisekunden zwischen den beiden Ziffern um. Für das menschliche Auge sieht es dann so aus als dass beide ständig leuchten. Die Bibliothek wird das erledigen, aber man kann da auch schön was lernen wenn man das per Hand macht.

Dafür gibt es viele Beispiel-Bilder im Internet wenn man nach den richtigen Begriffen sucht. Wobei man halt unbedingt gemeinsame Anode bzw. Kathode unterscheiden muss. Je nach dem braucht man andere Transistoren. Und leider gibt es auch einige falsche Bilder mit gemeinsamen Widerständen. Wenn Widerstände komplett fehlen dient es aber glaube ich eher der Vereinfachung des Schaltbilds und es soll nur das Prinzip gezeigt werden

Hier ist gemeinsame Anode (mit PNP Transistoren):

Und gemeinsame Kathode (mit NPN):

Hallo,

vorbildlich, jetzt sollte er alle Informationen zur Verfügung haben. :slight_smile:

Doc_Arduino:
Hallo,

bei nochmaliger Überlegung ist auch die Beschaltung der gemeinsamen A/K falsch. Der Controller Pin dafür verkraftet den Summenstrom aller Segmente sowieso nicht. Du benötigst 2 Transistoren für diese 2 Pins zum umschalten des Digits. Die aktuell falsche Beschaltung und die Gutmüdigkeit der Controllerpins hat derzeit schlimmeres verhindert. Im dümmsten Fall würden "nur" alle Segmente unterschiedlich hell leuchten.

Bei 1kOhm auf dem gemeinsamen Pin wird das nicht überlastet.
Andererseits ist ein Widerstand pro Displaystelle falsch. Die Widerstände kommen an die 8 einzelnen Segmente.
Bei den Beispielschaltungen die verlinkt wurden stimmt das.
Grüße Uwe

Desweiteren, fällt mir jetzt erst auf, ist die Widerstandsbeschaltung generell falsch. Jedes Segment benötigt seinen eigenen Vorwiderstand. An den gemeinsamen A/K gehört kein Widerstand.

OK. Das habe ich so aus einem Tutorial: Nr.12 - 7 Segment Anzeige - Funduino - Kits und Anleitungen für Arduino
Ich dachte das mit einem Vorwiderstand an jedem Segment wäre eine alte Methode(meine das so gelesen zu haben).

Das musst du bei sowas von Anfang an überprüfen. Da kann man die Datenblätter anschauen. Idealerweise sind beim Verkäufer verlinkt. Oder man sucht nach dem Typ

Ja hier bei gab es leider kein Datenblatt. Ich musste auch erst heraus finden an welschem Pin welsches Segment liegt. In dem ich den Ziffernpin gefunden habe und dan die Einzelnen Segmente geprüft habe. Hoffe das war richtig so?

Bei 1kOhm auf dem gemeinsamen Pin wird das nicht überlastet.
Andererseits ist ein Widerstand pro Displaystelle falsch. Die Widerstände kommen an die 8 einzelnen Segmente.

Was bedeutet das jetzt? Brauche ich noch Transistoren dafür?

Aber ja, hier bei handelt es sich um eine Probeschaltung im Original wollte ich einen Arduino Nano verwenden.

Hoffe kann es auch dann so übernehmen?

Hallo,

@ Uwe:
Ich hatte mich anscheinend nicht klar ausgedrückt. Erstmal egal wie man es betrachtet, die Beschaltung ist falsch. Und wenn er jetzt nur Segmentwiderstände einbaut und die jetzigen beiden dafür rausnimmt, dann werden diese beiden Pins überlastet. So war das gemeint und ich denke es wurde auch verstanden.

@ TO:

Was bedeutet das jetzt? Brauche ich noch Transistoren dafür?

Ja.
Warum?
Weil du zwischen beiden Digits umschalten musst bzw. die Lib tut das für sich.

Tipp für die Zukunft. Bauteile ohne Datenblatt kauft man nicht.

Was der funduinoshop da zeigt ist schlichtweg falsch. Lieblos zusammengeschustert.

Leider gibt es viele falsche oder schlechte Tutorials und als Anfänger ist es unmöglich dies zu erkennen. Auch wenn man fundiertes Wissen ist es nicht immer leicht.

Ja, Du brauchst Transistoren auf den Spalten, es sei denn Du limitierst den Strom durch die Segmente so klein daß 8 Segmente gleichzeitig nicht mehr als 20mA brauchen. Das heißt jedes Segment darf nur 2,5mA. Das ist so wenig daß das Display sehr schwach leuchtet.

Grüße Uwe

Doc_Arduino:
Hallo,

@ Uwe:
Ich hatte mich anscheinend nicht klar ausgedrückt. Erstmal egal wie man es betrachtet, die Beschaltung ist falsch. Und wenn er jetzt nur Segmentwiderstände einbaut und die jetzigen beiden dafür rausnimmt, dann werden diese beiden Pins überlastet. So war das gemeint und ich denke es wurde auch verstanden.

Die Beschaltung ist falsch. Da gebe ich Dir recht. Und sollte auch nicht so verwendet werden.
Nicht nur weil die Ausgänge durch den zu großen Summenstrom kaputgehen sondern auch die Helligkeit des Displays von Zahl zu Zahl verschieden ist. eine "1" mit 2 Segmenten wird heller sein als eine "8" mit 7 eingeschaltenen Segmenten.

Im gezeigten Fall sind aber die Werte der Widerstände so groß daß nichts kaputgeht. Bei kleineren Werten sehe ich auch eine Gefahr für die Ausgänge.

Grüße Uwe

mastershredder:
OK. Das habe ich so aus einem Tutorial: Nr.12 - 7 Segment Anzeige - Funduino - Kits und Anleitungen für Arduino

Das ist leider falsch. Ich mach dir da auch keinen Vorwurf auf diese Seite reingefallen zu sein. Das ist ja auch keine Hobbyseite. Da kann man schon erwarten dass es korrekt ist

Da fehlen aber sowohl die Segment-Widerstände als auch die Transistoren für die Ziffern. Es kann gut sein dass durch die Eigenheiten der Prozessor-Pins irgendwie halbwegs geht. Aber nicht unbedingt zuverlässig oder so wie es soll.

Du musst beachten dass durch den gemeinsamen Pin der Strom aller Segmente fließt. Das ist erstens der Grund weshalb ein gemeinsamer Widerstand da nicht ausreicht. Mit einem Widerstand für alle richtet sich der Strom nach dem eingeschalteten Segmenten. Außerdem sind dann alle LEDs parallel geschaltet, was auch nicht immer gut geht weil die nicht wirklich alle gleich sind.
Zweitens übersteigt der gesamte Strom den maximal Strom eines Pins. Deshalb der Transistor.

Die Art des Transitors (NPN oder PNP) richtet sich nach dem Typ des Displays (gemeinsame Kathode oder Anode).

OK danke, gut zu Wissen.

Das ist leider falsch. Ich mach dir da auch keinen Vorwurf auf diese Seite reingefallen zu sein. Das ist ja auch keine Hobbyseite.

Ja die sieht wirklich gut und vertrauenswürdig aus.

Habe hier gerade ein Paar Transistoren gefunden. Dort ist jetzt direkt kein Datenblatt aber wenn ich nach der Bauteilenummer suche finde ich schnell ohne mühen viele Ergebnisse.

Datenblatt: BC337 Datasheet, PDF - Datasheet Search Engine

Datenblatt: BC547 Datasheet, PDF - Datasheet Search Engine

Welsche Größe müssen denn die Widerstände sein? Oder ist das auch wieder Bauteil abhängig? Und wie bekomme ich das dann raus?

Nachtlektüre: Elektronik-Kompendium.

Gruß Tommy

Der BC337-40 ist vielleicht der typischste Transistor in der Größenordnung. Der BC547 geht hier aber auch. Der etwas geringe Kollektorstrom ist hier nicht so wichtig.

Für die Basiswiderstände nimmt man bei sowas 1k. Das muss man in diesem Fall nicht genau berechnen.

Die Vorwiderstände der LED richten sich nach der Farbe der LEDs und welchen Strom du da haben willst:
https://www.elektronik-kompendium.de/sites/bau/1109111.htm
Also so 220-390 Ohm für eine Rote LED an 5V. Je mehr Strom desto heller wird es natürlich

Nachtlektüre: Elektronik-Kompendium.

Ja danke so was mache ich neben bei auch noch :smiley: .

LED-Vorwiderstandsrechner

Wie/kann ich die Durchlasspannung an einem Segment Display messen? Ein Multimeter habe ich.

Das hängt von der Farbe und dem Halbleitermaterial ab. Bei rot kannst du mit 1,6V bis 2V rechnen. Deshalb hat diese Seite schon vorgegebene Werte wenn du auch die Farben klickst

Das muss nicht super genau ausgerechnet sein. Der verwendete Widerstand weicht wegen der Baureihe sowieso meistens vom berechneten ab. Und hat auch noch etwas Toleranz. In der Elektronik kann man viel mit solchen Richtwerten arbeiten.

Beispiel:
1,6V und 10mA an 5V = 340 Ohm / praktisch 390 Ohm und 8,7 mA
2V und 10 mA an 5V = 300 Ohm / praktisch 330 Ohm und 9,1 mA

Da ist kein großer Unterschied. Du kannst auch mit 20mA arbeiten. Das ist normal das maximale was solche LEDs an Dauerstrom vertragen. Aber ob man es so hell möchte oder braucht hängt dann von der genauen LED und der Anwendung ab. Es gibt LEDs die schon mit weniger Strom viel heller leuchten als andere.

Multimeter eigenen sich für LED Tests nicht so, da die nur den minimal nötigen Strom zum Messen verwenden. Am einfachsten geht es mit einem Labor-Netzteil mit einstellbarer Strombegrenzung.
Ist aber wie gesagt nicht unbedingt nötig

Darf ich mal so zwischendurch fragen, warum man eine 7 Segment Anzeige selber multiplexen will und das nicht einem LED Treiber ala MAX7219 oder HT16K33 übergibt, oder gar, eines der vielen fertig Module? Mit Transe hier und Transe da, und Vorwiderstand dort ... da spart man doch auch nichts mehr.

bei den MAX Modulen mit grüner PCB sind die 4fach Module aufgesteckt, und man kann ganz einfach eins runternehmen falls 8 Digits stören.

Und die Programmierung ist auch viele einfacher & blockadefrei...

Als Schulobjekt zum Kennenlernen ok, aber für eine echte Anwendung nehm ich doch gleich einen passenden IC.