Pages: 1 [2]   Go Down
Author Topic: "Copiare" un segnale dati.  (Read 2482 times)
0 Members and 1 Guest are viewing this topic.
Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 987
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 smiley-wink
« Last Edit: March 18, 2011, 02:03:49 pm by Guglio » Logged

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

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok non funziona nè questo

Code:
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:
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  smiley-cry
« Last Edit: March 18, 2011, 02:19:58 pm by Guglio » Logged

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

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 987
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok non funziona nè questo
Non mi stupisce...  smiley-razz

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.
Logged

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

http://www.guglio.net/radio.jpg
Logged

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

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

devi mettere GND in comune con arduino, dalla foto non sembra che lo fai (è fondamentale)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 987
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: March 19, 2011, 02:19:11 pm by Guglio » Logged

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

Pages: 1 [2]   Go Up
Jump to: