.. note:: Ciao, benvenuto nella Community di Facebook dedicata agli appassionati di SunFounder Raspberry Pi, Arduino ed ESP32! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirsi a noi?** - **Supporto Esperto**: Risolvi problematiche post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team. - **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze. - **Anteprime Esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime. - **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni Festive e Giveaway**: Partecipa a concorsi e promozioni speciali. 👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti subito! .. _1.1.4_py_pi5: 1.1.4 Display a 7 Segmenti ============================= Introduzione ----------------- Proviamo a gestire un display a 7 segmenti per visualizzare le cifre da 0 a 9 e le lettere da A a F. Componenti Necessari ------------------------------ Per questo progetto, avremo bisogno dei seguenti componenti. .. image:: ../python_pi5/img/1.1.4_7_segment_list.png .. raw:: html
Schema a Blocchi ----------------------- Collega il pin ST_CP del 74HC595 al GPIO18 del Raspberry Pi, SH_CP al GPIO27, DS al GPIO17 e le porte di uscita parallela agli 8 segmenti del display a 7 segmenti LED. Invia i dati al pin DS per il registro a scorrimento quando SH_CP (l’ingresso di clock del registro a scorrimento) è al fronte di salita, e al registro di memoria quando ST_CP (l’ingresso di clock della memoria) è al fronte di salita. In questo modo, puoi controllare gli stati di SH_CP e ST_CP tramite i GPIO del Raspberry Pi per convertire i dati di ingresso seriale in uscita parallela, risparmiando GPIO e guidando il display. ============ ======== === T-Board Name physical BCM GPIO17 Pin 11 17 GPIO18 Pin 12 18 GPIO27 Pin 13 27 ============ ======== === .. image:: ../python_pi5/img/1.1.4_7_segment_schematic.png Procedure Sperimentali ------------------------------ **Passo 1:** Costruisci il circuito. .. image:: ../python_pi5/img/1.1.4_7-Segment_circuit.png **Passo 2:** Accedi alla cartella del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python-pi5 **Passo 3:** Esegui il programma. .. raw:: html .. code-block:: sudo python3 1.1.4_7-Segment.py Dopo l'esecuzione del codice, vedrai il display a 7 segmenti mostrare le cifre da 0 a 9 e da A a F. .. warning:: Se appare l’errore ``RuntimeError: Cannot determine SOC peripheral base address``, consulta :ref:`faq_soc` **Codice** .. note:: Puoi **Modificare/Reimpostare/Copiare/Eseguire/Arrestare** il codice qui sotto. Ma prima, è necessario andare al percorso del codice sorgente, come ``davinci-kit-for-raspberry-pi/python-pi5``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto. Dopo aver verificato che non ci siano problemi, puoi usare il pulsante Copy per copiare il codice modificato, poi aprire il codice sorgente nel Terminale tramite il comando ``nano`` e incollarlo. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep # Pin GPIO collegati al registro a scorrimento 74HC595 SDI = OutputDevice(17) # Ingresso dati seriali RCLK = OutputDevice(18) # Ingresso clock della memoria (Clock del registro) SRCLK = OutputDevice(27) # Clock del registro a scorrimento # Codici esadecimali per visualizzare le cifre su un display a 7 segmenti a catodo comune segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ] def hc595_shift(data): # Scorrimento di 8 bit di dati nel 74HC595 for bit in range(8): # Imposta SDI su alto o basso in base al bit di dati SDI.value = 0x80 & (data << bit) # Attiva il clock del registro a scorrimento SRCLK.on() sleep(0.001) SRCLK.off() # Blocca i dati sull’uscita attivando il clock della memoria RCLK.on() sleep(0.001) RCLK.off() def display_all_on(): # Funzione per accendere tutti i segmenti (per display a 7 segmenti a catodo comune) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on") try: while True: # Visualizza ciascuna cifra esadecimale sul display a 7 segmenti for code in segCode: hc595_shift(code) # Trasferisci il codice nel 74HC595 # Stampa il codice del segmento visualizzato print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pausa tra ogni cifra visualizzata except KeyboardInterrupt: # Gestisce l'interruzione dello script (ad es. Ctrl+C) pass **Spiegazione del Codice** #. Questo snippet importa le classi necessarie per il progetto. ``OutputDevice`` da ``gpiozero`` è usato per controllare i componenti hardware collegati ai pin GPIO, e ``sleep`` da ``time`` per aggiungere ritardi. .. code-block:: python #!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep #. SDI, RCLK e SRCLK corrispondono rispettivamente all'Ingresso Dati Seriali, all'Ingresso Clock della Memoria (Clock del Registro) e al Clock del Registro a Scorrimento del 74HC595. .. code-block:: python # Pin GPIO collegati al registro a scorrimento 74HC595 SDI = OutputDevice(17) # Ingresso dati seriali RCLK = OutputDevice(18) # Ingresso clock della memoria (Clock del registro) SRCLK = OutputDevice(27) # Clock del registro a scorrimento #. ``segCode`` è un array che contiene i codici esadecimali per ogni cifra da visualizzare sul display a 7 segmenti. .. code-block:: python # Codici esadecimali per visualizzare le cifre su un display a 7 segmenti a catodo comune segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ] #. Questa funzione scorre 8 bit di dati nel 74HC595. Immette ciascun bit in ``SDI``, attiva ``SRCLK`` per scorrere il bit e utilizza ``RCLK`` per bloccare i dati sull'uscita. .. code-block:: python def hc595_shift(data): # Scorrimento di 8 bit di dati nel 74HC595 for bit in range(8): # Imposta SDI su alto o basso in base al bit di dati SDI.value = 0x80 & (data << bit) # Attiva il clock del registro a scorrimento SRCLK.on() sleep(0.001) SRCLK.off() # Blocca i dati sull’uscita attivando il clock della memoria RCLK.on() sleep(0.001) RCLK.off() #. Questa funzione accende tutti i segmenti del display inviando un codice specifico a ``hc595_shift``. .. code-block:: python def display_all_on(): # Funzione per accendere tutti i segmenti (per display a 7 segmenti a catodo comune) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on") #. Nel ciclo principale, ogni codice in ``segCode`` viene inviato al display in sequenza, con una pausa tra ciascuno. .. code-block:: python try: while True: # Visualizza ciascuna cifra esadecimale sul display a 7 segmenti for code in segCode: hc595_shift(code) # Trasferisci il codice nel 74HC595 # Stampa il codice del segmento visualizzato print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pausa tra ogni cifra visualizzata #. Questa parte del codice gestisce l'interruzione dello script (come Ctrl+C) in modo sicuro. .. code-block:: python except KeyboardInterrupt: # Gestisce l'interruzione dello script (ad es. Ctrl+C) pass