Quote:di fatto lo spazio di memoria per le variabile se ne va perchè utilizzi 5 vettori grandi
Esatto
Quote:Possiamo , modificando un pelo l'algoritmo, utilizzarne di meno...cioè servono sempre in tutta la fase del codice? Estremizzando...ne possiamo fare a meno?
Come ho già scritto qualche post fa, ho provato a eliminare un vettore ma, facendolo, si presentano nuovi problemi legati al fatto che devo attendere (fino a 20 mS) che la ISR inizi ad utilizzare il nuovo vettore ricalcolato per poter effettuare un nuovo ricalcolo.
Quote:Modificando il codice in modo opportuno, potremmo farlo girare su qualsiasi arduino ( o anche su altri processori).
Che la maggior parte del codice sia applicabile anche ad altre piattaforme va bene, ma l'idea di spingere il codice al massimo per la compatibilità con altri micro non è che mi piaccia più di tanto... ma strada facendo vedremo cosa succede...
Quote:mettendo il valore di 256 (numero perfetto base 2).
Ehi, un momento, mica puoi cambiare il numero di campioni senza ricalcolare il valore della variabile SOGLIA ???
Ti ricordo che noi utilizziamo un solo Timer per generare la sinusoide che, se è formata da 256 campioni, sarà tagliata in 256 spicchi della durata di: 20 mS / 256 = 78,125 uS.
Quindi il nostro Timer 1 dovrà andare in Overflow, ovvero resettarsi, esattamente dopo 78,125 uS.
Come ? 78,125 uS / 62,5 nS = 1250 (1/16MHz = 62,5 nS)
Quindi per 256 Campioni il nuovo valore di SOGLIA sarà di 1.250
A questo punto dovremmo ridimensionare anche il valore picco massimo portandolo a:
700 : 1000 = x : 1250
x = 700 * 1250 / 1000 = 875
Ma c'è una importante considerazione da fare: aumentando il valore di SOGLIA a 1250, il periodo di ogni ciclo PWM sarà ora di 78,125 uS, questo vuol dire che il PWM lavorerà a una frequenza di:
1 / 78,125 uS = 12.800 Hz
che sembra essere troppo bassa e generare problemi con le dimensioni fisiche del filtro L-C oltre al fastidioso fischio a ~ 13 KHz.
Ci aggiorniamo, Eligio