.. note:: Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten. **Warum beitreten?** - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams. - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern. - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken. - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte. - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil. 👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei! .. _1.1.4_js: 1.1.4 7-Segment-Anzeige ============================= Einführung -------------- Lassen Sie uns versuchen, eine 7-Segment-Anzeige zu steuern, um eine Zahl von 0 bis 9 und A bis F anzuzeigen. Benötigte Komponenten ------------------------------ Für dieses Projekt benötigen wir die folgenden Komponenten. .. image:: img/list_7_segment.png Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können sie auch einzeln über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_7_segment` - |link_7segment_buy| * - :ref:`cpn_74hc595` - |link_74hc595_buy| Schaltplan --------------------- Verbinden Sie den ST_CP-Pin des 74HC595 mit dem Raspberry Pi GPIO18, SH_CP mit GPIO27, DS mit GPIO17 und die parallelen Ausgangsports mit den 8 Segmenten der LED-Segmentanzeige. Geben Sie Daten im DS-Pin in das Schieberegister ein, wenn SH_CP (der Takteingang des Schieberegisters) an der steigenden Flanke ist, und in das Speicherregister, wenn ST_CP (der Takteingang des Speichers) an der steigenden Flanke ist. Dann können Sie die Zustände von SH_CP und ST_CP über die Raspberry Pi GPIOs steuern, um die serielle Dateneingabe in parallele Datenausgabe zu transformieren, um so Raspberry Pi GPIOs zu sparen und die Anzeige zu steuern. .. image:: img/schematic_7_segment.png Experimentelle Verfahren -------------------------- **Schritt 1:** Bauen Sie den Schaltkreis. .. image:: img/image73.png **Schritt 2:** Navigieren Sie zum Ordner mit dem Code. .. raw:: html .. code-block:: cd ~/raphael-kit/nodejs/ **Schritt 3:** Führen Sie den Code aus. .. raw:: html .. code-block:: sudo node 7-segment_display.js Nachdem der Code ausgeführt wurde, zeigt die 7-Segment-Anzeige 0-9, A-F an. **Code** .. code-block:: js const Gpio = require('pigpio').Gpio; const segCode = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71]; const SDI = new Gpio(17, { mode: Gpio.OUTPUT }); const RCLK = new Gpio(18, { mode: Gpio.OUTPUT }); const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT }); function hc595_shift(dat) { for (let j = 0; j < 8; j++) { let code = 0x80 & (dat << j); if (code != 0) { code = 1; } SDI.digitalWrite(code); SRCLK.trigger(1,1); } RCLK.trigger(1,1); } let index = -1; setInterval(() => { index = (index+1)%16; hc595_shift(segCode[index]); }, 1000); **Code-Erklärung** .. code-block:: js const segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]; Definieren Sie ein Hexadezimal-Segment-Code-Array (gemeinsame Kathode) von 0 bis F. .. code-block:: js const SDI = new Gpio(17, { mode: Gpio.OUTPUT }); const RCLK = new Gpio(18, { mode: Gpio.OUTPUT }); const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT }); Initialisieren Sie die Pins 17, 18 und 27 im Ausgabemodus und kopieren Sie sie jeweils nach ``SDI``, ``RCLK`` und ``SRCLK``. .. code-block:: js function hc595_shift(dat) { for (let j = 0; j < 8; j++) { let code = 0x80 & (dat << j); if (code != 0) { code = 1; } SDI.digitalWrite(code); SRCLK.trigger(1,1); } RCLK.trigger(1,1); } Implementieren Sie eine ``hc595_shift``-Funktion, um die Felder im Array ``segCode`` in Zahlen umzuwandeln und sie auf der Digitalröhre anzuzeigen. .. code-block:: js let code = 0x80 & (dat << j); if (code != 0) { code = 1; } SDI.digitalWrite(code); Weisen Sie die Daten von dat bitweise SDI(DS) zu. Hier nehmen wir an, dat=0x3f(0011 1111). Wenn j=2 ist, wird 0x3f 2 Bits nach rechts verschoben (<<). 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, ist wahr. Zu diesem Zeitpunkt wird 1 auf SDI geschrieben. .. code-block:: js SRCLK.trigger(1,1); Erzeugen Sie einen ansteigenden Flankenimpuls und verschieben Sie die DS-Daten in das Schieberegister. ``trigger(pulseLen, level)`` * pulseLen - Impulslänge in Mikrosekunden (1 - 100) * level - 0 oder 1 Sendet einen Triggerimpuls an das GPIO. Das GPIO wird für pulseLen Mikrosekunden auf das Level gesetzt und dann auf nicht-Level zurückgesetzt. .. code-block:: js RCLK.trigger(1,1); Erzeugen Sie einen ansteigenden Flankenimpuls und verschieben Sie die Daten vom Schieberegister in das Speicherregister. .. code-block:: js let index = -1; setInterval(() => { index = (index+1)%16; hc595_shift(segCode[index]); }, 1000); Verwenden Sie schließlich die Funktion ``hc595_shift()`` um die Felder in ``segCode`` umzuwandeln und sie durch die Digitalröhre anzuzeigen. Phänomen-Bild --------------------------- .. image:: img/image74.jpeg