Tuesday, June 2, 2009
Last Thursday was spent debugging (trying to fix) the I2C interface for the uorc. Unfortunately an issue prevented me from receiving a proper response from the sensor. I spent the entire day working on this. I used the oscilloscope to view the transmission as a digital signal. I was able to directly view the transmit and receive and see what the issue may be. The sensor would always respond with random values, which appeared as a series of 8 random voltage states of either 0V or 5V.
Sunday I met with Akash as he showed me the LED beacons and what they were supposed to do. The LED beacons that he provided information for is intended to output a pulse on the LED which give a camera the beacon's ID number. This ID number allows the camera to locate and track each robot, along with providing other robots with an idea of which robot it is looking at. I took the string of 1s and 0s that make up the pulse and output it at a frequency of 10Hz. Chris, another member of April, is currently working on implenting support for these beacons on a PC.
Yesterday, Monday, I finally discovered the issue that was preventing I2C from working. In a microcontroller everything is defined by register values. Registers simply hold a binary number and define the behavior of a microcontroller. In this case, I was giving a value to one register before another in the wrong order, which caused the first register to reset. This caused the frequency of the I2C interface to rise substantially higher, which meant the sensor I was communicating with did not have enough time to respond. By simply switching the order in which I was modifying the registers, everything started to work perfectly. I also began to work on the LED beacons. I programmed one of the beacons with a small program I made and gave it to him to work on. Unfortunately the other LED beacons were not accepting any programming requests from the programmer.
Today the first thing I did was finish up the I2C interface and started to work on the LED beacons. After talking with Akash, the person who designed/made the boards, I discovered that the voltage I was programming at was too high. I set the voltage just slightly high enough to overcome the voltage drop of the resistor and LED which caused the programmer to think a short was occuring. By lowering the voltage from 5.1V to 3.7V, the beacons began working perfectly. I spent the rest of the day building 7 beacons. Thankfully my technician background and work experience last summer afforded me an easy time soldering the SMD components.