Go Down

Topic: "Copiare" un segnale dati. (Read 2937 times) previous topic - next topic

jumpjack

Attenzione perchè quelle non sono le durate del segnale alto, ma della portante modulata a 48000 Hz!
Non basta un digitalWrite, ti serve la llibreria per infrarossi, oppure ti scrivi da te una funzioncina che accende/spegne 48000 volte al secondo per un tempo prefissato.
Che so, tipo:

void carrier(int value) {
  if(value==1) {
      digitalWrite(outpin,HIGH);
   } else {
      digitalWrite(outpin,LOW);
  }
  delayMicroseconds(ONOFF);
  digitalWrite(outpin,LOW);
  delayMicroseconds(ONOFF);
}

Questo produce un valore alto/basso per ONOFF milionesimi di secondo e un valore basso per altrettanto tempo; alto e basso insieme devono durare 1/48000 secondi, quindi ognuno 1/96000 secondi, cioè 1'000'000/96'000 microsecondi, cioè circa 10 us (cioè ONOFF=10)

Poi carrier() va ripetuto per la durata del segnale alto: se deve durare 17'000 us, dovrà essere ripetuto 1'700 volte.

void SignalOn(int length) {
  for(int i =0; i<=length/10; i++) {
      carrier(1);
  }
}

void SignalOff(int length) {
  for(int i =0; i<=length/10; i++) {
      carrier(0);
  }
}


Belllo, vero? Tutta teoria, me lo sono appena inventato, mai provato! :-)
Pero' se funziona fammi un fischio, perche' serve pure a me! ;-)

Guglio

#16
Mar 18, 2011, 08:01 pm Last Edit: Mar 18, 2011, 08:03 pm by Guglio Reason: 1
O.o ma che cazz? ahaha
Devo ancora mangiare ho il cervello in risparmio energetico  :smiley-mr-green: :smiley-mr-green:
Come faccio a capire a quanti Hz è la mia portante? (Cioè 48000 l'hai sparato o è giusto?)
Ma anche se il telecomando è radio ha ugualmente una portante come gli IR?


Quindi
Quindi la funzione che devo usare è tipo questa: ?
(Riadattata usando il tuo sketch e quello di LadyAda)
Code: [Select]

void pulsa(long microsecs) {
 cli();  
 while (microsecs > 0) {
   // 5 up e 5 low:
  digitalWrite(IRledPin, HIGH);  // this takes about 3 microseconds to happen
  delayMicroseconds(2);         // hang out for 2 microseconds
  digitalWrite(IRledPin, LOW);   // this also takes about 3 microseconds
  delayMicroseconds(2);         // hang out for 2 microseconds

  // so 26 microseconds altogether
  microsecs -= 10;
 }
 sei();
}



Sa che la provo..

Solo che sto guardando il tuo codice ed è un po' diverso... li provo tutti e due e vedo se va ;)
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

Guglio

#17
Mar 18, 2011, 08:16 pm Last Edit: Mar 18, 2011, 08:19 pm by Guglio Reason: 1
Ok non funziona nè questo

Code: [Select]

int outpin =  13;    // LED connected to digital pin 13

void setup()   {                
 pinMode(outpin, OUTPUT);      
}

void carrier(int value) {
 if(value==1) {
     digitalWrite(outpin,HIGH);
  } else {
     digitalWrite(outpin,LOW);
 }
 delayMicroseconds(10);
 digitalWrite(outpin,LOW);
 delayMicroseconds(10);
}

void SignalOn(int length) {
 for(int i =0; i<=length/10; i++) {
     carrier(1);
 }
}

void SignalOff(int length) {
 for(int i =0; i<=length/10; i++) {
     carrier(0);
 }
}


void loop(){
SignalOff(0);
SignalOn(17572);
SignalOff(660);
SignalOn(1280);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(720);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(660);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(740);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(720);
SignalOn(1280);
SignalOff(680);
SignalOn(13404);
SignalOff(660);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1400);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(740);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
SignalOff(660);
SignalOn(13364);
SignalOff(660);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1400);
SignalOn(620);
SignalOff(1380);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(740);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
delay(2000);
}











Nè questo...
Code: [Select]

int IRledPin =  13;    // LED connected to digital pin 13

void setup()   {                
 pinMode(IRledPin, OUTPUT);      
}

void pulsa(long microsecs) {
 cli();  
 while (microsecs > 0) {
   // 5 up e 5 low:
  digitalWrite(IRledPin, HIGH);  // this takes about 3 microseconds to happen
  delayMicroseconds(2);         // hang out for 2 microseconds
  digitalWrite(IRledPin, LOW);   // this also takes about 3 microseconds
  delayMicroseconds(2);         // hang out for 2 microseconds

  // so 26 microseconds altogether
  microsecs -= 10;
 }
 sei();
}

void loop(){
delayMicroseconds(0);
pulsa(17572);
delayMicroseconds(660);
pulsa(1280);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(660);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(740);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(720);
pulsa(1280);
delayMicroseconds(680);
pulsa(13404);
delayMicroseconds(660);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1400);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(740);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(660);
pulsa(13364);
delayMicroseconds(660);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1400);
pulsa(620);
delayMicroseconds(1380);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(740);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delay(2000);
}





Idee?
Mi sa che inizio a tirare fuori gli optoisolatori e a saldarli su ogni tasto  =(
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

jumpjack


Ok non funziona nè questo

Non mi stupisce...  :P

Quote

nè questo
[...]
Idee?


Sì: cerca la libreria Arduino per gli infrarossi, so che esiste!
E controlla con una telecamera se i tuoi led emettono effettivamente qualcosa (le telecamere comuni vedono gli infrarossi).


O.o ma che cazz? ahaha
Devo ancora mangiare ho il cervello in risparmio energetico  :smiley-mr-green: :smiley-mr-green:
Come faccio a capire a quanti Hz è la mia portante? (Cioè 48000 l'hai sparato o è giusto?)

Un po' tutt'e due... So che è 48000 Hz per vari studi che ho fatto... pero' ho la memoria corta, erano 38000, non 48000!  :smiley-roll:
In rari casi pare che sia 36000 Hz,ma in genere i tlc dei televisori vanno tutti a 38000 , anche se ognuno con una sua codifica.

Guglio

Ferma tutto, ma io non sto usando un telecomando IR, sto usando un telecomando RF.

http://www.guglio.net/radio.jpg
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

devi mettere GND in comune con arduino, dalla foto non sembra che lo fai (è fondamentale)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

jumpjack

ops.
allora la frequenza è scritta sul trasmettitore, ma molto probabilmente è 433 MHz.

Bèccati la mia collezione di link:
http://bertrik.sikken.nl/433mhz/index.html
http://www.glacialwanderer.com/hobbyrobotics/?p=291
http://letsmakerobots.com/node/12394#comment-58778


Guglio

#22
Mar 19, 2011, 08:10 pm Last Edit: Mar 19, 2011, 08:19 pm by Guglio Reason: 1
La massa è collegata, è alimentato direttamente dall' arduino!

Basta mi arrendo... Sono 3 relè + 1 dimmer.
Quindi 4x2 tasti On/OFF + 2 tasti per tutto on, tutto off + 2 tasti per controllare il dimmer...
'Tutto on tutto off lo faccio via software al limite spegnendo/accendendo un relè alla volta.
Per gli altri 10 "spreco" 10 optoisolatori ed uno shiftregister... se li collego così dovrebbe andare no?
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

Go Up