So my next thought was there must be something wrong with the schematics because it was too easy.
![Grin ;D](https://www.eevblog.com/forum/Smileys/default/grin.gif)
And then I found this one:
http://kimboricha.blogspot.si/2013/12/build-usb-to-fluke-189-irinfrared.htmlThis time I did not bother soldering it:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=309792;image)
I tested it again with FlukeIV and nothing. DMM just would not answer to any of my requests...
Now that I had two modules I tried if they can talk to each other and yes I could send data from one module to another trough IR with no problem...
So I studied the datasheet of HSDL-3201 and found out this interesting parts:
"Output is a low pulse for 2.4 µs when a light pulse is seen."
and
" Logic high turns the LED on. If held high longer than ~ 20 µs, the LED is turned off. "
So this module can't work with just regular SIR (Serial to Infrared) because at 9600 baud rate bits are 105us long and if transmitter is only outputting 20us long pulses serial2usb ic won't understand "serial" data that is getting on RX.
So I learned that this HSDL-3201 is used for IrDA protocol which is quite different from serial:
![](http://www.societyofrobots.com/images/electronics_irda_encode_decode.png)
Veri nice article about IrDA:
http://www.eix.co.uk/Articles/IrDA/Welcome.htm
---
Understand... you describing your research in multiple messages, instead do it in one..
![Roll Eyes ::)](https://www.eevblog.com/forum/Smileys/default/rolleyes.gif)
I'll remove my ones in this thread above
So in red are 20us pulses that need to be sent to dmm. Well I sure did not want to wait for decoder to arrive so I hacked together some code for arduino.
The code sent out raw pulses of DS<CR> which resets DMM. It does this every 5sec.
I've set dmm to DC V pressed the AVG button and pointed IR to ARduino IR. Sure enough a few seconds later DMM reseted from AVG to basic mode.
VICTORY!
![Grin ;D](https://www.eevblog.com/forum/Smileys/default/grin.gif)
Then I wanted to go furter. Can I use arduino as a decoder too?
Looking at this
decoding image I noticed that all I have to do is set up a trigger on falling edge that will output 105us pulse on some pin and connect that pin to RX of USB2Serial module.
Arduino mess:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=309810;image)
And tadaaa. It works!
![ThumbsUp :-+](https://www.eevblog.com/forum/Smileys/default/icon_smile_thumbsup.gif)
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=309812;image)
Code (please don't judge me, I just wanted it to work):
#include "DigitalIO.h"
const uint8_t PIN = 5;
const uint8_t PINTX = 9;
const byte interruptPin = 3;
int bitsD[10] = {0,0,0,1,0,0,0,1,0,1};
int bitsS[10] = {0,1,1,0,0,1,0,1,0,1};
int bitsI[10] = {0,1,0,0,1,0,0,1,0,1};//0100 1001
int bitsCR[10] = {0,1,0,1,1,0,0,0,0,1};
void setup() {
fastPinMode(PIN, OUTPUT);
fastPinMode(PINTX, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), sendTX, FALLING);
}
void loop() {
fastDigitalWrite(PIN, LOW);
int i;
for (i = 0; i < 10; i++) {
if (bitsI[i]==0) { zero(); }
else { one(); }
}
/*for (i = 0; i < 10; i++) {
if (bitsS[i]==0) { zero(); }
else { one(); }
}*/
for (i = 0; i < 10; i++) {
if (bitsD[i]==0) { zero(); }
else { one(); }
}
for (i = 0; i < 10; i++) {
if (bitsCR[i]==0) { zero(); }
else { one(); }
}
delay(5000);
}
void one(){
delayMicroseconds(105);
}
void zero() {
delayMicroseconds(46);
fastDigitalToggle(PIN);
delayMicroseconds(20);
fastDigitalToggle(PIN);
delayMicroseconds(39);
}
void sendTX() {
fastDigitalWrite(PINTX, LOW);
delayMicroseconds(105);
fastDigitalToggle(PINTX);
}
Thanks for documenting and sharing.
Tnx for supporting my efforts.
I have now removed the external usb2serial module because I can send out pulses of serial data on pin1 which is tx of arduino.
In the folowing days I'll publish code for complete IrDA encoder/decoder so anybody could use 2$ arduino instead of expensive Fluke cable. The code should work with Fluke Forms...
Sent from my LG-D855 using Tapatalk
I own a Fluke 187 and this sounds very interesting. Thank you for your detailed reports!
Software implementation of IrDA encoding/decoding is ready for public eye.
![Tongue :P](https://www.eevblog.com/forum/Smileys/default/tongue.gif)
DSO says it works:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310802;image)
So the schematics is really simple: (RX is connected to pin D2 because there is no hardware interrupt on RX pin)
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310804;image)
Readable arduino code:
#include "DigitalIO.h"
const uint8_t interruptPinIrRx = 3;
const uint8_t interruptPinRX = 2;
const uint8_t PINIrTx = 7;
const uint8_t PINSerialTX = 1;
void setup() {
fastPinMode(PINSerialTX, OUTPUT);
fastDigitalWrite(PINSerialTX, HIGH);
pinMode(interruptPinIrRx, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPinIrRx), sendTX, FALLING);
fastPinMode(PINIrTx, OUTPUT);
pinMode(interruptPinRX, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPinRX), sendIr, FALLING);
}
void sendTX() {
fastDigitalWrite(PINSerialTX, LOW);
delayMicroseconds(105);
fastDigitalToggle(PINSerialTX);
}
void sendIr() {
delayMicroseconds(46);
while (digitalRead(2)==LOW){
fastDigitalWrite(PINIrTx, HIGH);
delayMicroseconds(20);
fastDigitalToggle(PINIrTx);
delayMicroseconds(85);
}
}
void loop() {
}
Fast less readable code:
const uint8_t PINIrTx = 7;//PD7
const uint8_t PINSerialTX = 1; //PD1
const byte interruptPinIrRx = 3;//PD3 INT1
const byte interruptPinRX = 2; //PD2 INT0
void setup() {
pinMode(PINSerialTX, OUTPUT);
pinMode(interruptPinIrRx, INPUT_PULLUP);
attachInterrupt(1, sendTX, FALLING);
pinMode(PINIrTx, OUTPUT);
pinMode(interruptPinRX, INPUT_PULLUP);
attachInterrupt(0, sendIr, FALLING);
}
void loop() {
PORTD |= _BV(PD1);
}
void sendTX() {
PORTD &= ~_BV(PD1); //go LOW on pin 1(TX)
delayMicroseconds(105);
PIND = _BV(PD1); //toggle pin 1
}
void sendIr() {
delayMicroseconds(46);
while ((PIND & (1<<PD2))==0){ //while interruptPinRX is LOW, output 20us pulses
PORTD |= _BV(PD7); //go HIGH on pin 7 (IR diode)
delayMicroseconds(20);
PIND = _BV(PD7); // go LOW (toggle pin) on pin 7 (IR diode)
delayMicroseconds(85);
}
}
First test with arduino serial monitor:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310806;image)
And a final test with FlukeView Forms:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310808;image)
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310810;image)
A guess next is a mini IrDA shield for Arduino Nano.
![Grin ;D](https://www.eevblog.com/forum/Smileys/default/grin.gif)
Hi,
At what points in your scheme you control signal by oscilloscope? Could you post form of your signal between ground and D3 input?
p.s. solution with additional BT module cool, but would be interesting know, how often that guy change battery in him meter..
So on this image:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310802;image)
Yellow is signal at D0(RX) and blue is signal on D7. So the image is showing encoding of serial data like here:
![](https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/?action=dlattach;attach=310825;image)
At D3 signal is HIGH most of the time. When photo transistor senses IR light the signal on D3 goes LOW:
Thx,
Yes, It should be High level, because on Rx and Tx lines constant High always when no signal transmission (silent). Phototransistor probably work well for your application, because your solution use only 9,6 Bauds speed. Try to use fast speed photodiode and BC847 transistor for example. This will give you much better rise fronts for short pulses. Best phototransistors have couple-tens uS for rise up, while photodiodes have 5-100 nS
Tnx.
![ThumbsUp :-+](https://www.eevblog.com/forum/Smileys/default/icon_smile_thumbsup.gif)
I have SFH203-FA photo diodes (with 5ns switching time) at home.
https://goo.gl/j5ibUA(I have bought many different IR transmitting diodes, detectors and transistors for this mini project...)
Can't wait to try it out to see the recovery time.
i'll try to implement your idea for a gossen metrahit 28s, it send data in hex or binary mode
![Huh? ???](https://www.eevblog.com/forum/Smileys/default/huh.gif)
, i have the rs232 protocol infos
but i'm noob in arduino programming ...
asking 300$ usd for an interface ... if i can find it.
I have SFH203-FA photo diodes (with 5ns switching time) at home. https://goo.gl/j5ibUA
(I have bought many different IR transmitting diodes, detectors and transistors for this mini project...)
Can't wait to try it out to see the recovery time.
It should be are bomb!
![ThumbsUp :-+](https://www.eevblog.com/forum/Smileys/default/icon_smile_thumbsup.gif)
Osram photodiodes really cool! While I use 100 ns Vishay's T-1 package's photodiodes (17 uA photocurrent), fronts from them also seems very good even for 115,2K baud rate and maximum available amplitude for this speed.
What reason to have 200 Ohm resistor in this chain? Try to increase 22kOhm to 70 kOhm for better amplitude. Best value for bottom resistor you can always find with oscilloscope particularly for your connection speed.
![Wink ;)](https://www.eevblog.com/forum/Smileys/default/wink.gif)
For 9600 baud 100 K also will work well
Not sure, perhaps for diode protection. But since arduino inputs are in high impedance state I don't think it is needed.
With 5V source and with 200ohm top resistor and 10k on the bottom I got 3.8V signal pulses while pointing TVs remote controller into it.
Which is more than enough for stable triggering.
I'll do some more tests...
No sure, perhaps for diode protection. But since arduino inputs are in high impedance state I don't think it is needed.
With 5V source and with 200ohm top resistor and 10k on the bottom I got 3.8V signal pulses while pointing TVs remote controller into it.
Which is more than enough for stable triggering.
I'll do some more tests...
No, no, no....
![Ohms \$\Omega\$](https://www.eevblog.com/forum/Smileys/default/omega.gif)
Photodiodes work connected backward than emitting diodes. Reverse voltage 50V for your diode. No any protection resistor needed till you not reach 50V in chain.
Forget about TV remote control. There emitting diode work with high pulse currents more than 100 mA! You need focusing at emitting light power from your meter, that significant lower!
Photodiodes work connected backward than emitting diodes. Reverse voltage 50V for your diode.
I know that. My thought was that when photo-diode starts conducting in backwards because of IR light the current from source could damage it if there was no resistor in series...
But this could only happen if you had it connected directly between 5V and ground.
I might also be totally wrong about this...