Serial Current Loop

I am working on a project which uses an Arduino Uno to communicate with a scoreboard. The scoreboard protocol is a current loop so I am using a TTL to RS-232 converter which I can connect to a PC and see the Arduino's output. From the RS-232 converter through a RS-232 to Current Loop converter. The scoreboard needs to see a Hexadecimal output from the Arduino telling the scoreboard to display how many points and timer control. So I have a program that output this but scoreboard is not updating. My question is has anyone done this type of project with any success? Does anyone have any suggestion? Is there an Arduino board to convert TTL to Current Loop? Any help would be great. Thanks.

You might use a MIDI shield as MIDI also uses serial communication with current loop. At which current level does your scoreboard operate?

I dont know what current the scoreboard runs at, I can only assume its 20ma.

You can surely break the existing current loop and insert a milliamp meter. the marking current should be 20 ma. A remote possibility would be 60 ma, like a really old telletype machine.

Do you know the baud rate of the display and is the Arduino the same? Which device is supplying the current for the current loop? One device or the other must be the supplier.

Paul

I know the baud rate is 2400 8,n,1. I ordered a midi shield and will try that and see.

Ok, have a midi shield from linksprite. Any help on where to begin. I have the following sample code and I am trying to covert back to rs-232 using a current loop to rs-232 converter to see results on PC.

/*
MIDI note player

This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data.
If this circuit is connected to a MIDI synth, it will play
the notes F#-0 (0x1E) to F#-5 (0x5A) in sequence.

The circuit:

  • digital in 1 connected to MIDI jack pin 5
  • MIDI jack pin 2 connected to ground
  • MIDI jack pin 4 connected to +5V through 220-ohm resistor
    Attach a MIDI cable to the jack, then to a MIDI synth, and play music.

created 13 Jun 2006
modified 13 Aug 2012
by Tom Igoe

This example code is in the public domain.

*/

void setup() {
// Set MIDI baud rate:
Serial.begin(31250);
}

void loop() {
// play notes from F#-0 (0x1E) to F#-5 (0x5A):
for (int note = 0x1E; note < 0x5A; note ++) {
//Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
noteOn(0x90, note, 0x45);
delay(100);
//Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
noteOn(0x90, note, 0x00);
delay(100);
}
}

// plays a MIDI note. Doesn't check to see that
// cmd is greater than 127, or that data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(cmd);
Serial.write(pitch);
Serial.write(velocity);
}

Any one able to help with this project?

Ok, not having any luck with the Midi Shield. I basically want to be able to transmit the following on a 20ma current loop, if anyone has any experience or can add any helpful points would be great.

df 00 e0 00 e4 00 e8 10 ee 70 f1 70 f5 00 f8 06 ß.à.ä.è.îpñpõ.ø.
fe 7f 81 7f 85 00 88 00 8e 40 90 00 94 6d 98 66 þ….ˆ.Ž@.”m˜f
9e 00 a0 00 a4 00 a8 00 ae 00 b0 00 b4 3f b8 3f ž. .¤.¨.®.°.´?¸?
be 70 c1 70 c5 3f c8 3f ce 45 d0 00 d4 06 d8 00 ¾pÁpÅ?È?ÎEÐ.Ô.Ø.
Above is with the following on controller:
Time: 45:00 score Home: 00 Score Visitor: 00 Period: 1

