PPDB - Using the full PPDB - Updated Code Version 1.4

Jorge PJorge P Posts: 346
edited January 2012 in Robotics Vote Up0Vote Down
Updated to Version 1.4 December 3rd 2011

I am working on a project to fully use the PPDB with as little extra components as possible, so far I've had to add two PCA 9555 IC's and have added a 4x4 Matrix keypad that will be connected to one of the PCA9555 IC's. With the exception to the I2C Bus Expanders, I will be using parts available directly through the Parallax Store.

I will be updating this post as the project progresses. I anticipate the total cost of the project will be around $300 US for all the parts and the PPDB. I should also note that I will be adding a GPS Unit later, after I have a 4x4 Matrix Keypad working.

Parts Needed So Far:

Please see my Blog for more info http://forums.parallax.com/blog.php?53890-Jorge-P . In the mean time, here is a video. NOTE: This link will update as the project progresses.

Video will be updated Each time the code is updated.

Update Log:
  • Added the 4x4 Matrix Keypad on Propeller pins 8 through 15
  • Pressing the * and # keys together on the keypad displays the date.

  • Changes to the code and pin outs.
  • I can now display the date by pressing the PPDB's Button 0, and the date will display until you release the button.
  • The previous version was 1.2 so this update is 1.3. (Code will be available by 5pm)

Next Updates:

  • V1.5 - Update Time and Date with Keypad.
  • V1.6 - Reattach the uM-FPU V3 to the I2C Bus and test.
  • V1.7a - Attach GPS to the uM-FPU V3 and test.
  • V1.7b - Compile uM-FPU code for GPS Great Circle math, setup commands to read just a date/time/GPS String/Latitude/Longitude/Speed/Course/Altitude all separately.
  • V1.8 - Automatically update date and time according to GPS
  • V2.0 - Attach an micro-SD card reader with 4GB card and test
  • V2.?? - Micro-SD/OS related updates
  • V3.0 - Attach TV Output and test.
  • V3.?? - TV Related updates
After version 3.?? I will be trying to add keyboard and mouse if there is enough room, if not I will try to incorporate loading drivers and code from SD Media or add some additional RAM. If everything is working properly in Spin, I will start asking if someone can progressively convert the Spin to PASM.

If there is still room, I will add some additional PCA9555's to access the dip-switch, Buttons, & LED's which will require at least 2 more.

