4 digit 7 Segment Anzeige

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo liebe Leute,

    bin hier ganz neu und diesen ersten Post nehme ich mal zum Anlass euch mein kleines Projekt vorzustellen. Es handelt sich hierbei um eine 7-Segment Anzeige mit 4 Stellen. Ich habe das ganze mittlerweile zum laufen gebracht, was allerdings nicht so leicht war, da ich kein Datenblatt für mein Bauteil gefunden habe und auch sonst das meiste für mich komplettes Neuland ist.

    Da ich auch in Sachen Raspberry Pi ganz frisch eingestiegen bin, würde ich euch gerne mal meine Vorgehensweise und den aktuellen Aufbau schildern. Es wäre super wenn ihr euch das mal angucken könntet und mir Feedback gibt, ob das soweit passt, ob es ggf. Optimierungen gibt oder ob ich da vielleicht sogar grobe Fehler eingebaut habe.

    Das Bauteil trägt die Bezeichnung "SMA420564", habe das bei Ebay gekauft und kein Datenblatt hierfür gefunden (Verkäufer schickte mir falsches). Habe jedoch nach Recherche und schlussendlich durch Testen mit einem Multimeter herausgefunden, dass es sich um ein Common Cathode Display handelt. Auch die Pinbelegungen sind mir jetzt bekannt.

    Da ich immer noch kein Datenblatt für das Bauteil habe, bin ich einfach von Werten ausgegangen, bei denen ich das Gefühl habe, dass die oft bei "baugleichen" Bauteilen verwendet werden. Die Anzeige verwendet rote LEDs, deswegen hab ich mich auf 20mA und 2.1V festegelegt.

    Da ich weiß, dass man nicht direkt die Pins an die GPIOs anschließen sollte habe ich folgende Rechnung durchgeführt um die notwendigen Vorwiderstände für jedes einzelne Segment zu berechnen:

    (3,3V - 2,1V) / 0,020A = 60 Ohm

    Dann habe ich die 4 D-Leitungen (D1-D4), die für die 4 Stellen zuständig sind, an folgende Pins am RPi angeschlossen:
    D1 -> 3
    D2 -> 5
    D3 -> 7
    D4 -> 8

    Die einzelnen Segmente und den Punkt habe ich an folgende Pins am RPi angeschlossen:
    A -> 60R -> 11
    B -> 60R -> 12
    C -> 60R -> 13
    D -> 60R -> 15
    E -> 60R -> 16
    F -> 60R -> 18
    G -> 60R -> 19
    P -> 60R -> 21

    So und jetzt zur Implementierung. Das habe ich in Python geschrieben. Als erstes habe ich verschiedene Arrays erstellt, was jetzt nicht so interessant ist....
    Jedenfalls habe ich den GPIO-Mode erstmal auf BOARD gesetzt und alle GPIOs auf OUTPUT gesetzt (also von D1-D4, alle 7 Segmente und den Punkt). Dann habe ich D1-D4 auf True gesetzt und die Segmente auf False, damit erstmal alles ausgeschaltet ist. Zum einschalten setze ich dann immer die aktuelle Stelle auf False und dann die einzelnen Segmente die leuchten sollen auf True.

    Das Programm läuft soweit und ich bekomme, das ganze in einigen Schleifen verpackt, an jeder Stelle die Ziffern von 0-9 angezeigt.

    Nun zu meiner Frage! :D Passt das soweit wie ich das gemacht habe, vor allem in Bezug auf die Widerstände? Auch bekomme ich bei der Ausführung des Programms die Meldung, dass mein Pin 3 einen Pull-Up hat. Muss ich das weiter beachten, sollte ich da etwas machen oder kann ich das ignorieren. Ich weiß zwar ungefähr wofür das gedacht ist, bin mir aber nicht so sicher ob ich da jetzt was machen muss.....:s

    Also ich würde mich über jede Anregung und jeden Optimierungsvorschlag freuen. :danke_ATDE:


    Grüße
    Heliox

    Nur durch Zeit vermag die Frucht zu reifen.......oder zu verfaulen!

  • Hallo Heliox,

    erst einmal herzlich Willkommen in unserem Forum!

    Als ich das mit den 20 mA Strom je LED gelesen habe, musste ich gleich loslegen.

    Führe Dir den auch mal den Artikel von Dreamshader zur Stromversorgung (==> Suchfunktion) einmal zu Gemüte - er hat schon so manchem Hasardeur gezeigt, was die Ursache fürs Abrauchen des Raspberry Pi war.


    Erfahrungswerte, die dem Raspberry Pi ein langes Leben versprechen, gehen von 2 mA je GPIO-Pin aus. Alle GPIO-Pins zusammen können mit ca 50 mA belastet werden.

    Entsprechend sind die Widerstände neu zu berechnen.

    Ich messe die Ströme nach und setze den Widerstand so passend, dass je GPIO-Pin nicht mehr als 2 mA fließen.

    Wenn dieser Strom nicht reicht, dann sind andere Maßnahmen zu ergreifen - die Schaltung ist dann um aktive Bauteile zu ergänzen.


    Gutes Gelingen

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. Februar 2015 um 21:55)

  • Vielen dank euch beiden für das Feedback. :danke_ATDE: Ich hatte es schon befürchtet, dass ich wahrscheinlich irgendwas mit den Widerständen nicht ganz richtig gemacht habe.

    Also wenn ich jetzt mal 0,002A als Richtwert nehme, komme ich auf folgende Widerstände:

    (3,3V-2,1V) / 0,002A = 600R

    Allerdings hab ich jetzt auch die Minimalspannung von 2,0V für die Segmente angesetzt, daher komme ich sogar auf 650R. Da ich keine 650R Widerstände habe, benutze ich stattdessen 680 Ohm Widerstände.

    Das mit den 2mA/GPIO und 50mA/GPIOs ist gut zu wissen! :D

    Hoffe das passt soweit!?


    Grüße
    Heliox

    Nur durch Zeit vermag die Frucht zu reifen.......oder zu verfaulen!

  • Hallo Heliox,

    wenn Du jetzt noch Folgendes beherzigst,
    - Kein 5V-Signal (oder gar mehr) auf GPIO_Input geben
    dann kann Dein Raspberry Pi alt werden...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • So liebe Leute,

    also ich habe die Schaltung nun umgebaut, die alten, zu niedrigen Widerstände durch die 680Ohm Widerstände ersetzt. Die einzelnen LEDs der Segmente leuchten fast genauso gut wie vorher, was mich bisl erstaunt hat! :s

    Jedenfalls zur Sicherheit hab ich die Verbindung zwischen Widerstand und Segment unterbrochen und habs durch das Messgerät laufen lassen, das mehrmals und bei verschiedenen Segmenten (GPIO -> 680R -> Messgerät -> Segment-Pin). Da fließt nun 1,4 - 1,6 mA, beim Punkt 1,3-1,4mA. Also wenn ich nun von einer Maximalbelastung von alle Segmente plus Punkt angeschaltet ausgehe, komme ich so auf maximal ~13mA. Somit liege ich deutlich unter der 50mA Maximalbelastung für alle GPIOs. Selbst wenn ich alle Segmente der 4 Ziffern plus alle Punkt anschalte komme ich auf 51,2 mA. Werde ich aber nicht machen, durchschalten sollte es auch tun (werde mal mit 30 fps anfangen).

    Nochmals danke für eure Hilfe. :danke_ATDE:


    Grüße
    Heliox

    Nur durch Zeit vermag die Frucht zu reifen.......oder zu verfaulen!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!