Salve a tutti, ho bisogno di un parere tecnico per il collegamento di un display led (7 segmenti * 4 cifre) ed uno shift register (74HC595) ad Arduino.
Premetto che sono già riuscito a collegare display e shift register ad arduino ed il progetto è già stato testato e funzionante (sia hardware che software),
ora sto cercando di capire se una versione modificata dello schema iniziale produce lo stesso risultato o no,
quindi chiedo il parere di qualcuno che abbia una conoscenza sicuramente migliore della mia in elettronica per capire se è sbagliato o meno quello che dico
Il mio dubbio probabilmente è una questione veramente banale ma non sapendo come spiegarlo in poche parole e per evitare di essere frainteso cerco di essere il più chiaro possibile
Le caratteristiche dei componenti usati sono:
Arduino Uno Rev3
Classico display a led a 7 segmenti (cifre di colore biano)
- Anodo comune
- Tensione di pilotaggio: 1.9Vdc
- Massima corrente assorbita da ogni segmento: 20mA
- Massima corrente di picco (Duty-Cycle 1/10, 1KHz): 30mA
- Corrente in tensione inversa (Vr = 5V): 10 micro Ampere
- datasheet: http://www.sparkfun.com/datasheets/Components/LED/7-Segment/YSD-439AB4B-35.pdf
Shift register 74HC5959
- Tensione di pilotaggio: 5Vcc
- Massima frequenza di clock: 100MHz (in teoria mi sembra di aver capito che se alimentato a 5V dovrebbe essere più o meno la metà)
- Massima corrente emessa da ogni pin: +/-35mA
- Massima corrente assorbita da ogni pin: +/-20mA
- Massima corrente tra VCC e GND: +/-75mA
- datasheet: http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf
Lo schema del circuito è il seguente (chiedo scusa per l'immagine poco professionale ma è colpa della mia pigrizia nel non usare programmi tipo Eagle,Kicad,..)
Per visualizzare i numeri nel display uso la tecnica del multiplexing, in modo che in ogni istante solo 1segmento alla volta sia accesso
Per spiegarmi meglio cerco di fare un esempio concreto, per visualizzare un 1 sul display le azioni che compio sono:
-
per prima cosa imposto il display in modo che risulti spento, in questo modo:
[Digit 1 : Digit 4] cioè pin [8:11] di arduino tutti su LOW
Scrivo sullo shift tutti HIGH, cioè SHIFT [1 1 1 1 1 1 1 1]
In questo modo il display risulta spento perchè i diodi polarizzati inversamente non conducono, si comportano come una resistenza infinita fino ad un limite di soglia
e visto che da datasheet riporta che in tensione inversa conduce 10microAmpere dovrebbe essere tollerabile (correggetemi se sbaglio) -
poi inizio a ciclare per ogni cifra
per le prime tre cifre non devo visualizzare niente quindi non cambio nulla
poi arrivo all'ultima cifra (Digit 4) -
imposto Digit 4 (pin 8 di arduino) su HIGH
-
inizio a ciclare su ogni segmento della cifra
segmento A : spento (non faccio nulla)
segmento B : accesso
-> scrivo sullo shift [1 0 1 1 1 1 1 1], accendo il segmento B
in questo modo il diodo conduce perchè c'è differenza di potenziale tra Pin e GND e basta quella resistenza che si vede nel circuito (giusto?)
-> delay di qualche microsecondo per far vedere il segmento acceso
-> scrivo sullo shift [1 1 1 1 1 1 1 1], spengo tutti i segmenti
segmento C : accesso
-> scrivo sullo shift [1 1 0 1 1 1 1 1], accendo il segmento C
-> delay di qualche microsecondo per far vedere il segmento acceso
-> scrivo sullo shift [1 1 1 1 1 1 1 1], spengo tutti i segmenti
segmento D-E-F-G-DP : spento (non faccio nulla)
- imposto Digit 4 (pin 8 di arduino) su LOW
La prima versione del progetto includeva una resistenza per ogni cifra, ma secondo i miei calcoli con un multiplexing di questo tipo ne basta una sola,
una soluzione di questo tipo è corretta?
Quale formula devo utilizzare per capire qual'è il refresh rate (Hz) di una soluzione di questo tipo?
cioè se visualizzo il numero 8888 ogni segmento per quanto dovrebbe rimanere attivo per poter essere visible ad occhio nudo con una luminosità accettabile?