Over the last few weeks I have been working on a DiSEqC decoder using an Arduino board.
The idea started a few years ago when Mike Berg, N0QBH posted his decoder using a PIC chip.
My weapon(micro-controller) of choice is the Atmel series of chips. Most of the Arduino boards have Atmel chips, so their boards are perfect. I built the PIC version from Mike and it worked perfect. However, it did just what it said and decoded the DiSEqC packets and printed the Hex numbers. I wanted more. I wanted it to print out on a display what all those numbers meant.
When I get a print out of: E0 31 6B 04, ok now what? Okay, so I go to the documentation over at, Eutelsat, download a PDF and look it up.
I don't want to have to do that every time. This is not 1985, I have a micro-controller chip with enough memory and fast enough to decode all this, and print to a display in-between packets.
So the search began, kinda as a side thing, I didn't pour hours into it at first.
Didn't want to re-invent the wheel, so began searching Google for Arduino + DiSEqC.
WOW, really nobody had done it before. I know FTA is niche in NA, but not in other parts of the world.
Arduino + Atmel same thing, people had asked about it on the arduino forum, but no one offered a solution or any code. YouTube has a couple of videos in languages I do not speak, showing a very poor video decoding but no code offered or any website to their code. Trying to email these people yielded nothing.
I did run across the stuff over at http://www.juras-projects.org/eng/projects.php, which everyone always posts here on the site when someone mentions DiSEqC decoding. However, they do not release the source code, just the hex file to burn to a chip.
Then one day qwert1515 posted something about using an arduino to decode DiSEqC packets. So my interest piqued again and I fired off an email to him. He quickly sent me some working code and a schematic.
Finally!!!!!
Except I tried everything and could never get it to decode.
He said his worked fine; all it did was print the binary to a serial port, ie. 1110 0000 0001, etc., but was a start.
However, I never got it to work. So got off to other things, and it went to the back burner again.
At some point along the way I bread boarded the circuit again loaded the code up on an uno, or nano board and tried again. Nope.
Fast forward to a couple of months ago.
I decided I was going to this again and it will work!
So built up the circuit again and loaded up the code. Not surprising still nothing.
I knew the code on the Arduino was trying to do something, because if I touched the pin the code was reading I got a hundreds of random 1's and 0's on the screen... and only when I touched it.
Ok, time for me to really sit down and read all the pages of documentation over at Eutelsat and see how this works. I had went over it before, but had not had the determination I did now. Okay, so I think I got this, so going through Jeremy's(qwert1515) code, it should work. There was one line in his code I didn't understand, I meant I knew what it did, but couldn't figure out what it was doing in this case. I asked, he told me and I was like aha okay. So went back through his code and knowing how everything worked, made a few changes to suit my taste.
It should work, no reason for it not to.
Okay time to fire up the oscilloscope. Hmmm, what I thought I should see and what I was seeing was different. Okay...hmmm..Okay so I tried another receiver. Hey, that looks right, still nothing though.
Sooo, I started probing through the very simple circuit. Noticed was getting very much output going to the arduino. Tried a new transistor and a couple of caps, same result. What is going on here, the circuit is simple and should work fine.
Hmmm let's see, what if? Yes, of course, put a load on it. So I hooked up a LNBF and low and behold I stated seeing gibberish on the screen.
OK, but I don't want 1's and 0's. I remembered a couple of years ago, Jeremy had sent me some code to convert the pulses to the Hex output. I looked it up and put it with the code and there is was.

