RGB LED Controller

  • peppers
  • Visitatori
  • Visitatori
12 Anni 5 Mesi 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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Matteo Garia
  • Moderatore
  • Moderatore
Di più
12 Anni 5 Mesi fa #7 da Matteo Garia
Risposta da Matteo Garia al topic Re: RGB LED Controller
Ciao Peppers,
Premetto che non sono espertissimo in programmazione.

Essendo il PWM gestito sull'interrupt di TIMER0, ho dovuto impostare tale interrupt in un tempo molto breve (0.05ms), pertanto, non ho materialmente il tempo di eseguire funzioni esterne nel poco tempo disponibile, mentre le direttive #define non richiedono salti.
Altra ragione è la maggiore leggibilità del codice, se fai caso molti define li uso una volta sola, per esempio:
Code:
//Conferma validità comando #define SendACK printf ("ACK\n\r") #define SendNACK printf ("NACK\n\r")
... mi piace di più che scrivere il codice per esteso :)

Ho in progetto di provare a spostare la gestione del PWM su un altro timer, sia per poterne alzare la frequenza sia per poter gestire più comodamente le funzioni nel main.

Matteo

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • peppers
  • Visitatori
  • Visitatori
12 Anni 5 Mesi 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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Matteo Garia
  • Moderatore
  • Moderatore
Di più
12 Anni 4 Mesi 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
Allegati:

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • StefA
  • Moderatore
  • Moderatore
Di più
12 Anni 4 Mesi fa - 12 Anni 4 Mesi fa #10 da StefA
Risposta da StefA al topic Re: RGB LED Controller
rinnovo i miei complimenti...anzi....complimenti 2.0! :)

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Ultima Modifica 12 Anni 4 Mesi fa da StefA.

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaMatteo Gariadoc83

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi