problema led pwm

Ciao a tutti,sono appena entrato nella vostra comunità e nel mondo di arduino e ne sono veramente entusiasta.
Comincio col ringraziarvi in anticipo perchè già leggendo i precedenti post molti dubbi sono evaporati.
Due domande però rimangono e mi sembrano risolvibili con l'aiuto di qualcuno che ne sa più di me...probabilmente quindi chiunque...
Vi spiego:ho costruito una lampada che dovrebbe accendersi con una sequenza di diversi led (alcune sono batterie di led in serie ed anche led high power da 3w).
Ho alimentato tutto a 12v ed ho usato transistor e mosfet per pilotare i led in pwm.
Funziona tutto piuttosto bene a parte una cosa:quando il faretto da 3w (l'unico collegato al mosfet) si accende in dissolvenza la prima volta dopo un periodo di inattività, fila tutto liscio e l'accensione è fluida.
Se però ripeto il loop subito dopo, nell'accendersi prima fa un piccolo lampo poi inizia la dissolvenza.
Ecco io vorrei eliminare questo lampo...può essere che non c'è un diodo in parallelo al led?

Altra cosa:

vi posto lo sketch questa semplicissima prova di accensione perchè vorrei informazioni su come poter fare partire le diverse dissolvenze simultaneamente ma con tempi di arrivo diversi.
Per adesso sono solo una sequenza..

#define fioreblu 6 //led fiore blu
#define fiorebia 9 //led fiore bianchi
#define fusto 5
#define apicale 10

void setup()
{

pinMode(fusto, OUTPUT);
pinMode(fioreblu, OUTPUT);
pinMode(fiorebia, OUTPUT);

pinMode(apicale, OUTPUT);
}

void loop()
{

for (int fadeValuefusto = 0; fadeValuefusto <= 100; fadeValuefusto++)
{analogWrite(fusto, fadeValuefusto); // dissolvenza fusto
delay(10); //durata dissolvenza
}

for (int fadeValuefioreblu = 0; fadeValuefioreblu <= 100; fadeValuefioreblu ++)
{

analogWrite(fioreblu, fadeValuefioreblu);
delay(5);
}

for (int fadeValuefiorebia = 0; fadeValuefiorebia <= 255; fadeValuefiorebia++)
{
analogWrite(fiorebia, fadeValuefiorebia);
delay(5);
}

for (int fadeValueapicale =0;fadeValueapicale<=255;fadeValueapicale++)
{
analogWrite(apicale,fadeValueapicale);
delay (10);
}

delay (3000);
digitalWrite(fusto,LOW);
digitalWrite (fioreblu,LOW);
digitalWrite(fiorebia,LOW);
digitalWrite (apicale,LOW);
delay(1500);
}

Spero in vostro aiuto
In ogni caso grazie ancora

tra i 4 output dichiarati, qual'è quello del faretto incriminato?
Qual'è lo schema elettrico delle connessioni?
il datasheet del mosfet?

ps. il codice sembra corretto

per la storia del diodo in parallelo non credo proprio dato che anche i led sono diodi!!

Mi sfugge una cosa:

all'inizio del loop usi i pin come analogici (PWM) e poi in fondo al loop li usi come come veri e propri digitali mettendoli a LOW. Questa cosa credo sia lecita, ed infatti ti funziona, però magari nel passaggio tra digitale e PWM cambia qualcosa nella configurazione hardware interna del micro che genera questo effetto.

Prova a gestire tutto con l'analogWrite e vedi se cambia qualcosa, se non ti serve davvero spegnerli completamente, prova a dare un valore molto basso, ma non nullo.

lesto:
Qual'è lo schema elettrico delle connessioni?
il datasheet del mosfet?

Già, è difficile immaginare le connessioni da come le hai descritte...

lesto:
ps. il codice sembra corretto

Un piccolo consiglio, pero', cerca di tenere il codice un po' più ordinato, così tu stesso riesci a controllarlo meglio... Almeno quando lo posti: le persone saranno piu' portate a leggerlo :wink:
Altra buona regola:

print "Hello World!"

(dopo aver scritto il codice, selezionalo e premi il tasto con # sulla faccina ";)")

prova a dare un valore molto basso, ma non nullo.

perchè??????analogWrite(0, ledPin) mica gli fa male!! è più che lecito!

cerca di tenere il codice un po' più ordinato

dov'è disordinato? :astonished:

al massimo quando posti il codice, nello sketch dopo che lo hai selezionato e c'è anche copy for forum, così viene anche tutto bello colorato!

Mi contraddici per sport o non lo vedi davvero? :astonished:
Ci sono spazi bianchi qua e la' e parentesi non allineate e l'indentatura sballata a tratti... (non e' una critica a rotorio, che l'ha fatto in buona fede, ma a vanzati, che non ammette che sia cosi').

Per quanto riguarda l'analog, considera che non so come abbia fisicamente realizzato i collegamenti, ma se il mosfet non e' ben polarizzato e viene collegato al pwm in modo che venga alterata la polarizzazione, allora possono succedere cose inaspettate... Se il dispositivo, inoltre, e' di potenza (indendo di potenza un po' piu' elevata di quelle normalmente utilizzate con arduino), potrebbe avere tempi di accensione un po' piu' lunghi di quelli "normali"...

Che simpatico! :smiley:

Grazie a tutti, il problema pare proprio essere lo spegnimento in digitalWrite!
Scusate i dettagli striminziti ma ero al lavoro e ho fatto tutto un pò in fretta..
cercherò di integrare qualcosa adesso per i posteri...
Allora,l'unico faretto da 3w collegato al mosfet è "apicale"
il mosfet è un p4na90 e questo è l'unico datasheet che ho trovato

Le altre batterie di led sono collegate invece a transistor 2n2222a

lo schema elettrico
cercherò di disegnarlo presto

Se poi a qualcuno viene in mente come poter far partire le accensioni simultaneamente, ma con tempi diversi sono tutt'orecchi..
intanto continuo a cercare..

rotorio:
Grazie a tutti, il problema pare proprio essere lo spegnimento in digitalWrite!

hai fatto la prova? che succede?

rotorio:
Se poi a qualcuno viene in mente come poter far partire le accensioni simultaneamente, ma con tempi diversi sono tutt'orecchi..
intanto continuo a cercare..

basta non usare i for, al posto dei delay usi i millis (vedi l'esempio blink senza delay)
ma ti toccherà usare i 4 contatori come variabili globali, e 4 booleane che indicano se il pin deve essere spento o se è in corso il fade/accensione

si ho cambiato digitalWrite con analogWrite e al posto di LOW ho messo 0.
Adesso l'accensione è sempre fluida.
Vado subito a guardare l'esempio blink senza delay!
Grazie della dritta !!