I was seeing what looked right. After some further looking though, it was not right. The commands printed did not match anything on Eutelsat or anywhere. Only thing that was right was the E0 at the start. Okay back to the documentation. Aha, each byte also includes a odd parity bit that is not necessary for decoding for what I want. So add some line to the code to ignore every ninth bit that is received.
Finally after over two years there it was decoding and decoding properly to the screen via the serial port.
This was all based on Jeremy's code and using polling. I have tried to contact him, but he is busy with work right now and, I have not got a reply back, so I will not post his code or the version I modified based on his code.
However, during on this over the last few weeks, I wrote a program from scratch and using interrupts. I don't have the code fully documented as to what everything does, but I will post it.
I have searched for over two years trying to find something for the Arduino, I sure am not going to brag about mine and not post it. I hope it can help someone else.
I hope someone on here will do it themselves. I would really like it if someone built it that knows C programming well and can offer their changes to make the code better and why they did it.
My code is far from Dennis Ritchie, but it works and seems to work pretty well.
Enjoy.
The idea started a few years ago when Mike Berg, N0QBH posted his decoder using a PIC chip.
My weapon(micro-controller) of choice is the Atmel series of chips. Most of the Arduino boards have Atmel chips, so their boards are perfect. I built the PIC version from Mike and it worked perfect. However, it did just what it said and decoded the DiSEqC packets and printed the Hex numbers. I wanted more. I wanted it to print out on a display what all those numbers meant.
When I get a print out of: E0 31 6B 04, ok now what? Okay, so I go to the documentation over at, Eutelsat, download a PDF and look it up.
I don't want to have to do that every time. This is not 1985, I have a micro-controller chip with enough memory and fast enough to decode all this, and print to a display in-between packets.
So the search began, kinda as a side thing, I didn't pour hours into it at first.
Didn't want to re-invent the wheel, so began searching Google for Arduino + DiSEqC.
WOW, really nobody had done it before. I know FTA is niche in NA, but not in other parts of the world.
Arduino + Atmel same thing, people had asked about it on the arduino forum, but no one offered a solution or any code. YouTube has a couple of videos in languages I do not speak, showing a very poor video decoding but no code offered or any website to their code. Trying to email these people yielded nothing.
I did run across the stuff over at http://www.juras-projects.org/eng/projects.php, which everyone always posts here on the site when someone mentions DiSEqC decoding. However, they do not release the source code, just the hex file to burn to a chip.
Then one day qwert1515 posted something about using an arduino to decode DiSEqC packets. So my interest piqued again and I fired off an email to him. He quickly sent me some working code and a schematic.
Finally!!!!!
Except I tried everything and could never get it to decode.

He said his worked fine; all it did was print the binary to a serial port, ie. 1110 0000 0001, etc., but was a start.
However, I never got it to work. So got off to other things, and it went to the back burner again.
At some point along the way I bread boarded the circuit again loaded the code up on an uno, or nano board and tried again. Nope.
Fast forward to a couple of months ago.
I decided I was going to this again and it will work!
So built up the circuit again and loaded up the code. Not surprising still nothing.
I knew the code on the Arduino was trying to do something, because if I touched the pin the code was reading I got a hundreds of random 1's and 0's on the screen... and only when I touched it.
Ok, time for me to really sit down and read all the pages of documentation over at Eutelsat and see how this works. I had went over it before, but had not had the determination I did now. Okay, so I think I got this, so going through Jeremy's(qwert1515) code, it should work. There was one line in his code I didn't understand, I meant I knew what it did, but couldn't figure out what it was doing in this case. I asked, he told me and I was like aha okay. So went back through his code and knowing how everything worked, made a few changes to suit my taste.
It should work, no reason for it not to.
Okay time to fire up the oscilloscope. Hmmm, what I thought I should see and what I was seeing was different. Okay...hmmm..Okay so I tried another receiver. Hey, that looks right, still nothing though.
Sooo, I started probing through the very simple circuit. Noticed was getting very much output going to the arduino. Tried a new transistor and a couple of caps, same result. What is going on here, the circuit is simple and should work fine.
Hmmm let's see, what if? Yes, of course, put a load on it. So I hooked up a LNBF and low and behold I stated seeing gibberish on the screen.

OK, but I don't want 1's and 0's. I remembered a couple of years ago, Jeremy had sent me some code to convert the pulses to the Hex output. I looked it up and put it with the code and there is was.


I was seeing what looked right. After some further looking though, it was not right. The commands printed did not match anything on Eutelsat or anywhere. Only thing that was right was the E0 at the start. Okay back to the documentation. Aha, each byte also includes a odd parity bit that is not necessary for decoding for what I want. So add some line to the code to ignore every ninth bit that is received.
Finally after over two years there it was decoding and decoding properly to the screen via the serial port.

This was all based on Jeremy's code and using polling. I have tried to contact him, but he is busy with work right now and, I have not got a reply back, so I will not post his code or the version I modified based on his code.
However, during on this over the last few weeks, I wrote a program from scratch and using interrupts. I don't have the code fully documented as to what everything does, but I will post it.
I have searched for over two years trying to find something for the Arduino, I sure am not going to brag about mine and not post it. I hope it can help someone else.
I hope someone on here will do it themselves. I would really like it if someone built it that knows C programming well and can offer their changes to make the code better and why they did it.
My code is far from Dennis Ritchie, but it works and seems to work pretty well.
Enjoy.
Last edited: