Premetto che non sono pratico di forum, ma so che mi devo presentare... se mi girate il link lo faccio al più presto.
Vi scrivo per risolvere un problema che sul web non riesco a trovare.
Stiamo portando avanti un progetto per realizzare un tabellone formato da 4 display a 7 segmenti, gestiti da un arduino UNO.
Sul software non ci sono problemi e con i classici display piccoli funziona perfettamente, purtroppo i display che stiamo utilizzando sono alti 15cm e sono alimentati a 12v anodo comune.
Il sistema deve funzionare in multiplexing, accendendo i display uno alla volta e switchando i numeri da un display all'altro.
Abbiamo provato con dei transistor npn comandati da arduino, per i segmenti non ci sono problemi, ma per il multiplexing dei display trovo problemi, non si accendono!
Avete consigli?
Potrebbe essere un problema di polarizzazione?
Un problema di eccessiva velocità tra tra 0 e 5v sulla base del transistor?
Su internet non ho trovato nessun progetto simile, quindi una mano è ben gradita
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: E fai molta attenzione al regolamento, perché, in conformità al punto 13, il cross-posting è proibito (anche tra lingue diverse) !
gpb01:
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: E fai molta attenzione al regolamento, perché, in conformità al punto 13, il cross-posting è proibito (anche tra lingue diverse) !
Grazie Guglielmo per i link!
mi sono presentato e ho letto il regolamento( spero che la presentazione vada bene).
Vi allego altra documentazione che magari può servire:
#include "SetteSegmenti.h"
SetteSegmenti Displays;
unsigned int Start = 0; //salva il valore di partenza
unsigned int Stop = 0; //salva il valove di arrivo
int pinStart = 0; //nomina il pin di Start
int pinStop = 2; //nomina il pin Stop
int Spazio = 10; //imposta lo spazio del percorso
boolean StatoStart; //salva lo stato del pinStart
boolean StatoStop; //salva lo stato del pinStop
void setup() {
Serial.begin(9600); //inizializza seriale
Serial.println("Setup..."); //debug
Displays.SetPinDisplay(7, 8, 9, 10, 11, 12, 13); //imposta i pin dei segmenti
Displays.SetPinComuni(3, 4, 5, 6); //imposta i pin dei comuni
pinMode(pinStart, INPUT); //impostano i pin di
pinMode(pinStop, INPUT); //Start e Stopo a INPUT
}
void loop() {
StatoStart = digitalRead(pinStart); //leggono ad ogni ciclo lo stato
StatoStop = digitalRead(pinStop); //lo stato dei pin Start e Stop
if (StatoStart == HIGH && Start == 0) { //se rispetta le condizioni salva il
Start = millis(); //valore di Start e manda a 0 i display
Serial.println(Start);
Displays.Zero(); //Imposta i valori da visualizzare a zero
}
if (StatoStop == HIGH && Start != 0) { //se rispetta le condizioni
Stop = millis(); //salva il valore di Stop,
Serial.println(Stop); //calcola Tempo e Velocità e
Displays.CalcolaTempoVelocita(Start, Stop, Spazio); //reimposta Start a 0
//Serial.println(Risultato);
Serial.println(Displays.tempo); //Debug
Serial.println(Displays.velocita);
Start = 0;
}
Displays.SwitchNumero (); //Switcha tempo e velocità sui display
Displays.Multiplexing(); //Switcha i display per accenderli una alla volta
}
Se sono ad anodo comune, allora per multiplexare le cifre, ti servono o dei mosfet canale P (pilotati da normali transistor in open-collector), o dei driver che gia contengano il tutto, come ad esempio UDN2987 o simili (che sono l'equivalente degli ULN2803, che puoi usare per pilotare i segmenti) ... attenzione solo alle correnti, ogni uscita puo dare, credo, massimo 500mA, ma meglio rimanere sui 300/350 mA ... se le cifre sono solo 4, puoi mettere due canali in parallelo per ogni cifra, tanto per stare sicuro ... tanto hanno 8 canali per integrato ...
Zef terremo in considerazione i driver che ci hai indicato per la loro praticità, alzano un po le spese, ma effettivamente realizzeremmo qualcosa di più professionale.
Etemenanki tra i due integrati che hai mensionato ho notato una differenza di prezzo, ULN2803 costa meno e se va bene lo stesso userei quello!
stando all'immagine sopra dovrei collegare le uscite di arduino ai pin 1B-8B ( che presumo stia per base),
e gli anodi dei display ai pin 1C-8C ( presumo collettore).
I display sono solo 4 quindi per il consumo al massimo mettiamo in parallelo le uscite come dicevi.
MegaD:
...
Etemenanki tra i due integrati che hai mensionato ho notato una differenza di prezzo, ULN2803 costa meno e se va bene lo stesso userei quello!
...
Ehm ... andrebbero usati entrambi, veramente ... l'ULN2803 pilota i catodi collegandoli verso massa (quindi pilota i segmenti durante il multiplexing), mentre l'UDN2987 pilota gli anodi (quindi le cifre) collegandole al +12V ...
Etemenanki:
Ehm ... andrebbero usati entrambi, veramente ... l'ULN2803 pilota i catodi collegandoli verso massa (quindi pilota i segmenti durante il multiplexing), mentre l'UDN2987 pilota gli anodi (quindi le cifre) collegandole al +12V ...
Non ho letto bene le specifiche
I transistor che abbiamo usato sembrano non aver problemi con a pilotare i segmenti, quindi in teoria dovrebbe servirmi solo quello per gli anodi.
Vi aggiorno come faccio progressi e approfitto per augurare a tutti buon natale!!
a me sembra più un problema software oltre al fatto che non collegherei mai dei diodi direttamente ad una alimentazione senza una resistenza che mandi la corrente giusta,
multiplexare 4 cifre con la uno si può fare ma il micro deve fare quasi solo quello e pochissime altre cose
e sicuramente non può fare dei serial print o mettere dei delay più lunghi di 6 millisecondi,
questo e solo per il semplice multiplex.
Poi se vuoi cose tipo che se "visualizzi 1" vuoi che le le altre 3 cifre siano spente
oppure se devi visualizzare un numero negativo e la barretta si sposti a dovere,
oppure se devi visualizzare un numero decimale e il punto decimale si sposti a dovere,
elrospo:
a me sembra più un problema software oltre al fatto che non collegherei mai dei diodi direttamente ad una alimentazione senza una resistenza che mandi la corrente giusta
Posso dirti che con i display piccoli funziona bene e per questo pensavo ad un problema hardware.
Vi allego la libreria che ho scritto così se qualcuno vuole cimentarsi a leggerla e darmi consigli per migliorarla sono sempre ben accetti ( premetto che tutto quello che so lato software l'ho imparato da autodidatta e che questa è la prima libreria che scrivo, quindi sarei felice di imparare da gente che ne sa più di me).
Le resistenze non sono sullo schema per praticità, ovviamente nel circuito reale andranno messe dove servono.
elrospo:
Poi se vuoi cose tipo che se "visualizzi 1" vuoi che le le altre 3 cifre siano spente
oppure se devi visualizzare un numero negativo e la barretta si sposti a dovere,
oppure se devi visualizzare un numero decimale e il punto decimale si sposti a dovere,
ti devi armare di un sacco di pazienza
nulla di tutto questo, i display sono sempre accesi e il punto è fisso sul terzo display.
quindi per visualizzare il valore 1, come dicevi, verrà visualizzato 01.00
elrospo:
multiplexare 4 cifre con la uno si può fare ma il micro deve fare quasi solo quello e pochissime altre cose
e sicuramente non può fare dei serial print o mettere dei delay più lunghi di 6 millisecondi,
questo e solo per il semplice multiplex.
Infatti un altro nostro dubbio era sul fatto di utilizzare un solo arduinoUNO oppure trovare soluzioni alternative :
-usare un arduino solo per multiplexare e un altro per fare tutti i calcoli e gestire gli input, poi far comunicare i due tramire seriale solo per trasferire il dato da visualizzare
usare un arduino Mega ( o altro consigliato da voi)
la cosa "piu corretta" che consiglio a tutti e sempre quella di NON far fare ad arduino da "driver grafico"
per questo ci sono i chip dedicati tipo max 7219,
il 7219 fa tutto lui con un comando setti la luminosità' lo metti in stanby etc.. occupi solo 3 pin e arduino e sempre libero per fare tutto lo sketch in "tranquillità",
qui c'è in problema (che qualcuno ha gia avuto e risolto) dei display grandi che vogliono piu tensione/corrente e devi cercare un modo di interfacciare il max 7219 a i display ,
dal lato software il forum ha già pubblicato molto, basta solo cercare
Si ... ma per pilotarci i finali deve prima usare degli inverter o tenerne conto nello sketch, perche' 7219 e 7221 sono per display con catodo comune, mentre lui usa display ad anodo comune ...
Faccio una domanda stupida:
Se ho capito bene i display piccoli riusciva a comandarli senza problemi. Se così fosse non si potrebbe semplicemente usare lo stesso codice modificando soltanto il lato hw. Nella fattispecie credo basti aggiungere un re esterno a tensione sufficiente e dei relè comandati da Arduino come fossero i segmenti dei display. A ciascun relè collegare un ramo di alimentazione (su bb non dovrebbe essere difficile) e il segmento di display corrispondente a quello che Arduino crede di comandare. Quale é il baco in questo pensiero?
soggetto:
Faccio una domanda stupida:
Se ho capito bene i display piccoli riusciva a comandarli senza problemi. Se così fosse non si potrebbe semplicemente usare lo stesso codice modificando soltanto il lato hw. Nella fattispecie credo basti aggiungere un re esterno a tensione sufficiente e dei relè comandati da Arduino come fossero i segmenti dei display. A ciascun relè collegare un ramo di alimentazione (su bb non dovrebbe essere difficile) e il segmento di display corrispondente a quello che Arduino crede di comandare. Quale é il baco in questo pensiero?
Multiplexando nessun comune e nessun segmento è mai "fermo"... non penso che i relè possano reggere velocità di questo tipo, e anche fosse non durerebbero molto
soggetto:
Faccio una domanda stupida:
Se ho capito bene i display piccoli riusciva a comandarli senza problemi. Se così fosse non si potrebbe semplicemente usare lo stesso codice modificando soltanto il lato hw. Nella fattispecie credo basti aggiungere un re esterno a tensione sufficiente e dei relè comandati da Arduino come fossero i segmenti dei display. A ciascun relè collegare un ramo di alimentazione (su bb non dovrebbe essere difficile) e il segmento di display corrispondente a quello che Arduino crede di comandare. Quale é il baco in questo pensiero?
questa è una soluzione fattibile se il chip che pilota non c'è la fa ad erogare sufficiente corrente/tensione
si può usare un rele/transistor/FET adeguato,
anche i rele possono essere usati es con un arduino mega che ha molte uscite
(senza multiplex ovviamente) sopratutto se le cifre sono poche e veramente giganti
alcuni adoperavano questo sistema e al posto dei segmenti mettevano i tubi al neon
no, niente rele', a meno che non vuoi costruire un'enorme cicalino ...
la minima frequenza di aggiornamento che 'occhio considera "continuita' di illuminazione" e' sui 50Hz ... quindi 20mS, ma essendo 4 display, un quarto, quindi per evitare, o comunque ridurre, gli "sfarfallii", serve comutare gli stati almeno ogni 5mS ... con i rele', ammesso di trovarne modelli in grado di funzionare a quelle frequenze, avresti un tale casino da disturbare qualsiasi posto, salvo forse uno stadio di calcio durante una partita ...
Etemenanki:
no, niente rele', a meno che non vuoi costruire un'enorme cicalino ...
la minima frequenza di aggiornamento che 'occhio considera "continuita' di illuminazione" e' sui 50Hz ... quindi 20mS, ma essendo 4 display, un quarto, quindi per evitare, o comunque ridurre, gli "sfarfallii", serve comutare gli stati almeno ogni 5mS ... con i rele', ammesso di trovarne modelli in grado di funzionare a quelle frequenze, avresti un tale casino da disturbare qualsiasi posto, salvo forse uno stadio di calcio durante una partita ...
forse non ci siamo capiti ...... se ho abbastanza pin e un po di conoscenza di programmazione il multiplex SI EVITA,
e significa che ogni segmento rimane come un normalissimo led sempre accesso