Ansteuerung einer 7-Segment-Anzeige

  • Hallo Leute,

    ich habe mir vorgenommen, mich in Python einzuarbeiten und kleine eigene Projekte mit meinem Raspberry Pi zu beginnen. Mir kommt es darauf an, eigenes Verständnis für das notwendige Vorgehen und die Umsetzung der einzelnen Schritte in die Praxis zu entwickeln. D.h. ich suche nicht unbedingt eine "fertige Gesamtlösung" sondern Informationen, die mir helfen, selbst eine Lösung der Projektvorhaben zu erstellen.

    Da ich noch "Newbie" in diesem Forum bin, bitte ich mir nachzusehen, wenn ich gegebenenfalls vorhandene, genau passende Anleitungen/Erläuterungen (noch) nicht gefunden habe.

    Zunächst einmal möchte ich versuchen, auf einer einzelnen 7-Segment-Anzeige Text und Zahlen "nach Art einer Laufschrift" darzustellen.

    D.h. es soll eine kurze Darstellung des ersten Zeichens erfolgen, dann eine kurze Darstellung des zweiten Zeichens, usw. und nach erfolgtem vollständigen Durchlauf soll das Ganze wieder von vorne losgehen.

    Zunächst kann die Ansteuerung der 7-Segment-Anzeige über einzelne GPIO-Pins erfolgen, Ziel ist es aber, die Ausgabe über nur einen GPIO-Daten-Pin umzusetzen, d.h unter Verwendung eines Schieberegisters.

    Spätere Erweiterungsmöglichkeiten:
    - Abbruchmöglichkeiten für die Textanzeige schaffen,
    - Übernahme des darzustellenden Textes aus externer Quelle (z.B. von anderen Quellen / Programmen, Ausgabe von Sensoranzeigen über das Display),
    - Erweiterung auf 2, 3, 4, oder mehr 7-Segment anzeigen, um die Lesbarkeit zu erleichtern.


    Umsetzung mit
    - Raspberry Pi
    - Python als Programmiersprache
    - 7-Segment-Anzeige (1 Stück, später auch mehr)
    - Schieberegister, zur Umsetzung serieller Datenausgabe in parallele Datenausgabe (1 Stück, später auch mehr)
    - Steckbrett(er), Widerstände, bei Bedarf ggfs. Transistoren, externe Stromversorgung etc.

    Geplantes Vorgehen:

    - Grundsätzliche Definition von Buchstaben und Zahlen, d.h. Festlegung der anzuzeigenden Segmente je Buchstabe/Zahl (Codetabelle) [erledigt]
    - Umsetzung in 1 Byte pro Buchstabe/Zahl [erledigt]
    - (Umsetzung in Hexadezimalcode erforderlich?) [ab hier noch unerledigt]
    - Python-Programm schreiben,
    - Im Programm vorzusehende "Programmblöcke"
    - Manuelle Eingabemöglichkeit schaffen
    - Speicherung in einer Variablen
    - Zeichenweise Ausgabe der Variablen
    - zeichenweises Auslesen der Variablen, beginnend vom ersten Zeichen,
    - Übersetzung in das zum Display zu sendende Byte,
    - Fragen zu Timing und Ansteuerung des Schieberegisters klären
    - Umsetzung in das Festlegung der Zeitdauer der Anzeige,
    - Löschung der Anzeige vor Darstellung des nächsten Zeichens erforderlich?
    - Anzeige des nächsten Zeichens
    - Neubeginn der Anzeige
    - Abbruchmöglichkeit schaffen
    ...

    Zu vielen der oben vorgesehenen Einzelschritte werde ich mir selbst Lösungen erarbeiten können und es auch gerne machen. Wenn ich sehr lange suche, dann finde ich wahrscheinlich sogar Lösungen zu allen Schritten. Aber mit Euch zusammen geht es mit Sicherheit schneller und macht sicherlich auch mehr Spaß.Die Beiträge aus "[Tutorial] Ansteuerung einer 7-Segment-Anzeige" habe ich gesehen, diesen aber noch keine Lösungsansätze für meine "Einzelschritte" entnehmen können. Vielleicht könnt Ihr mir ja ein wenig "auf die Sprünge helfen"..

    Etwas Geduld ist angesagt, da ich immer nur begrenzt Zeit habe, mich diesem kleinen Projekt zu widmen. Ich halte Euch aber gerne über meine "Fortschritte" auf dem Laufenden. Vielleicht resultiert am Ende ja ein neues Schritt-für-Schritt-Tutorial daraus, in dem ich, wenn ich es selbst erst einmal weiß "wie es geht", anderen Anfängern (solchen wie mir :D ) das Vorgehen erläutern kann ...

    Ich freue mich auf Eure Kommentare, Anregungen, Hinweise und Tipps.
    Thommy

  • Hallo Thommy,

    herzlich Willkommen in unserem Forum!

    Wenn Du auch mal etwas über den Tellerrand schauen möchtest, ich habe da mal ein paar Tutorials geschrieben, wie eine 7-Segment-Anzeige in der Programmiersprache Icon angesteuert werden kann. Dort ist recht ausführlich beschrieben, wie die einzelnen Segmente angesprochen werden, zum Leuchten oder Erlöschen gebracht werden, wie Ziffern und ausgewählte Buchstaben angezeigt werden.

    Ich bin mir sicher, dass Du da konzeptionell viel übernehmen kannst. Nur die Programmierung an sich unterscheidet sich.

    Den Einstieg findest Du über den Link in das Icon-Tutorial Teil 1. Dort sind dann alle weiteren Tutorial-Teile verlinkt. Für Deine Projektdefinition wird's für Dich dann bei Tutorial Teile 12 und 13 interessant. Weiterführende Informationen zu Steckbrettern etc., um Deine weiteren Projektteile umzusetzen, wirst Du im Icon Tutorial Teil 24 finden.

    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.

    Edited once, last by Andreas (October 16, 2017 at 8:58 PM).

  • Hallo Andreas,

    vielen Dank für die Hinweise. Ich habe schon einmal kurz hineingeschaut. Sobald ich etwas Zeit habe, das genauer durchzusehen, werde ich sicher gute konzptionelle Tipps und Hinweise daraus gewinnen können.

    Um mich mit Programmiersprachen nicht zu "verzetteln", wollte ich mich zuallererst einmal auf Python konzentrieren, weil ich Python als eingängig/unkompliziert/leicht zu erlernen ansehe

    (Natürlich ist dieses, mangels tieferer Kenntnisse und Einsichten, eine noch sehr subjektive Meinung. "Icon" gegenüber habe ich noch gar keine Meinung. Ich möchte einfach zunächst einmal damit weitermachen, womit ich schon erste Erfahrungen gesammelt habe.)

    Mit Python habe ich schon etliche Beispiele nachvollzogen, bzw. abgewandelt und an eigene Vorstellungen angepasst. (z.B. LED blinken lassen, Ampelschaltung, elektronischer Würfel, Kapazitätsmessung von Kondensatoren, selbst gemachter "Rechentrainer" für einfache Kopfrechenaufgaben d.h. multiplizieren nach dem "kleinen Einmaleins" auf Basis von zufällig vorgegebenen Zahle,).

    Projektergebnisse für mein Vorhaben "Laufschrift über 7-Segment-Anzeige" bisher:

    • Eine Codetabelle (in Binärdarstellung bzw. Hexadezimaldarstellung) für die Ansteuerung der einzelnen Segmente zur Darstellung von Buchstaben habe ich erstellt.

    (Die Buchstabendarstellung ist aufgrund der Einschränkung auf nur sieben Segmente plus Dezimalpunkt sicher nicht perfekt, sollte aber doch einigermaßen lesbar sein. Aber es geht sowieso weniger um das perfekte Ergebnis als eher um die schrittweise Erarbeitung von Lösungen der Teilprobleme dieser selbst gewählten Aufgabenstellung, bis es ein "Endergebnis" gibt. Wobei der Weg, die Einzelschritte und die Erkenntnisse aus der Bearbeitung Teilprobleme mehr zählen als das Endergebnis selbst.


    An ersten Fingerübungen in Bezug auf die Programmierung bin ich dran

    • Eingabe der darzustellenden Zeichenkette fuktioniert
    • Ermittlung der Länge der Zeichenkette funktioniert
    • Zeichenweise Ausgabe der Zeichenkette funktioniert grundsätzlich.


    Beispiele (gerne auch die noch sehr, sehr kleine Programmdatei/Programmstruktur ) und auch Fortschritte werde ich bei Interesse gerne posten. Nur nicht mehr heute.
    (Da ich einer geregelten, zeitweise ziemllich fordernden Tätigkeit nachgehe, können längere "Pausen" vorkommen. Längere "Stille" sollte hoffentlich nicht bedeuten, dass ich "aufgegeben" habe.

    Viele Grüße
    Thommy

  • Schieberegister ist OK aber ein GPIO wäre nicht so meine Wahl, ich würde 2 GPIO nehmen, 1 Data und 1 CLK und per bitbanging schieben, bist du Timing und Synchron Sorgen los.
    Evtl. noch ein Enable und ein Reset Bit für die Schiebe Latches.

    Ich würde dir wirklich erst mal ans Herz legen eine uh low power LED mit einem Vorwiderstand 1k Ohm zu on off blinken zu bringen, der Rest ist dann ein Kinderspiel.

    http://kampis-elektroecke.de/?page_id=1544

    damit hatte ich am PI sofort Erfolg!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar (October 31, 2016 at 9:00 AM).

  • Halllo an alle,

    Vielen Dank an jar für die zusätzlichen Tipps.

    Eine LED zum Blinken zu bringen, einen elektronischen Würfel nachzubauen, eine Ampelsteuerung aufzubauen und dann an eigene Vorstellungen anzupassen und zu erweitern (Druckknopf, Autoampel erweitert um eine Fußgängerampel, Zeitverzögerung, Taktungsanpassung, etc.) habe ich schon hinter mir. Nun möchte ich die nächsten Schritte machen und erste eigene Ideen in die Praxis umsetzen.

    Am Anfang habe ich mich wohl etwas ungeschickt ausgedrückt. Mir war schon klar, dass ich mit einem einzelnen GPIO Pin wohl kaum auskommen werde, weil die Übermittlung von Datensignalen und davon getrennten Steuersignalen einfacher umzusetzen ist, als die Umsetzung über eine einzelne Leitung. Ich wollte einfach vermeiden, je einen GPIO-Pin für jede einzelne Leuchtdiode in der 7-Segment-Anzeige verwenden zu müssen, was ab dem dritten Anzeige-Element langsam unübersichtlich wird und wo bei meinem Raspberry Pi Modell beim vierten Anzeige-Element auch schon die GPIO-Pins ausgehen. Also werde ich vielleicht ganz am Anfang erst einmal sieben GPIO-Pins (acht mit Dezimalpunkt) für die Steuerung benutzen, damit schnell ein Ergebnis kommt. Dann geht es aber per Schieberegister weiter ...


    In der Zwischenzeit bin auch schon etwas weitergekommen. Bitbanging war genau das richtige Stichwort und beschreibt die Richtung, in der ich mich jetzt informiere. Allerdings musste ich erst einmal herausfinden, was mti Bitbanging gemeint war.

    Erst hatte ich vermutet, dass es kompliziert werden würde, sich in die Materie hineinzufinden und eine aufwendige Steuerung und Taktung als Grundlage für die Datenübermittlung zu verstehen und anzuwenden. Wie ich aber herausgefunden habe, ist es zum Glück viel einfacher als ich gedacht hatte. Ich habe gerade damit begonnen, mit Breadbord, Drucktasten-Schaltern, Wiederständen, Leuchtdioden und natürlich dem Schieberegister) eine manuelle Steuerung der Daten-Eingabe und Ausgabe über 8 einzelne Leuchtdioden nachzubauen, um die Funktion des Schieberegisters zu testen und zu anschaulich nachzuvollziehen. Wenn das funktioniert, dann geht es danach an die Umsetzung über die Software, d.h. an die Python-Programmierung.

    Viele Grüße
    Thommy

  • Kurzes Update:

    Aufbau und Test einer manuellen Ansteuerung des Schieberegisters funktionieren schon einigermaßen. "Einigermaßen" deshalb, weil die verwendeten Mikroschalter oft "prellen", d.h. bei einem Tastendruck werden oft mehrere (Mikro-)Impulse ausgelöst, die vom Schieberegister als mehrere Signale "interpretiert" werden, so dass statt jeweils nur einer "0" oder "1" gleich mehrere davon übertragen werden. Da es aber nur um das Verständnis des Funktionsprinzips und einen generellen Machbarkeitstest ging, ist das für mich ok.

    Jetzt ist die Programmierung an die Reihe. Die erforderlichen Schritte sind schon festgelegt, um unter anderem von

    • der Texteingabe
      über
    • die Übertragung der Buchstaben in passende "Bitmuster"
      und
    • richtige Übertragung der Bitmuster mit Hilfe des Schieberegisters an die 7-Segmentanzeige

    zu kommen,damit die jeweils "passenden" Elemente der 7-Segment-Anzeige aufleuchten.

    Einige Programmteile funktionieren schon, bei anderen muss ich mich in Funktionen und Syntax noch besser einarbeiten, um die entsprechenden Programmfunktionen zum Laufen zu bringen.

    Viele Grüße
    Thommy

  • Weiteres Update:

    Es geht voran, langsam aber stetig. Der Status ist jetzt wie folgt:

    • 4-stelliges 7-Segment-Display ist angeschafft.
    • Datenübermittlung mittels Bitbanging an Schieberegister und von dort an eine Stelle des Displays funktioniert.


    Nächste Schritte:

    • Verdrahtung der verbleibenden drei Stellen
    • Programm-Anpassungen und Verbesserungen


    Viele Grüße
    Thommy

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!