Home Forum MICROCONTROLLORI progetto semplice ma approfondito: LED RGB

Questo argomento contiene 7 risposte, ha 2 partecipanti, ed è stato aggiornato da  rey 1 anno, 3 mesi fa.

Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
  • Autore
    Articoli
  • #59889

    rey
    Membro

    Buongiorno a tutti, mi sono reso conto di non essermi nemmeno presentato! ebbene mi chiamo enrico e studio ingegneria meccatronica (sto finendo il triennio)!
    arriviamo al dunque:
    come tesi di laurea sto realizzando un sistema di controllo per strisce di led rgb, della dimensione di un metro ogniuna, disposte parallele; ..e a moduli (se ne possono aggiungere a blocchi di 4 strisce) capaci di realizzare giochi di luce e colori dinamici, immaginate ad esempio che queste strisce si illumino sequenzialmente e facciano quindi un arcobaleno in transito, o la funzione strobo, o random…
    per ora quello che ho fatto è arduino che legge il valore da potenziomentri e pilota dei bjt in pwm per modulare la componente di R, G, B, Intensità; insomma facile facile.
    Lo step successivo sarebbe prendere un mux, e implementare la parte di programma che dice quale striscia si accende in quell’istante… e un altro potenziometro per decidere la velocità di selezione.
    per coronare bisognerebbe sviluppare numerose funzioni (a livello software) per fare ad esempio l’effetto scia, la dinamicità dei colori e chi più ne ha più ne metta!
    ma questo tutto sommato non mi spaventa.
    in secondo luogo vorrei far fare tutto questo ad un controllore, programmandolo in VHDL con ISE.
    poi valutare le varie soluzioni per il controllo remoto, e infine confrontare le prestazioni dei due metodi, con simulazione intensiva, riportare ad esempio il numero totale di errori, ritardi di propagazione, non idealità varie, consumi…

    detto ciò, ho un paio di domande da proporre a questa vivace community…;)
    non ho mai avuto a che fare con un controllore che non fosse quello di arduino, immagino che per la scelta del modello si debbano valutare cose come il numero di bit, la velocità, il numero dei registri.. booh!
    io credo che 256 livelli siano buona cosa, magari ci sono dei fattori che mi sfuggono… il controllore ovviamente sarà uno solo e gestirà le eventuali infinite strisce (siccome sono a moduli) ovviamente un mux per ogni modulo.
    la velocità penso non sia qualcosa di limitante dato che il solo limite è quel 20/25Hz dell’occhio umano, difficilmente raggiungibile anche complicando di molto i giochi di luce.
    riguardo alle memorie del controllore… ripeto, non me ne intendo affatto, non ho idea di quanto grande sia il programma una volta finito, sicuramente qualcuno di voi, a occhio, è in grado di darmi qualche dritta per indirizzarmi non dico verso un modello, ma una serie di caratteristiche da farmi stringere il cerchio!!

    un altra cosa, mi sono imbattuto nel discorso driver per led, ho capito che servono a garantire corrente costante… a che scopo? capisco nel caso di una torcia a pile, dove il potenziale cala quando si scarica e con un driver riusciremo a garantire il led acceso fino agli sgoccioli.. ma non ho capito a cosa serve nel caso di rete elettrica.. se per esempio avessi come alimentatore un atx potrei riscontrare problemi che ignoro? pensavo di irrobustirlo con dei condensatori..

    credo di aver buttato troppa carne al fuoco..
    e come se non bastasse arduino ha deciso di abbandonarmi!
    datemi la vostra impressione!!
    Grazie

    #73844

    illupo89
    Partecipante

    ciao partiamo per gradi:
    1) I controllori non si programmano con il VHDL, quest’ultimo è un linguaggio di descrizione hardware e non software quindi serve per programmare dispositivi come FPGA.
    2)ti consiglio di valutare gli aspetti critici del progetto per scegliere il controllore opportuno. In particolare tu parli di memoria e prestazioni che sono aspetti importanti ma non per applicazioni di questo tipo, dove la complessità e il numero delle funzioni è limitato. Per la mia esperienza in tali applicazioni l’aspetto critico sono il numero di pin di cui hai bisogno.
    3)I led si pilotano in corrente (corrente costante) per regolare in maniera precisa la luminosità. Questo è conseguenza diretta della caratteristica tensione-corrente del diodo, come saprai essa è esponenziale, quindi, con piccole variazioni di tensione si ha una grande variazione di corrente e di conseguenza di luminosità.

    #73845

    illupo89
    Partecipante

    rileggendo inoltre il post mi ha colpito la frase:
    “immagino che per la scelta del modello si debbano valutare cose come il numero di bit, la velocità, il numero dei registri.. booh!
    io credo che 256 livelli siano buona cosa, magari ci sono dei fattori che mi sfuggono…”
    da cui ho intuito un po di confusione sull’argomento controllori.
    Innanzitutto un controllore è formato da una CPU (l’unità di calcolo) caratterizzata dall’architettura (fattore che in prima analisi può essere trascurato), dal numero di bit e dalla velocità (frequenza di CLK).
    Questi aspetti influenzano la potenza e la velocità di calcolo del controllore.
    Oltre alla CPU il controllore ha una serie di periferiche che svolgono tutti i compiti “non di calcolo” ad esempio ADC (convertitore analogico digitale) che tu usi nel progetto e sul quale secondo me hai dei dubbi.
    In particolare il numero di bit dell’ADC (che definisce i 256 livelli della frase sopra citata) è una proprietà della periferica che non è legata a nessun altro parametro del controllore. Ad esempio, puoi avere una CPU a 16 bit e un ADC da 32 bit o viceversa.

    #73848

    rey
    Membro

    ok, senz’altro mi sei stato molto d’aiuto! permettimi di porti qualche ulteriore delucidazione:

    1) leviamoci questo dubbio del driver: la transcaratteristica del diodo varia di suo per cui l’unico modo per garantire luminosità costante è CORRENTE costante, e non TENSIONE costante (che l’alimentatore di per se potrebbe anche garantire)..
    ora, considerando che queste strisce di cui parlo sono realizzate da 10 paralleli di 3(led + resistenze) in serie ciascuno, ha ancora senso parlare di iniettare corrente costante anzichè potenziale costante? insomma è comunque necessario avere un driver ad accendermi la striscia?! o è necessario in altri casi?
    2) siccome vhdl non è la strada, perchè giustamente descrive un hardware, e non una serie di operazioni (che sciocco che sono), suppongo che il linguaggio da usare sia assembly e di conseguenza anche per esempio C tradotto in assembly… sbaglio? ora… dato che non ho avuto modo di capire come si programma un controllore, e non l’ho nemmeno scelto, non so cosa vada prima o dopo!)
    3) riguardo alla scelta del controllore, sì, fondamentale il numero di pin: a me ne servono 3 per le pwm, e diciamo un massimo di 5 pin (bit) che decidono quale striscia è accesa in quell’istante, ed andranno ad i relativi mux, magari anche altri 2 pin per il tutto acceso e tutto spento.. totale 10! ignoro completamente, oltre a quelli ovvi dell’alimentazione, quali altri pin un controllore debba avere, siccome ripeto: non ho idea di come si programmi.

    quindi cosa viene prima, devo andare in cerca di una guida sulla programmazione dei controllori? o ne trovo uno e poi capisco cosa serve per programmarlo? (mi viene in mente ad esempio che sarà necessario avere un bootloader, ma se i piedini cambiano cambierà anche bootloader?? portate pazienza perchè nella vita non ho avuto modo di mettere le mani in pasta purtroppo, non ancora!
    e magari nascosto da qualche parte in questo sito c’è proprio un articolo che parla di questo! (forse platinum?)

    #73849

    rey
    Membro

    dimenticavo il/i pin per l’input, altro argomento che non conosco e con cui mi scontrerò tra poco

    #73850

    illupo89
    Partecipante

    ciao rispondo alle tue domande:
    1)no nel tuo caso penso proprio non abbia senso parlare di driver in corrente, il mio discorso era generale sui driver dei led e rispondeva alla tua perplessità del perché servisse.
    2)I controllori vengono programmati tramite appositi programmatori forniti dall’azienda che li produce, inoltre essa fornisce anche l’ambiente di sviluppo su cui scrivere il software.
    Per il linguaggio di programmazione i micro vengono di solito programmati in C, tramite l’ambiente di sviluppo il codice C viene sintetizzato in linguaggio macchina e poi caricato sul controllore tramite l’apposito programmatore.
    Il bootloader non è necessario a differenza di arduino, perché il controllore esegue solamente le funzioni da te descritte.
    Quanto detto lascia intuire che è importante la scelta dell’azienda produttrice più che il micro stesso, di conseguenza ti invito a dare un’occhiata alle azienda come atmel e pic.
    Per il resto ti rispondo dopo perché vado un po di fretta :-p .

    #73853

    illupo89
    Partecipante

    ciao per il link ti consiglio il “Corso di microprogrammazione” che sta tenendo Piero Boccadoro per trovarlo vai in fondo alla pagina ed esegui la ricerca personalizzata del sito tramite google (è in alto a destra della banda nera) li è spiegato il mondo dei microcontrollori in maniera egregia (come sempre ha l’autore) in particolare ti consiglio di leggere l’ultimo articolo “Corso di microprogrammazione: il primo microcontrollore” che risponde proprio ai tuoi dubbi.

    Inoltre per rispondere al tuo terzo punto ti consiglio di schematizzare il progetto ed individuare le caratteristiche minime che deve avere il controllore. Ad esempio come più o meno hai fatto per il n° di pin e tipo ma anche per le periferiche ADC (per acquisite il valore dell’input analogico),timer (il pwm si genera a partire da un timer il che è nascosto nella programmazione di arduino)…

    #73855

    rey
    Membro

    Grazie mille, ora ho del materiale da masticare!!! e non avevo pensato all’idea di buttar giù un disegno, direi che è un consiglio assai saggio!

Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.