- Messaggi: 376
- Ringraziamenti ricevuti 38
RGB LED Controller
12 Anni 1 Mese fa #6
da peppers
Risposta da peppers al topic Re: RGB LED Controller
Ciao Matteo,
grazie per aver condiviso il tuo lavoro!
Ho dato una occhiata ai sorgenti e ho notato che hai fatto un uso abbodante delle direttive #define, anzichè di chiamate a funzione...
Ti chiedevo se alla base di questa scelta c'è una logica precisa... o semplicemente è un tuo stile di programmazione...
Hai avuto problemi stack overflow?
Di solito quando non ho problemi di stack e ho problemi di spazio su flash ricorro a funzioni per ottimizzare il codice ridondante, mentre quando lo stack alza bandiera bianca (specialmente con i pic16), uso le direttive #define per non utilizzarlo, ma con conseguente e inevitabile aumento della lunghezza del codice.
Grazie
Pier
grazie per aver condiviso il tuo lavoro!
Ho dato una occhiata ai sorgenti e ho notato che hai fatto un uso abbodante delle direttive #define, anzichè di chiamate a funzione...
Ti chiedevo se alla base di questa scelta c'è una logica precisa... o semplicemente è un tuo stile di programmazione...
Hai avuto problemi stack overflow?
Di solito quando non ho problemi di stack e ho problemi di spazio su flash ricorro a funzioni per ottimizzare il codice ridondante, mentre quando lo stack alza bandiera bianca (specialmente con i pic16), uso le direttive #define per non utilizzarlo, ma con conseguente e inevitabile aumento della lunghezza del codice.
Grazie
Pier
Si prega Accedi o Crea un account a partecipare alla conversazione.
- peppers
- Visitatori
12 Anni 1 Mese fa #7
da Matteo Garia
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Risposta da Matteo Garia al topic Re: RGB LED Controller
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Matteo Garia
- Moderator
Riduci
Di più
12 Anni 1 Mese fa #8
da peppers
Risposta da peppers al topic Re: RGB LED Controller
Ok, grazie della risposta... il tuo stile è sicuramente interessante...
Ma perchè cambiando timer otterresti un beneficio?
Dal datasheet vedo che il 16f88 ha 3 timer, 2 a 8bit e 1 a 16bit... ma la sostanza non cambia..
Forse dovresti spostare la funzione SoftwarePwm nella routine di interrrupt, per ottimizzare un pò il main...
Tempo fa feci una lampada con 4 led da 3w (rgb+bianco) comandata con telecomando infrarossi con codifica rc5... il main per la maggior parte del tempo faceva ben poco, aspettava che RB0 diventasse basso per eseguire la routine di decodifica RC5 (senza interrupt) e aggiornava un lcd 20x4 che visualizzava i nuovi valori di pwm..
La funzione di decodifica RC5 veniva "sfettellata" (interrotta) nel main da quella di interrupt, quindi non bisognava interromperla troppo spesso altrimenti non decodificava correttamente, forse ottimizzandola un pò di + si sarebbero uttenuti risultati migliori..
Poi una funzione simile a SoftwarePwm era gestita nell'interrupt generato dal tmr0, e si ottenevano con un quarzo da 20mhz delle frequenze di commutazione discrete, comunque sotto il khz.
Il problema è che fintanto la risoluzione del pwm era a 7bit (128 step) lo sfarfallio non era visibile ma a 8 bit con la coda dell'occhio lo si percepiva, sintomo della fatidica soglia dei 100hz, o dintorni...
Ricordo anche che tutto il progetto, per la parte di pwm software, era basato su AN1074 Microchip.. qui addirittura viene presentata una risoluzione pwm a 5 bit (32step...), il fading tra i vari colori risultano molto sgranati specialmente a basse luminosità...
Appena ho un attimo faccio una simulazione per vedere la tua frequenza pwm...
Adesso vado a studiarmi un pò il tuo firmware...!
Saluti
Pier
Ma perchè cambiando timer otterresti un beneficio?
Dal datasheet vedo che il 16f88 ha 3 timer, 2 a 8bit e 1 a 16bit... ma la sostanza non cambia..
Forse dovresti spostare la funzione SoftwarePwm nella routine di interrrupt, per ottimizzare un pò il main...
Tempo fa feci una lampada con 4 led da 3w (rgb+bianco) comandata con telecomando infrarossi con codifica rc5... il main per la maggior parte del tempo faceva ben poco, aspettava che RB0 diventasse basso per eseguire la routine di decodifica RC5 (senza interrupt) e aggiornava un lcd 20x4 che visualizzava i nuovi valori di pwm..
La funzione di decodifica RC5 veniva "sfettellata" (interrotta) nel main da quella di interrupt, quindi non bisognava interromperla troppo spesso altrimenti non decodificava correttamente, forse ottimizzandola un pò di + si sarebbero uttenuti risultati migliori..
Poi una funzione simile a SoftwarePwm era gestita nell'interrupt generato dal tmr0, e si ottenevano con un quarzo da 20mhz delle frequenze di commutazione discrete, comunque sotto il khz.
Il problema è che fintanto la risoluzione del pwm era a 7bit (128 step) lo sfarfallio non era visibile ma a 8 bit con la coda dell'occhio lo si percepiva, sintomo della fatidica soglia dei 100hz, o dintorni...
Ricordo anche che tutto il progetto, per la parte di pwm software, era basato su AN1074 Microchip.. qui addirittura viene presentata una risoluzione pwm a 5 bit (32step...), il fading tra i vari colori risultano molto sgranati specialmente a basse luminosità...
Appena ho un attimo faccio una simulazione per vedere la tua frequenza pwm...
Adesso vado a studiarmi un pò il tuo firmware...!
Saluti
Pier
Si prega Accedi o Crea un account a partecipare alla conversazione.
- peppers
- Visitatori
12 Anni 1 Mese fa #9
da Matteo Garia
Risposta da Matteo Garia al topic Re: RGB LED Controller
Buongiorno a tutti,
pubblico la versione 2.0 del firmware del led controller, consiglio a chi volesse realizzare il progetto di basarsi su questa e non più sulla 1.1, molte cose sono cambiate (per questo il salto di versione da 1.1 diretto a 2.0 )
Dal punto di vista del funzionamento finale è identico a prima, non sono state nè aggiunte nè rimosse funzioni.
Dal punto di vista interno, invece, le novità sono:
- PWM gestito interamente sotto interrupt, frequenza doppia rispetto a prima: ciò evita lo sfarfallio a bassa luminosità, problema che affliggeva la versione precedente. La gestione sotto interrupt risolve inoltre i problemi di tempistica della versione precedente.
- il potenziometro viene ora letto calcolando la media di 8 valori in un buffer circolare.
- la funzione "Soft RGB" è stata migliorata.
- la funzione "Rainbow RGB" è stata corretta, prima il funzionamento automatico aveva un salto tra il colore iniziale e quello finale.
Il codice è parecchio cambiato in alcuni punti (anche se alcune modifiche sono state costituite dal semplice spostamento di parti di esso).
I colori ora sono memorizzati in un'apposita struttura, ciò ne rende più comoda la gestione (per esempio le funzioni degli effetti ora restituiscono direttamente un "color")
Il set di comandi è rimasto invariato
bug noti: in modalità pc mode (quindi con la barra AUX controllata localmente) quest'ultima sfarfalla in alcune situazioni.
Probabilmente realizzerò in futuro anche qualche aggiornamento minore, ma per ora va bene così.
Tra i mille progetti spero di riuscire a modificare il software lato pc
Mauro, puoi gentilmente inserirlo nella pagina del progetto?
Saluti
Matteo
pubblico la versione 2.0 del firmware del led controller, consiglio a chi volesse realizzare il progetto di basarsi su questa e non più sulla 1.1, molte cose sono cambiate (per questo il salto di versione da 1.1 diretto a 2.0 )
Dal punto di vista del funzionamento finale è identico a prima, non sono state nè aggiunte nè rimosse funzioni.
Dal punto di vista interno, invece, le novità sono:
- PWM gestito interamente sotto interrupt, frequenza doppia rispetto a prima: ciò evita lo sfarfallio a bassa luminosità, problema che affliggeva la versione precedente. La gestione sotto interrupt risolve inoltre i problemi di tempistica della versione precedente.
- il potenziometro viene ora letto calcolando la media di 8 valori in un buffer circolare.
- la funzione "Soft RGB" è stata migliorata.
- la funzione "Rainbow RGB" è stata corretta, prima il funzionamento automatico aveva un salto tra il colore iniziale e quello finale.
Il codice è parecchio cambiato in alcuni punti (anche se alcune modifiche sono state costituite dal semplice spostamento di parti di esso).
I colori ora sono memorizzati in un'apposita struttura, ciò ne rende più comoda la gestione (per esempio le funzioni degli effetti ora restituiscono direttamente un "color")
Il set di comandi è rimasto invariato
bug noti: in modalità pc mode (quindi con la barra AUX controllata localmente) quest'ultima sfarfalla in alcune situazioni.
Probabilmente realizzerò in futuro anche qualche aggiornamento minore, ma per ora va bene così.
Tra i mille progetti spero di riuscire a modificare il software lato pc
Mauro, puoi gentilmente inserirlo nella pagina del progetto?
Saluti
Matteo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Matteo Garia
- Moderator
Riduci
Di più
- Messaggi: 376
- Ringraziamenti ricevuti 38
12 Anni 1 Mese fa - 12 Anni 1 Mese fa #10
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Re: RGB LED Controller
rinnovo i miei complimenti...anzi....complimenti 2.0!
Ste
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Ultima Modifica 12 Anni 1 Mese fa da StefA.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
Moderatori: Mauro Laurenti, Pinna, Matteo Garia, doc83
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024