Go Down

Topic: "Copiare" un segnale dati. (Read 3268 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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy