LoRa Packet Forwarder JSON Daten
25.12.2024
Elektronik | Funk | Software
Der Technik-Blog
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.
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.
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.
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.
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.
//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);
}
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?
WeiterlesenDer 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
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved