Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    Arduino 74HC595 Siebensegment Anzeige

    Siebensegmentanzeige mit HC595

    Alex @ AEQ-WEB

    Eine Siebensegmentanzeige besteht aus 7 einzelnen LED-Balken die einzeln angesteuert werden. Um hier eine Anzeige mit dem Arduino ansteuern zu können, werden in der Regel deshalb sieben Datenleitungen pro Einheit benötigt. Die I/O-Pins würden daher gerade mal für zwei Anzeigen ausreichen und alle 14 digitalen Pins wären belegt. In diesem Artikel zeigen wir, wie eine Siebensegmentanzeige effizient über ein Schieberegister mit nur drei Datenleitungen angesteuert wird.

    Welche Anzeigen sind kompatibel?

    In der Regel sind alle Siebensegmentanzeigen kompatibel, jedoch erspart man sich zusätzliche Bauteile, wenn Anzeigen verwendet werden, die eine gemeinsame Kathode (Minus-Pol) haben. Je nach Farbe und Versorgungspannung muss der Vorwiderstand entsprechend gewählt werden. Es reicht vollkommen aus, wenn ein Widerstand an der Kathode pro Anzeigeeinheit verwendet wird.

    Das 74HC595 Schieberegister

    Der 74HC595 Chip ist ein bekanntes Schieberegister mit acht digitalen Ausgängen. Es wird auch oft als Serial-to-Parallel Converter verwendet. Vom Arduino aus gehen zu diesem IC drei Datenleitungen (DS, ST_CP, SH_CP) und die Stromversorgung (5V, GND). Neben der "Multiplexer-Funktion" hat der IC aber auch ein weiteres tolles Feature, nämlich einen Überlauf-Pin. Damit können mehrere Schieberegister hintereinander angesteuert werden, was bedeutet, das z. B. mehrere Siebensegmentanzeigen über dieselben drei vorhandenen Datenleitungen angesteuert werden können.

    Werbung:

    Die Verdrahtung

    Neben der Stromversorgung von fünf Volt werden für das Schieberegister noch drei Datenleitungen benötigt. Auf der anderen Seite werden sieben Leitungen (+5V) an die Anoden der einzelnen Segmente angeschlossen. Hat die Anzeige auch einen Dezimalpunkt, so kann auch dieser über einen weiteren Ausgang vom Schieberegister angeschlossen werden. Die Kathoden sind in der Anzeige alle auf einem Pin zusammengeführt. An diesem Pin wird ein einfacher Vorwiderstand wie bei üblichen LEDs angeschlossen. Dieser Widerstand beträgt je nach gewünschter Helligkeit, Farbe und Betriebsspannung einen Wert zwischen 200 und 500 Ohm. In diesem Beispiel hat der Widerstand 470 Ohm. Die Pins für den Datenaustausch haben folgende Funktionen:
    DS: Serieller Dateneingang
    SH_CP: Wechselt dieser Pin auf ein HIGH, so rückt das zuvor übergebene Bit im Register um einen Speicherplatz weiter.
    ST_CP: Wenn an diesem Pin ein HIGH anliegt, werden die zuvor in das Register geladene Bits an die Ausgänge übergeben.

    Beispielcode

    Der Beispielcode steuert eine einzelne Anzeige über das Schieberegister an. Dabei läuft ein einfacher Counter, der sekündlich von 9 auf 0 herunter zählt. Für jede Nummer muss ein Array erzeugt werden (int num_X[7]), was den binären Output am Schieberegister enthält. Je nach Zustand der Bits werden die einzelnen Segmente entsprechend geschaltet. Die Funktion [write_led()] arbeitet anschließend das gewünschte Array Bit für Bit ab und übergibt dieses an das Schieberegister. Neben den Zahlen kann man auch Arrays für Buchstaben definieren.

    Werbung:

    //More information at: https://www.aeq-web.com/
    
    int sh_pin = 5; //SH_CP_PIN
    int st_pin = 6; //ST_CP_PIN
    int ds_pin = 7; //DS_PIN
    
    //Define outputs for each number on 74HC959
    int num_1[7] = {0, 0, 0, 1, 1, 0, 0};
    int num_2[7] = {1, 0, 1, 1, 0, 1, 1};
    int num_3[7] = {1, 0, 1, 1, 1, 1, 0};
    int num_4[7] = {1, 1, 0, 1, 1, 0, 0};
    int num_5[7] = {1, 1, 1, 0, 1, 1, 0};
    int num_6[7] = {1, 1, 1, 0, 1, 1, 1};
    int num_7[7] = {0, 0, 1, 1, 1, 0, 0};
    int num_8[7] = {1, 1, 1, 1, 1, 1, 1};
    int num_9[7] = {1, 1, 1, 1, 1, 0, 0};
    int num_0[7] = {0, 1, 1, 1, 1, 1, 1};
    
    void setup() {
      pinMode(st_pin, OUTPUT);
      pinMode(sh_pin, OUTPUT);
      pinMode(ds_pin, OUTPUT);
    }
    
    void loop () {
      write_led(num_9);
      delay(1000);
      write_led(num_8);
      delay(1000);
      write_led(num_7);
      delay(1000);
      write_led(num_6);
      delay(1000);
      write_led(num_5);
      delay(1000);
      write_led(num_4);
      delay(1000);
      write_led(num_3);
      delay(1000);
      write_led(num_2);
      delay(1000);
      write_led(num_1);
      delay(1000);
      write_led(num_0);
      delay(5000);
    
    
    }
    
    void write_led(int num[7]) {
      digitalWrite(st_pin, LOW);
      for (int i = 0; i < 8; i++) {
        digitalWrite(sh_pin, LOW);
        digitalWrite(ds_pin, num[i]);
        digitalWrite(sh_pin, HIGH);
      }
      digitalWrite(st_pin, HIGH);
    }


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    Arduino LM358 PT1000 Sensor Converter

    Temperatur messen mit PT1000 & Arduino

    • Video
    • DE/EN

    PT1000 Sensoren können nicht direkt analog mit einem Mikrocontroller gemessen werden. Wie baut man einen Messwandler mit dem LM358 für den PT1000 und Arduino?

    Weiterlesen
    Arduino PT100 Temperature Sensor Converter

    PT100 Temperatur messen mit Arduino

    • Video
    • DE/EN

    Der PT100 ist ein sehr präziser industrieller Temperatursensor. In diesem Artikel geht es um den Bau eines Messverstärkers zum Einlesen eines PT100 am Arduino

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden