analogWrite non funzionante

Ciao a tutti, questo è il pezzo di uno sketch:

else if (esito.value == 0x1C7E161){ //squadra 1, tasto 1
      analogWrite (led1, 150);
      Serial.println ("Squadra uno prenota");
      hannoPrenotato ++ ;
     risposta = 11;
     squadra = 1;
     }

il problema è che non si accende il led1, nonostante la condizione è vera (infatti viene scritto su seriale "squadra uno prenota" ) . il led è collegato alla porta 10, e impostato come output. Ma poi, l'altra cosa strana è che se io tolgo l'analogWrite e metto "digitalWrite (led1, HIGH);" tutto funziona benissimo. Utilizzo Arduino mega 2560.
Com'è possibile che accada questo? Grazie a tutti quelli che risponderanno :slight_smile:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Come è collegato il led ?

Il led è collegato così : il catodo al GND, mentre l'anodo è collegato alla porta 11 di Arduino.
Ma io escluderei che sia un problema di collegamento, perchè se utilizzo il comando "digitalWrite" funziona, mentre se uso il comando "analogWrite "non funziona

aleachi99:
Il led è collegato così : il catodo al GND, mentre l'anodo è collegato alla porta 11 di Arduino.
Ma io escluderei che sia un problema di collegamento, perchè se utilizzo il comando "digitalWrite" funziona, mentre se uso il comando "analogWrite "non funziona

Vedo 2 problemi:
Manca la resistenza che limita la corrente del LED; mettici un 470 Ohm.
Piloti pin 10 ma colleghi il LED al pin 11 (sempre riferito alle informazioni che hai scritto).

Ciao Uwe

Ho sbagliato nell'ultimo messaggio: l'anodo è collegato alla porta 10, non alla 11 :slight_smile:
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.

aleachi99:
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.

NON È POSSIBILE.
Ciao Uwe

aleachi99:
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.

... e ... secondo te cosa cambia ??? :astonished: :astonished: :astonished:

Ti ricordo che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Quindi ... vedi tu ... :roll_eyes:

Guglielmo

gpb01:

aleachi99:
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.

... e ... secondo te cosa cambia ??? :astonished: :astonished: :astonished:

Ti ricordo che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Quindi ... vedi tu ... :roll_eyes:

Guglielmo

Alle informazioni date da Guglielmo manca un dato: se attacchi un LED senza resistenza a Arduino si istaura una corrente tra 80 e 100mA che é solo limitata dalla resitenza dei transistori e collegamenti interni del controller che dissipano la potenza residua ( differenza tra tensione del diodo e tensione di alimentazione per la corrente) in calore.

Poi l' altro errore che fai é pensare che analogWrite sia una cosa ANALOGICA. No, é un onda rettangolare a frequenza fissa ( 490 o 980 Hz a secondo del Pin e del microcontroller usato) della quale viene variata il tempo di on rispetto al tempo di off. percui ci sono sempre 0 o 5V e non tensioni intermedie.

Terzo concetto errato. Un LED non si pilota in tensione ma in corrente.

Ciao Uwe

Inoltre la resistenza deve essere calcolata in base al colore del led, per ogni colore di led c'e' una caduta di tensione (ti "mangia" un pò di V). La resistenza devi calcolarla per far arrivare al led circa 10-20mA
In allegato elenco colori led e resistenze a seconda dei V applicati.

Come detto da @uwe i pin PWM generano con analogWrite() un segnale in onda quadra tra 0-5V, vedi nel forum o su internet "duty cycle"