Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Dimmer per lampada con PIC

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[81] Re: Dimmer per lampada con PIC

Messaggioda Foto UtentePietroBaima » 30 mag 2014, 11:12

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
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[82] Re: Dimmer per lampada con PIC

Messaggioda Foto Utentericello9 » 30 mag 2014, 11:48

Sei coerente con la tabella?


E' inversa, posso risolvere in questo modo:

Codice: Seleziona tutto
incremento=(255-incremento);
Avatar utente
Foto Utentericello9
195 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 360
Iscritto il: 16 mar 2009, 0:13

0
voti

[83] Re: Dimmer per lampada con PIC

Messaggioda Foto UtentePietroBaima » 30 mag 2014, 12:06

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 -=?

Codice: Seleziona tutto
a-=2;

equivale a
Codice: Seleziona tutto
a=a-2;


poi c'è anche += /= *= ecc..
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

1
voti

[84] Re: Dimmer per lampada con PIC

Messaggioda Foto Utentericello9 » 30 mag 2014, 15:14

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


:ok:

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.
Avatar utente
Foto Utentericello9
195 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 360
Iscritto il: 16 mar 2009, 0:13

0
voti

[85] Re: Dimmer per lampada con PIC

Messaggioda Foto Utentericello9 » 31 mag 2014, 13:36

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
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
Avatar utente
Foto Utentericello9
195 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 360
Iscritto il: 16 mar 2009, 0:13

3
voti

[86] Re: Dimmer per lampada con PIC

Messaggioda Foto UtentePaolino » 31 mag 2014, 13:48

Mostra la parte di codice dove c'è la dichiarazione e l'uso di "incremento"

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

1
voti

[87] Re: Dimmer per lampada con PIC

Messaggioda Foto Utentericello9 » 1 giu 2014, 21:46

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
Avatar utente
Foto Utentericello9
195 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 360
Iscritto il: 16 mar 2009, 0:13

1
voti

[88] Re: Dimmer per lampada con PIC

Messaggioda Foto UtentePaolino » 2 giu 2014, 9:18

A questo punto, anziché fare il casting, prova così:

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
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[89] Re: Dimmer per lampada con PIC

Messaggioda Foto Utentericello9 » 2 giu 2014, 12:48

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 Foto UtentePietroBaima il 2 giu 2014, 15:09, modificato 2 volte in totale.
Motivazione: usa [quote], non [code], quando vuoi citare
Avatar utente
Foto Utentericello9
195 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 360
Iscritto il: 16 mar 2009, 0:13

0
voti

[90] Re: Dimmer per lampada con PIC

Messaggioda Foto Utentericello9 » 2 giu 2014, 14:35

Ho provato ad assegnare alla variabile timer_delay la struttura volatile unsigned char ma non funziona.
Come prima la variabile incremento non aggiorna il suo valore.
Avatar utente
Foto Utentericello9
195 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 360
Iscritto il: 16 mar 2009, 0:13

PrecedenteProssimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 41 ospiti