Il ragionamento mi sembra corretto.
Fai solo attenzione che la tabella regola il ritardo in funzione della luminosità.
Se tu richiami il primo valore significa che vuoi la luminosità minima e quindi la tabella imposta il ritardo massimo.
Se guardi la tabella vedrai infatti che:
DelayCorrection[0] è uguale a 255
Cioè la tabella dice: vuoi la luminosità minima? metti il ritardo massimo.
Sei coerente con la tabella?
Pietro
Dimmer per lampada con PIC
Moderatori:
carloc,
g.schgor,
BrunoValente,
IsidoroKZ
0
voti
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
0
voti
Sei coerente con la tabella?
E' inversa, posso risolvere in questo modo:
- Codice: Seleziona tutto
incremento=(255-incremento);
0
voti
Mi sembra arzigogolato.
Tu hai una variabile che decide la luminosità (per esempio letta da un potenziometro sull'ADC).
Quella variabile va da 0 a 255 e rappresenta la luminosità.
Quella variabile la dai alla tabella e lei ti restituisce il ritardo, sempre tra 0 e 255.
Mi sembra più lineare.
PS:
Conosci l'operatore -=?
equivale a
poi c'è anche += /= *= ecc..
Tu hai una variabile che decide la luminosità (per esempio letta da un potenziometro sull'ADC).
Quella variabile va da 0 a 255 e rappresenta la luminosità.
Quella variabile la dai alla tabella e lei ti restituisce il ritardo, sempre tra 0 e 255.
Mi sembra più lineare.
PS:
Conosci l'operatore -=?
- Codice: Seleziona tutto
a-=2;
equivale a
- Codice: Seleziona tutto
a=a-2;
poi c'è anche += /= *= ecc..
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
1
voti
Tu hai una variabile che decide la luminosità (per esempio letta da un potenziometro sull'ADC).
Quella variabile va da 0 a 255 e rappresenta la luminosità.
Quella variabile la dai alla tabella e lei ti restituisce il ritardo, sempre tra 0 e 255.
Mi sembra più lineare
Conosci l'operatore -=?
Non lo conoscevo, è ora che riprenda in mano il manuale di programmazione in c.
Questa sera provo a caricare il software e vediamo il risultato.
0
voti
Ieri sera ho provato a implementare la tua tabella e sembra funzionare, l'unica cosa che mi lascia perplesso è la variabile "incremento", se la creo come
la variabile si decrementa o incrementa normalmente,
mentre se la creo come
la variabile non cambia mai il valore.
Comunque devo fare ancora delle prove per testare il tutto la 100%.
Grazie per l'aiuto
Marcello
- Codice: Seleziona tutto
unsigned int incremento=255;
la variabile si decrementa o incrementa normalmente,
mentre se la creo come
- Codice: Seleziona tutto
unsigned char incremento=255;
la variabile non cambia mai il valore.
Comunque devo fare ancora delle prove per testare il tutto la 100%.
Grazie per l'aiuto
Marcello
3
voti
Mostra la parte di codice dove c'è la dichiarazione e l'uso di "incremento"
Ciao.
Paolo.
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
1
voti
Mostra la parte di codice dove c'è la dichiarazione e l'uso di "incremento"
- Codice: Seleziona tutto
unsigned int incremento=150;
if(!timer_delay) //RITARDO PER L'ACCENSIONE DEL TRIAC
{
trigger=0;
timer_delay=DelayCorrection[incremento];
GATE=1;
}
if(!timer_delay_2) //TEMPO PER PASSARE DAL MINIMO AL MASSIMO
{
if(inversione==0)
incremento=incremento--;
if(inversione==1)
incremento=incremento++;
timer_delay_2=(valore_medio*3); // timer_delay_2=1000 equivale a 30 secondi
}
Noto che la variabile non cambia mai il suo valore perche la luminosità della lampada rimane costante a 150.
Ho provato a escludere la tabella "DelayCorrection[]" suggerita da Pietro ma il risultato non cambia.
- Codice: Seleziona tutto
timer_delay=incremento;
Ho dovuto rimanppare la memoria RAM del PIC per riuscire a dichiarare la tabella
- Codice: Seleziona tutto
const unsigned char DelayCorrection[]=255,199,191,185,181,177,174,171,169,166,164,162,161,159,157,156,154,153,151,150,149,148,146,145,144,143,142,141,140,139,138,137,136,135,135,134,133,132,131,130,130,129,128,127,126,126,125,124,124,123,122,121,121,120,119,119,118,117,117,116,116,115,114,114,113,112,112,111,111,110,109,109,108,108,107,107,106,105,105,104,104,103,103,102,102,101,101,100,100,99,98,98,97,97,96,96,95,95,94,94,93,93,92,92,91,91,90,90,89,89,88,88,87,87,86,86,85,85,84,84,83,83,82,82,81,81,81,80,80,79,79,78,78,77,77,76,76,75,75,74,74,73,73,72,72,71,71,70,70,70,69,69,68,68,67,67,66,66,65,65,64,64,63,63,62,62,61,61,60,60,59,59,58,58,57,57,56,56,55,55,54,54,53,53,52,52,51,51,50,50,49,48,48,47,47,46,46,45,45,44,44,43,42,42,41,41,40,40,39,38,38,37,37,36,35,35,34,33,33,32,31,31,30,29,29,28,27,27,26,25,24,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,2,1,0};
ma questo non dovrebbe influire sulla variabile "incremento".
Non è che per caso devo fare il casting perché sto facendo un'operazione tra due varibili differenti:
- Codice: Seleziona tutto
unsigned int incremento=150;
volatile unsigned short timer_delay;
timer_delay=incremento;
Grazie per l'aiuto
Marcello
1
voti
A questo punto, anziché fare il casting, prova così:
Il compilatore XC8 considera gli "short" a 16 bit. Ma a te serve assegnare a timer_delay un valore superiore a 255?
Ciao.
Paolo.
- Codice: Seleziona tutto
unsigned char incremento=150;
volatile unsigned char timer_delay;
timer_delay=incremento;
Il compilatore XC8 considera gli "short" a 16 bit. Ma a te serve assegnare a timer_delay un valore superiore a 255?
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Il compilatore XC8 considera gli "short" a 16 bit. Ma a te serve assegnare a timer_delay un valore superiore a 255?
In teoria no, perché il timer_delay va a incrementare quel famoso contatore suggerito da Pietro che deve essere ad 8 bit.
Oggi pomeriggio faccio qualche prova.
Grazie
Marcello
Ultima modifica di
PietroBaima il 2 giu 2014, 15:09, modificato 2 volte in totale.
Motivazione: usa [quote], non [code], quando vuoi citare
Motivazione: usa [quote], non [code], quando vuoi citare
Chi c’è in linea
Visitano il forum: Nessuno e 41 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)
pigreco]=π
