I’m hoping this may be of use to some teams out there who’d like to be able to control their new 2004 EDU RC with a previous year’s OI. What we’ve done is to connect the serial port on the 2003 EDU RC to the serial port on the 2004 EDU RC, and then modified the code for each so that the 2003 EDU RC simply acts as a forwarding device to send the joystick & button data from the OI into the 2004 EDU RC. Essentially, the 2003 EDU RC becomes a fancy radio modem.
There are only 2 pieces of hardware that you’ll need to duplicate this setup. First is a special serial cable to connect the 2 RCs. This serial cable needs to only have 3 wires and connect the pins like this:
Unfortunately one of the pins on the 2003 EDU functions as a reset line, so if it gets connected to the wrong pin on the 2004 EDU then the 2003 EDU will just stay in reset and not boot up. That’s why the above 3 wire cable is best. I have not tested a standard null-modem cable though, so that may work as well depending on what’s connected to what.
The other thing you will need to do is figure out a way to power both EDU RCs at the same time. We did not receive a new EDU battery with the 2004 kit, so I’m assuming noone else did either. The best option for this problem is probably to order a second battery from Innovation First. Otherwise, if you’re feeling adventurous, you may be able to construct a Y power cable to power both RCs from the same battery pack.
Once you have figured out how to power both EDUs and made your serial cable, then simply download the code for each EDU from the zip file I’m attaching to this post. There’s an OIPassthru.bsx file for the 2003 EDU and an MPLAB IDE project for the 2004. Your own code should still go in user_routines.c or user_routines_fast.c, just like with the default EDU code.
Well, hopefully this is helpful to some teams. Please feel free to reply with questions and we’ll do the best we can to get them answered.
*Originally posted by Holtzman *
**So let me get this straight.
WE cannot use the operator interface from last year with the new edu controller? or have i got this totally wrong. **
You can not use the full-size OI no. It will put out too much voltage and kill your 2004 edu-rc.
*Originally posted by Skabana159 *
**What exactly did you do to the code? **
Primarily I added functions to receive data over the serial port on the 2004 EDU. For some reason, IFI provided code to send data out but didn’t provide any mechanism to receive data. On top of those functions I built another function to capture the data coming from the 2003 EDU to a structure. Beyond that I just modified the Default_Routine() function to use the OI data instead of the PWM in data.
We are adapting the EduRC to our 2003 robot. We built the cable and have finished the user portion of the code. This has allowed us to run the 2003 OI controls without modification. Our drivers may not even know the difference!
Our plan is to use this robot as a test bed for 2004 software development
We also try to control the pmw this work as well. So we will use this set-up to test and right code for our 2 speed 2 motor air shift transmission we our developing.
I´ve tried to connect the edu´s, but I had some problems.
I downloaded the program into 2003 EDU and into 2004 EDU with total sucess.
After that, I tested the communication sending pwm_03 = 250 , and engaging a servo motor into pwm03, in the 2004 EDU RC. It moved. So I tried pwm_03=127 and the servo stopped. Great, it worked.
Now, we tried to turn on the 2003 Operator Interface, in order to send Joystick data to the 2004 EDU controller (note: using 2003 radio modens). But for some reason it went crazy, and the servos didn´t respond to the joystick, they just start running at top speed, without stopping.
We plugged both RC in a main power source with 7,2 V, so it should power then at the same time.
We are trying to use TTL communication using Parallax RF modules, did anyone try to use something like this? What about the 3 pins for TTL communications, I read that there´s no custom code in the default program for it, is that true?
We have a lot of thing in mind such as: pluging joysticks in parallax boards of education. After that we plug one RF transmitter, and we use another Parallax board to receive the signal. Finally, we program the receiver board to convert the signal (in value) to PWM signal (used in the 2004 RC). This is a little harder, but it works in theory.
First are you using the 2003 EduRC with its internal Modem? The cabling goes between the two EduRC’s to link them serially through the DB9 ports. The RC modem is not used.
The user_routine.c file is specific about which joystick controls which pwm_out.
============================================================
pwm01 = pwm03 = Limit_Mix(2000 + OIData->p1_x + OIData->p1_y - 127); /* LEFT WHEELS /
pwm02 = pwm04 = Limit_Mix(2000 + OIData->p1_y - OIData->p1_x + 127); / RIGHT WHEELS /
pwm01 = pwm03 = 255 - pwm01; / reverse direction of left side */
/* ------ Other PWM OUTPUT Mapping (can be used for two-joystick drive ------/
pwm05 = OIData->p3_x; / limited by digital inputs 1 & 2 below /
pwm06 = OIData->p3_y; / limited by digital inputs 3 & 4 below */
pwm07 = OIData->p4_x;
pwm08 = OIData->p4_y;
Plugging into pwm03 may be giving you the strange actions. The default program uses it with the mix routine. The syntax is also very picky for OIDATA->___. Also if the modem on the 2003 EduRC is not firmly seated into the motherboard you wil get erratic motion up to and including basic run and init errors.
We have successfully adapted our 2003 code and can run our 2003 robot with this setup and our 2003 OI.
The 2003 Edu RC receives data from 2003 Operator Interface. Then the 2003 Edu RC, witch is** serial ** connected to the new Edu throught one cable (with the three wires like you said), sends the data to the new Edu RC.
Now… Is this correct? I guess so, 'cos it´s exactlly what we did.
The main question is: why can´t we control the servos attached in the pwm outputs located in the new Edu RC ? When we move the joystick we get no light blinking in the Operator Interface…
Thanks for your help, we´ll work harder in the assembly to try to figure it out our mistakes. Just let me know if you found any difficulties like ours, so we can share solutions.
I am still a little confused on your set-up. What are you using for the modem on the 2003 EduRC? For your test, plug the servo into pwm08 and test with py_4, this is a direct link.
The setup that we are using is as follows:
2003 OI with its Radio Modem, Team Number set (ours is 716) per IFI instructions.
2003 EduRC with its interal modem (this is the black box with two sets of multiple pins and plugs into the bottom of the motherboard) and motherboard, Team number set to 716, switch set to ‘program’. Do not use the full size RC radio modem. I think you are using the internal modem because you said you had no problem programming.
2004 EduRC
Cable between the 9 pin connectors of the EduRC’s. Note- must be per this thread, note crossover between pins 2 and 3. Do not use a standard serial cable!
Could we not just plug in the 2003 radio modem directly into the 2004 EDU/Full-Size RC?
Of course, we’d need to know the 2003 communications protocol to write the receiving code in C. Is this documented anywhere? Better yet, is anybody working on this?
This would be a good engineering challenge for the students.
The reason we chose not to solve the problem this way is that it would be significantly more complicated for other teams to duplicate. The radio modems use RS422, so a converter would be necessary to get either an RS232 or TTL signal to hook up to the 2004 EduRC. Additionally, the radio modem requires an input that toggles it between command & data modes, which would have to be hooked up to a digital output on the Edu. Finally, the OTA (over-the-air) protocol is only partially documented for RC->OI communication and entirely undocumented for RC->OI. Also, using the old Edu provides an easy way to set the team number =) (otherwise it would probably have to just be a constant in the software).
We won’t know until Saturday about the full-size controller, but as for the EDU…
The reasons that you can’t plug the 2003 modem into a 2004 EDU are
It doesn’t have a modem port.
You could create an external box that converted the serial signal of the modem to the inputs on the EDU. This would require a relatively simple microprocessor circuit.
You can’t plug it into the serial port because the voltage levels are incompatible.
You could create an external box to shift the level of the modem signal, then plug into the serial port, and write some interface code to process the signal.
While both workarounds are good challenges, Dave’s solution was designed to be a quick, low cost for teams that have a 2003 EDU, but do not have the resources to design the necessary interface circuitry.
I would imagine that at this stage in the game that most teams would be more interested in exploring how to write functioning C code than creating interface modules.
EDIT: Dave beat me to the punch in replying, sorry for the duplication
Don´t forget that the 2003 EDU has an internal modem, so it´s not necessary to use the any other radio.
Just build one cable, inverting ports 2 and 3 as said in this topic, and it´s all set! Just download the code, turn on the Operator Interface with the radio, and the 2003 EDU will trasmit data to the 2004 EDU. Simple serial communication, that´s all.