d8 40 de 00 e0 00 e4 00 e8 10 ee 70 f1 70 f5 00 Ø@Þ.à.ä.è.îpñpõ.
f8 06 fe 7f 81 7f 85 00 88 00 8e 40 90 0f 94 3f ø.þ….ˆ.Ž@.”?
98 5b 9e 00 a0 00 a4 00 a8 00 ae 00 b0 00 b4 3f ˜[ž. .¤.¨.®.°.´?
b8 3f be 70 c1 70 c5 3f c8 3f ce 20 d0 0f d4 06 ¸?¾pÁpÅ?È?Î Ð.Ô.
Above is with the following on the controller:
Time: 00:20 Score Home: 00 Score Visitor: 00 Period: 1

ce 20 d0 0f d4 06 d8 40 de 01 e0 00 e4 00 e8 10 Î Ð.Ô.Ø@Þ.à.ä.è.
ee 70 f1 70 f5 00 f8 06 fe 7f 81 7f 85 00 88 00 îpñpõ.ø.þ….ˆ.
8e 40 90 0f 94 3f 98 5b 9e 00 a0 00 a4 00 a8 00 Ž@.”?˜[ž. .¤.¨.
ae 00 b0 00 b4 3f b8 3f be 70 c1 70 c5 3f c8 3f ®.°.´?¸?¾pÁpÅ?È?
Above is with the following on the controller:
Time: 00:20 Score Home: 01 Score Visitor: 00 Period: 1

You have not answered the question about which device is powering the 20ma current loop! I am assuming the display powers the current loop. A normal 20ma current loop uses an on/off sequence for data. On is marking or zero bit. Off is a space or a 1 bit. This can easily be done with an opto-coupler that will handle 20ma. This would isolate the Arduino from the line. TTL would drive the LED in the opto-coupler.

Paul

Yes the display is powering the current loop. I am using an adapter for the Arduino to get to RS-232 the using an adapter to convert RS-232 to current loop, but this still does not work. Then someone suggest MIDI so I now have a MIDI Shield but can not get either to work. I would prefer to use the RS-232 to current loop adapter. I am just having a problem getting the output right and have no way to test if it is even working. I did try to go through the RS-232 to current loop adapter back through another current loop adapter back to RS-232 to a PC but not getting and output. Thanks for your help.

Change the baud rate to the lowest you can go. Use a VOM, or if nothing else a DVM, to see if there is a fluctuation in the RS-232 output. Try pin 3 and then pin 2 to pin 7. You should be able to see movement!

Paul

I am still working on this project with no luck. I did decide to connect controller to pc through current loop converter and see what the RAW data is and this is what I found.

[06]Ø@Þ[00]à[00]ä[00]è[10]îpñpõ[00]ø[06]þ…[00]ˆ[00]Ž@[0F]”?˜[ž[00] [00]¤[00]¨[00]®[00]°[00]´?¸?¾pÁpÅ?È?Î Ð[0F]Ô
[06]Ø@Þ[00]à[00]ä[00]è[10]îpñpõ[00]ø[06]þ…[00]ˆ[00]Ž@[0F]”?˜[ž[00] [00]¤[00]¨[00]®[00]°[00]´?¸?¾pÁpÅ?È?Î Ð[0F]Ô
[06]Ø@Þ[00]à[00]ä[00]è[10]îpñpõ[00]ø[06]þ…[00]ˆ[00]Ž@[0F]”?˜[ž[00] [00]¤[00]¨[00]®[00]°[00]´?¸?¾pÁpÅ?È?Î Ð[0F]Ô
[06]Ø@Þ[00]à[00]ä[00]è[10]îpñpõ[00]ø[06]þ…[00]ˆ[00]Ž@[0F]”?˜[ž[00] [00]¤[00]¨[00]®[00]°[00]´?¸?¾pÁpÅ?È?Î Ð[0F]Ô
[06]Ø@Þ[00]à[00]ä[00]è[10]îpñpõ[00]ø[06]þ…[00]ˆ[00]Ž@[0F]”?˜[ž[00] [00]¤[00]¨[00]®[00]°[00]´?¸?¾pÁpÅ?È?Î Ð[0F]Ô
[06]Ø@Þ[00]à[00]ä[00]è[10]îpñpõ[00]ø[06]þ…[00]ˆ[00]Ž@[0F]”?˜[ž[00] [00]¤[00]¨[00]®[00]°[00]´?¸?¾pÁpÅ?È?Î Ð[0F]Ô

From what I see is ASCII and decimal mixed together. Because I can connect controller output to PC I should be able to get Arduino output connected to scoreboard, I just don't think the data being sent from Arduino is correct. The Arduino is sending all HEX data.

If anyone can make any sense out of this it would be greatly appreciated. Thank You.

The Arduino is sending all HEX data.

No. The Arduino is sending binary data. The value may be one that has a recognizable character associated with it, when you look at the value in an ASCII table, or it may not.

Ok, does anyone have any clue where i should even start with what the Arduino should be outputing to communicate with my scoreboard.

wjfisherjr, it appears you are not really reading what people are suggesting to you, as you seem to ignore what is being said.

Take for example, the last post of PaulS, where he suggests to you that the Arduino is sending data as binary, not as hexadecimal.

Did you go and look at the ASCII table yet, no, well here is a link for you, ASCII Table ?

I don't know the details of your device and you really haven't provided much to go on.

For example, if you wish to send a number 35 out the serial port for your scoreboard, you will likely need to do the following.
First, realise that the number 35 is made up of two characters, a 3 and a 5.
The number 3 in the ASCII table is 51 decimal, and the number 5 is, you guess it, 53 decimal.
So, if you send using serial.write the value 51 followed by another serial.write with value 53, you may be getting closer.

If in fact you need to send hex, then send the hex codes instead of decimal.

Many years ago, these sort of projects were common place, to work with different serial interfaces.

As Paul_KD7HB suggested to you, you do not need the RS-232 interface together with the RS-232 to current loop converter.
You simply need an opto-coupler set up correctly.
Why not do an online search for digital 20mA current loop circuit ?
It must be your lucky day, here, I did it for you, and this link will tell you much to learn about digital current loops.
As you will notice, there are even simple schematics based on opto-couplers, just as Paul_KD7HB suggested.

Forget the MIDI interface, it may not provide enough current, maybe as low as 5mA, which will not be enough for the scoreboard I think.


Paul - VK7KPA

Well I stepped away from this project for a while and ready to get back at it. First I would like to apologize to anyone who thought that I was not listening to your replies, when I have and already research all that you are talking about.

The scoreboard I am connecting to is a passive receiver side of the current loop and I am using the B&B converter shown in section 3.0 of your link for digital current loops. I am able to receive the data from the original controller into a PC RS-232 port though this converter. So I just need to flip that and transmit to the scoreboard.

The scoreboard needs the following data:
df 00 e0 00 e4 00 e8 10 ee 70 f1 70 f5 00 f8 06 ß.à.ä.è.îpñpõ.ø.
fe 7f 81 7f 85 00 88 00 8e 40 90 00 94 6d 98 66 þ….ˆ.Ž@."m˜f
9e 00 a0 00 a4 00 a8 00 ae 00 b0 00 b4 3f b8 3f ž. .¤.¨.®.°.´?¸?
be 70 c1 70 c5 3f c8 3f ce 45 d0 00 d4 06 d8 00 ¾pÁpÅ?È?ÎEÐ.Ô.Ø.

I am not sure if the scoreboard needs the HEX or ASCII or a combination of both.

So today I tried to receive data into the Arduino but no luck. I figured If I could receive the data then I could just duplicate that on the output.

When I am back at work tomorrow I will check my notes and give any more information I think would be relative.

The data you have is simply a representation of the actual binary data stream shown as both hexadecimal and ASCII, with spaces between each byte.

You need to learn and get clear on how binary and hexadecimal and ASCII and maybe Octal are all used to simply show the same thing in different formats for humans to read. At the root, it is all binary at a specific word size, be that 8 bits or 16 bits or whatever.

I imaging you read in that data stream with some terminal application, which will format up the data stream into hexadecimal and also ASCII which is helpful for finding text sections in binary data.

I think you said the scoreboard wants the data to be sent as hexadecimal, and my experience from using these things twenty or more years ago is that this was the case with the devices I used then.

So, I have taken that data stream of yours and removed all the ASCII and the spaces.
Try sending the following to the scoreboard, using the normal serial.print command.

df00e000e400e810ee70f170f500f806fe7f817f850088008e409000946d98669e00a000a400a800ae00b000b43fb83fbe70c170c53fc83fce45d000d406d800

If it wants binary, then send it as binary using the serial.write command.


Paul - VK7KPA

I spent some time yesterday working on this project and have had some success. I am able to connect my laptop to the current loop converter through serial port and send ASCII characters through Termite Terminal program and the score board works. I am doing some research on the Termite Terminal program to see what it is actually outputting so that I can duplicate on the Arduino.

So when I send this, àäÐ Ô the scoreboard sets timer to 20 sec and score 00.

I am not sure but I believe the Termite program is sending binary but not sure.

If any could shed some light on this would be great.

Thanks

So, did you even try what I suggested ?
If you did, what were the results ?
If you did not, why not ?

Again I will say in a loud voice, please go and gain a clear understanding of the relationship between ASCII and Hex and Decimal codes. Here, a standard ASCII table chart for you to study, http://www.asciitable.com/.

Take for example the very standard letter A, look for it in that table, and you will see it is hexadecimal code 41, as in 0x41, and also it is decimal code 65.

Why, because the letter A is the 65th letter along in the ASCII table and that is also the 0x41 in hex.


Paul - VK7KPA

rockwallaby

I am sorry that you feel that I am not listening and don't understand ASCII. I am not an expert but I can read the ASCII chart just fine and have seen it while trying to get this figured out. I did use this chart to get the code I sent in the last reply.

I did try what you asked and it does not work. From what I can see I have not successfully got the Arduino to connect to scoreboard at all. I say this because if I use the terminal program when I send anything the RX light on the scoreboard is blinking and getting the transmission. I have not had any luck getting anything from Arduino to blink this RX led.

What I am asking is if the terminal program works I need to duplicate that signal on the arduino and it should work. The program I am using is Termite. I would guess it is ASCII but I am not sure.

In closing I really appreciate your quick responses and sorry for me sounding alittle dumb but I am new to this and learning and I thought that was what this forum was for.