I would like someone to help with reducing the spin code size, PM Me if you are willing.


  • 12 Comments sorted by Date Added Votes
  • mindrobotsmindrobots Posts: 6,488
    edited September 2011 Vote Up0Vote Down
    Nicely done!

    I missed what the second board wired to the PPDB was ( the little one toward bottom right).

    Hope you get your flicker under control!!
    MOV OUTA, PEACE <div>Rick </div><div>"I've stopped using programming languages with Garbage Collection, they keep deleting my source code!!"</div>
  • Jorge PJorge P Posts: 346
    edited September 2011 Vote Up0Vote Down
    mindrobots wrote: »
    Nicely done!

    I missed what the second board wired to the PPDB was ( the little one toward bottom right).

    Hope you get your flicker under control!!

    The board in the lower right is one I made for the um-FPU V3 but I am not using it yet, the GPS unit, the red thingy in the video, will be connected to it on the I2C bus to update the time clock on startup. I will also be adding TV out if there is room in on the RAM but I can just add 1 or more 24LC256's at different addresses if I need more room and load them in another cog.
  • Jorge PJorge P Posts: 346
    edited November 2011 Vote Up0Vote Down
    I thought I would take some time to let anyone still interested in this project know I am still working on it. The 4x4 matrix keypad connected to the first PCA9555 was tough for a beginner like me to manipulate but I am making progress, maybe a week or two more till version 1.4 for the keypad.

    Aside from that... I am looking for code I saw a while ago but managed to lose it amongst all my files. I saw a method in a file that showed how to wait without pausing the cog, instead it just captured the current clock and resumed when it was a specific elapsed time from the capture. That's all I recall from it so I am lost at the moment as to what file/project I saw it in. I would like to use that section of code for reading the ds1302 in one second increments instead of multiple times a second like I am now.

    I'll be digging into all this again in a few days...
  • JLockeJLocke Posts: 332
    edited November 2011 Vote Up0Vote Down
    I posted some code in the Propeller forum a while back showing how I read the DS1307 every second...

  • Jorge PJorge P Posts: 346
    edited November 2011 Vote Up0Vote Down
    Thanks for the link, but that is actually what I am trying to avoid. I don't want to stop or pause the cog running the code. I just want to skip over some code until a certain time frame, in this case 1 second, has passed. Nice code though.
  • Jorge PJorge P Posts: 346
    edited November 2011 Vote Up0Vote Down
    I found the code I was searching for in post #5 it is called Clock.spin by "Jeff Martin (Parallax)" http://obex.parallax.com/objects/139/ . The description of what I should have asked for is "Synchronize code to the start of time-windows in units of microseconds, milliseconds, or seconds". That's exactly what I needed for reading the time clock during the loop while updating the display. I hope the LED flicker goes away with this since i will no longer be reading the DS1302 with each update of the display.

    I will try to remember to post all part numbers and sources with the next update in case anyone wants to rebuild this project.

    I decided to start a separate side project for learning to read the 4x4 Matrix keypad with the PCA9555, after that I will try to read the keypad in this project. I am also having a problem with not being able to read interrupts from the PCA9555 bus extenders, Do I need a pull up/down resister on the interrupt line?
  • Jorge PJorge P Posts: 346
    edited December 2011 Vote Up0Vote Down
    Code and video updated to Version 1.4 See the first post or click this link to go to the top.

    I will be using this project as a contest entry for the Quad Rover Contest. I will be placing all version archives on my website today or tomorrow, remind me if I get sidetracked, in case anyone wants to use it as a template for their own project. So far I've managed to keep the code to 626 longs, If BST is used it will be much less, 567.

    As stated in the video above, I know it wont be useful to everyone, but it should be useful to some.

    EDIT: I forgot to mention that this is all still using only 1 cog.
  • Jorge PJorge P Posts: 346
    edited December 2011 Vote Up0Vote Down
    I am having some type of hardware problem with this project. I double checked all my wiring and tried all of my code versions. I didn't change the wiring at all in the project since version 1.4, but I did move my board a few times. What is happening is all LEDs on the display are all on.

    Did I fry a PCA9555? I know the one controlling to Digit is working, however the one controlling the segments seem to be the one with the issue... Can anyone with experience with the PCA9555 chips help out with this? I don't have any test equipment, but it looks like the data I am sending to the device is coming out reversed, On when it should be off, and off when it should be on. It's not a problem in code since I am testing it with the working code as in the video above.

    One step forward, two steps back :frown:
  • rogersydrogersyd Posts: 198
    edited December 2011 Vote Up0Vote Down
    I love "use the whole board" projects. What a kick. I began a very similar project on a ppdb and found the board linked below to be especially useful. It allows you utilize those leds with a much smaller hardware footprint. The most ridiculous thing i built was a synth/fermium type device. My project used those digits to cycle time/date/frequency, and 4 line lcd to display menu items. That thing was sweet. As you add more hardware and functionally, eventually you'll find yourself optimizing code by modifying and harvesting code from objects. Their are "only" cogs after all. Then the bitter sweet day comes when you start harvesting parts for other temporary installations...

    I won't claim to have much experience with the chip in question, or even understand your issue correctly, but if the circuit is working with the bits reversed, just inverse them in your code as a work around. Eventually this thing will become impossible to move around without wires popping out and what not. Hard to say from the video, but unfortunately if you have a hardware issue here, you may need to bite the bullet, tear down that part of the circuit, and rewire it.

    Your code is well organized and tidy. That has never been a priority to me, so I can really appreciate it and vouch for it's importance. :) Good luck on your endeavor.

    You can't dance without stepping backwards occasionally.

    LED Driver for PPDB:
  • Jorge PJorge P Posts: 346
    edited December 2011 Vote Up0Vote Down
    if the circuit is working with the bits reversed, just inverse them in your code as a work around.
    I would rather avoid any future problems with a bad IC by replacing it, as opposed to altering my code work with a bad IC, I have several other PCA9555's so I will just use new parts. I should have socketed the PCA9555's but I bought 300wide sockets accidentally instead of 600wide.

    I will have to wait until I can purchase more parts, and that may be a while, so I am going to just end the project here! I will never buy Radio Shack boards for a project again, the pads break and burn off too quickly even with a 25W iron.
  • rogersydrogersyd Posts: 198
    edited January 2012 Vote Up0Vote Down
    This is good to know about the RS boards. My projects rarely make it out of the bread boarding phase but occasionally I do fire up the iron.
Sign In or Register to comment.