Pages: 1 ... 4 5 [6] 7   Go Down
Author Topic: Consiglio resistenze per due IR Led  (Read 4480 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 2
Posts: 555
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esatto, io le uso normalmente per conteggi di certe frequenze tramite interrupt.
Probabilmente Leo li disabilita in modo che non creino in qualche modo qualche disturbo o perchè quei valori vanno settati a interrupt spenti.
Vediamo cosa scriverà Leo...  smiley-wink
Se riesco liberare il mio Mega avrei la curiosità di fare qualche prova anche io... vediamo questa sera se riesco..
Logged

Montebelluna
Offline Offline
Newbie
*
Karma: 1
Posts: 23
View Profile
 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

ciao

questo sera ho provato il nuovo sketch, allora nel pin 11 sia con led normale che con il led IR avvine il lampeggio in modalita fedein,
mentre nel pin 13 entrambi i led non danno nessun sengale, aparte quelli che avvengono durante il caricamento.
comunque anche il led nella skeda è sempre spento una volta caricato il sketch rimane sempre spento

Logged

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

Se non ricordo male con cli() si bloccano gli interrup e con sei() si riattivano
Sì, esatto.
Li ho messi per non manipolare direttamente il registro SREG per disattivare globalmente gli interrupt.
Logged


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

Ma ora sembrerebbe che non vada il timer 0, io non ci capisco più nulla da qualche ora, ora meno che meno smiley-sad-blue
Logged


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

Probabilmente Leo li disabilita in modo che non creino in qualche modo qualche disturbo o perchè quei valori vanno settati a interrupt spenti.
Quando si manipolano i timer non è cattiva abitudine quella di disattivare preventivamente gli interrupt, in modo da evitare che non si vada a modificare qualche registro del timer mentre è in corso una chiamata ad una ISR (che resetta alcuni flag e potrebbe anche modificare per proprio conto i registri) nonché per evitare che altri interrupt del micro blocchino l'operazione a metà.
Logged


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

questo sera ho provato il nuovo sketch, allora nel pin 11 sia con led normale che con il led IR avvine il lampeggio in modalita fedein,
mentre nel pin 13 entrambi i led non danno nessun sengale, aparte quelli che avvengono durante il caricamento.
comunque anche il led nella skeda è sempre spento una volta caricato il sketch rimane sempre spento
Ricapitoliamo, seguendo lo sketch:
1) fade del led sul pin 11: OK
2) fade del led sul pin 13: NEGATIVO
3) 38 kHz sull pin 11: OK
4) 38 kHz sul pin 13: NEGATIVO

E' giusto? Lo confermi? Perché da quello che hai scritto non ho capito se hai controllato i 38 kHz.
Logged


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

Ma ora sembrerebbe che non vada il timer 0, io non ci capisco più nulla da qualche ora, ora meno che meno smiley-sad-blue
A me pare di aver usato i giusti pin. Il problema è che:
1) non ho una MEGA (i test li ho fatti solo su una UNO)
2) non ho un oscilloscopio per controllare l'effettiva frequenza in uscita sui pin

Quindi devo basarmi sui test che sta conducendo il nostro amico
Logged


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

neanch'io ho un oscilloscopio e quindi non riesco ha verificare la frequenza

1) fade del led sul pin 11: OK
2) fade del led sul pin 13: NEGATIVO

questo è quello che succede


Logged

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

neanch'io ho un oscilloscopio e quindi non riesco ha verificare la frequenza

1) fade del led sul pin 11: OK
2) fade del led sul pin 13: NEGATIVO

questo è quello che succede



Punto 2):
Code:
void setup() {}
void loop() {
  static byte tempFade = 0;
  analogWrite(13, tempFade);
  tempFade++;
  delay(10);
}

Che cosa ti fa questo sketch? Lo fa il fading sul led 13 (quello integrato basta oppure provane anche uno esterno)?
Logged


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

Quote from: leo72
Punto 2):
Code:
void setup() {}
void loop() {
  static byte tempFade = 0;
  analogWrite(13, tempFade);
  tempFade++;
  delay(10);
}

Che cosa ti fa questo sketch? Lo fa il fading sul led 13 (quello integrato basta oppure provane anche uno esterno)?

si così, si. sia in scheda che esterno
Logged

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

Bene, allora lo sketch che ho scritto per il fade nel precedente test è buggato. Appurato questo, attivando i 38 kHz, li vedi i led accesi oppure no?

Code:
void setup() {               
}

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


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);
}
Logged


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

Leo, eventualmente facciamo un passo inidetro, lasciamo da parte i 38KHz ed usiamo il "normale" analogWrite, ma il dubbio è: quale timer lo gestisce il comando? sempe lo stesso o dipende dal pin in uso?
Logged


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

Leo, eventualmente facciamo un passo inidetro, lasciamo da parte i 38KHz ed usiamo il "normale" analogWrite, ma il dubbio è: quale timer lo gestisce il comando? sempe lo stesso o dipende dal pin in uso?
L'analogWrite altro non fa che regolare il duty cicle del timer a cui il pin è agganciato. La regolazione dei timer viene fatta dal core prima dell'avvio dello sketch. Una volta impostati, i timer non vengono più modificati dall'Arduino.
Se io scrivo analogWrite(3, 128) sulla UNO, la funzione prima di tutto controlla se su quel pin c'è la funzionalità PWM, in caso affermativo estrae il numero di timer ed il canale corrispondente. Nel caso del pin D3, che corrisponde al pin PD1 dell'Atmega328, il core trova il canale B del timer 2, quindi OC2B. A questo punto regola semplicemente il registro OCR2B (comune ad entrambi) a 128 (questo regola il duty cicle), collega il pin al canale del timer (quindi OC2B) e tutto il gioco finisce lì.

Logged


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

Leo, eventualmente facciamo un passo inidetro, lasciamo da parte i 38KHz ed usiamo il "normale" analogWrite, ma il dubbio è: quale timer lo gestisce il comando? sempe lo stesso o dipende dal pin in uso?
L'analogWrite altro non fa che regolare il duty cicle del timer a cui il pin è agganciato. La regolazione dei timer viene fatta dal core prima dell'avvio dello sketch. Una volta impostati, i timer non vengono più modificati dall'Arduino.
Se io scrivo analogWrite(3, 128) sulla UNO, la funzione prima di tutto controlla se su quel pin c'è la funzionalità PWM, in caso affermativo estrae il numero di timer ed il canale corrispondente. Nel caso del pin D3, che corrisponde al pin PD1 dell'Atmega328, il core trova il canale B del timer 2, quindi OC2B. A questo punto regola semplicemente il registro OCR2B (comune ad entrambi) a 128 (questo regola il duty cicle), collega il pin al canale del timer (quindi OC2B) e tutto il gioco finisce lì.


wow ragazzi .... guiro che di quello che vi siete detti non c'ho capito nulla .....
bè spero un giorno di ruiscir capirne qualcosa ...

ho provato l'ultimo sketch, anche il led 13 va in fade
« Last Edit: January 10, 2013, 02:18:17 pm by garide » Logged

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

quindi ora ti funzionano entrambi i LED sui due pin?
Logged


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