Pages: 1 ... 3 4 [5] 6 7   Go Down
Author Topic: Consiglio resistenze per due IR Led  (Read 4606 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12678
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sono spiegato male, ho sbagliato riferimento....TUTTE le prove fatte fin qui domostrano che:
- il Timer 0 funziona (tutti i test blink OK)
- gli altri timer, o almeno il Timer 1, sembrano non funzionare

Ti chiedevo di modificare il mio codice per far funzionare il pwm del timer 0, meglio ancora un minimini-sketch in cui si possano provare alternativamente i due timer:
step a: blink 0 (sul pin pwm del timer 0)
step b: blink 1 (sul pin pwm del timer 1)
step c: 38KHz sullo stesso pin pwm dello step a
step d: 38KHz sullo stesso pin pwm dello step b
(in realtà così facciamo tre test sul timer 0 ed uno solo sul timer 1, ma va benissimo così, è il riepilogo di quanto fatto finora)
così tagliamo la testa al toro..... smiley
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sono spiegato male, ho sbagliato riferimento....TUTTE le prove fatte fin qui domostrano che:
- il Timer 0 funziona (tutti i test blink OK)
- gli altri timer, o almeno il Timer 1, sembrano non funzionare
E' stato fatto un semplice analogWrite(10, 128) per vedere se si riesce a dimmerare un LED sul pin 10?
Se così no va, allora o la sua scheda è buggata oppure c'è qualcosa che non va nel core di Arduino. Ma pensare che il core sia difettoso mi pare strano perché nessuno ha mai usato un PWM sulla Mega?

Quote
Ti chiedevo di modificare il mio codice per far funzionare il pwm del timer 0, meglio ancora un minimini-sketch in cui si possano provare alternativamente i due timer:
step a: blink 0 (sul pin pwm del timer 0)
step b: blink 1 (sul pin pwm del timer 1)
step c: 38KHz sullo stesso pin pwm dello step a
step d: 38KHz sullo stesso pin pwm dello step b
(in realtà così facciamo tre test sul timer 0 ed uno solo sul timer 1, ma va benissimo così, è il riepilogo di quanto fatto finora)
così tagliamo la testa al toro..... smiley

Il codice a cui ho pensato è questo (non testato perché non ho una scheda MEGA sottomano, e sono a lavoro):
Code:
void setup() {               
}

void loop() {
    fadeLed(11);
    fadeLed(13);
    setTimer1();
    delay(10000);
    setTimer0(); //da qui in poi muore perché il delay viene sballato
    for (;;) {};
}


void fadeLed(byte tempLed) {
    pinMode(tempLed, OUTPUT);
    for (byte tempJ = 0; tempJ < 4; tempJ++) {
        for (byte tempI = 0; tempI <=255; tempI++) {
            analogWrite(tempLed, tempI);
            delay(10);
        }
    }
    pinMode(tempLed, INPUT);
}

void setTimer1() {
//Phase Correct PWM con toggle su OCR1A
    cli();
    OCR1A = 105;
    TCCR1A = ((1<<WGM10) | (1<<WGM11) | (1<<COM1A0));
    TCCR1B = (1<<WGM13);
    sei();
    pinMode(11, OUTPUT);
}

void setTimer0() {
//Phase Correct PWM con toggle su OCR1A
    cli();
    OCR0A = 208;
    TCCR0A = ((1<<COM0A0) | (1<<WGM01) | (1<<WGM00));
    TCCR0B = ((1<<WGM02) | (1<<CS00));
    sei();
    pinMode(13, OUTPUT);
}

Fa il blink sul pin 11 (timer 1); poi fa il blink sul pin 13 (timer 0);
poi dovrebbe fare i 38 kHz per 10" sul pin 11 e poi i 38 kHz sul pin 13 (per sempre).

Ho invertito i test perché toccando il timer 0 poi saltano i delay, quindi i 38 kHz sul timer 0 li ho messi alla fine. Uso i canali A di entrambi i
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12678
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

il Maestro sei tu, quindi ovviamente si fa come dici smiley
l'analogWrite non è stato fatto e vedo che lo hai previsto, penso che da questa prova avremo finalmente il quadro chiaro.
Me esiste un modo per "disabilitare" i timer di un micro, che tu sappia?
Logged


Montebelluna
Offline Offline
Newbie
*
Karma: 1
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un grazie a tutti per il proseguo della discussione, sono stato fuori tutto il mattino a clienti e leggo solo ora le vostre risposte.

Adesso mangio e dopo provo quanto scritto.

Ieri sera ho avuto un segnale positivo con il led ir sul pin 9 con lo sketch iresenddemo.
Non ho avuto tempo di fare delle controprove, non vorrei che sul MEGA il pin di default PWM sia il 9 e nn il 3

Comunque dopo vi faccio sapere il risultato delle prove
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho avuto tempo di fare delle controprove, non vorrei che sul MEGA il pin di default PWM sia il 9 e nn il 3

I pin PWM sono già tutti preimpostati dal core di Arduino per cui un analogWrite deve funzionare sempre e comunque.

Questa sotto è la piedinatura della MEGA2560
http://arduino.cc/en/uploads/Hacking/PinMap2560.png
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12678
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nell'ultimo sketch di Leo DEVI usare i pin 11 e 13 contemporaneamente, montando due LED (anche normali: rossi, verdi, ....) con le relative R; poi esegui lo sketch e dicci che risultati hai ottenuto.
BUON APPETITO!
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sul pin 13 non servono né Led né resistenza, dovrebbe avere il led integrato come la UNO.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12678
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sul pin 13 non servono né Led né resistenza, dovrebbe avere il led integrato come la UNO.
VERO, ma se mette l'infrarosso lo controlla comunque in "parallelo", ormai balliamo....
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Speriamo solo che quei setup funzionino, li ho scritti senza poter provare nulla  smiley-sweat
Logged


Montebelluna
Offline Offline
Newbie
*
Karma: 1
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora cerco di riassumere e far chiarezza su cosa succede, ho fatto un bel po di prove solo con arduino senza shield :

Programma di IRsendDemo led IR su pin 9 funziona (led lampeggia) , il resto dei pin 1/2/3/4/5/6/7/8/10/11/12/13 (li ho provati tutti ) non funziona (nessun lampeggio)

Programma di leo72 led IR su pin 11 funziona(led lampeggia in modalita fade ), il pin 13 non funziona

Programma di leo72 led Normale Rosso su pin 11 e 13 non funziona ( nessun lampeggio), tranne in fase di caricamento che il 13 lampeggia come quello sulla skeda

Programma di Garide qui sotto led IR su pin 9 funziona, la stufa riceve il comando, si accende e spegne, il resto dei pin 1/2/3/4/5/6/7/8/10/11/12/13 (li ho provati tutti ) non funziona

 
Code:
#include <IRremote.h>
 
  IRsend led;
  unsigned int code[22] = {6750,2500,3350,1700,850,850,800,1700,1700,850,800,1700,850,850,850,1650,1700,850,1650,1700,1650};
  //           Raw (22): 14036 6750 -2500 3350 -1700 850 -850 800 -1700 1700 -850 800 -1700 850 -850 850 -1650 1700 -850 1650 -1700 1650
 
  void setup()
  {
  }
 
  void loop() {
   
      for (int i = 0; i < 3; i++) {
        led.sendRaw(code, 22,38);
        delay(100);
      }
   

  }

questo è quello che succede ....

domanda siccome sia il mio programma che quello de IRsendDemo non definisce il pin di OUTPUT, non è che il MEGA abbia come uscita principale il pin 9. leo72 ha gia risposto, ma non ho compreso l'affermazione fatta.... sono alle prime armi e non ci arrivo subito  smiley-razz
« Last Edit: January 09, 2013, 08:01:32 am by garide » Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12678
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

io non ci capisco più nulla, ora va tutto al rovescio, poi ti ci metti pure tu ad aggiungere decine di prove senza senso smiley-sweat
non so più che dire, spero che Leo ne tiri fuori info utili.
Logged


Montebelluna
Offline Offline
Newbie
*
Karma: 1
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io non ci capisco più nulla, ora va tutto al rovescio, poi ti ci metti pure tu ad aggiungere decine di prove senza senso smiley-sweat
non so più che dire, spero che Leo ne tiri fuori info utili.

Ciao, siamo in 2 ...   smiley-confuse

sulle guide c'è scritto di collegare il led IR su pin3, ve bene che usavano la uno/2009.
Ci ho sbattuto sopra na settimana per capire come mai non funzionava .... per poi trovare che è solo sul pin 9 va tutto, e no lo sò perchè.

vediamo se Leo ci sa spiegare come mai..
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il programmino che ho scritto aveva qualche bug.

Riprova questo, poi dimmi come va:
Code:
void setup() {               
}

void loop() {
    fadeLed(11);
    fadeLed(13);
    setTimer1();
    delay(10000);
    pinMode(13, INPUT);
    setTimer0(); //da qui in poi muore perché il delay viene sballato
    for (;;) {};
}


void fadeLed(byte tempLed) {
    pinMode(tempLed, OUTPUT);
    for (byte tempJ = 0; tempJ < 4; tempJ++) {
        for (byte tempI = 0; tempI <=255; tempI++) {
            analogWrite(tempLed, tempI);
            delay(10);
        }
    }
    pinMode(tempLed, INPUT);
}

void setTimer1() {
//Phase Correct PWM con toggle su OCR1A
    cli();
    OCR1A = 105;
    TCCR1A = ((1<<WGM10) | (1<<WGM11) | (1<<COM1A0));
    TCCR1B = (1<<WGM13);
    sei();
    pinMode(11, OUTPUT);
}

void setTimer0() {
//Phase Correct PWM con toggle su OCR1A
    cli();
    OCR0A = 208;
    TCCR0A = ((1<<COM0A0) | (1<<WGM01) | (1<<WGM00));
    TCCR0B = ((1<<WGM02) | (1<<CS00));
    sei();
    pinMode(13, OUTPUT);
}

La sequenza dovrebbe essere:
1) fade sul led 11
2) fade sul led 13
3) 38 kHz sul led 13 per 10 secondi
4) 38 kHz sul led 11
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12678
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Leo che fanno cli e sei? ricordo che ne avevi parlato una volta....
anche i 38khz del led 11 devono durare 10 secondi?
Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se non ricordo male con cli() si bloccano gli interrup e con sei() si riattivano
Logged

Pages: 1 ... 3 4 [5] 6 7   Go Up
Jump to: