Monday, February 21, 2011

Proposal Selection Continued

Today in class we worked on the proposal selection. I was please to see my proposal in the top 10 and with the addition of my vote and a few other classmates stepping up it made in into the top 5 where it remained for the next few iterations of selection.

I really see this project as having a lot of learning potential. So much of the software developed today is in embedded applications (I meet a guy once at a show who was developing software for a toothbrush! No really!). Any CS student with this ability would be well suited to enter the marketplace with a unique and high demand skill.

In addition to this, the project spans three separate and distinct hardware platforms, each with its own set of programming skills needed. This allows a unique need for multiple programming skills that must all come together to form a complete system. Real world projects almost always end up this way.

One other added benefit to this project is that it does involve some hardware development. Not all software runs on a PC, and the idea of having to work in a different environment brings new challenges. Having a hardware designer on the development team also gives a unique experience to the project. I think it is an excellent opportunity for leaning that many of the other proposals would not include.

The concept mentioned by the professor in class of using a Arduino for the hardware development platform at first did not seem very practical. I had never worked with this product before, but have seen many similar products that "dumbed down" the hardware interfaces. I reviewed the Arduino site and it seems that it remains close enough to the hardware roots to be practical for development, at least from the aspects of this class project. I really believe a real world implementation of this project would require custom hardware to implement. Embedding an Arduino in a production run thermostat is not practical or cost effective.

If the professor allows my original proposal to go through unchanged I think I can work with the other classmates to make sure the implementation on "real world" hardware would not be taxing to the project. The proposal includes two complete hardware platforms each could be used for software development. I would assemble each, outside of my software development duties, so they do not impact the overall software development process, which is the main point of the class. The required hardware parts are in hand and the hardware design is complete, at least on paper. Once accepted it will only take a day or two to go to working hardware.

The software development can be done on MPLAB which is a free software development and debugging platform available from MicroChip (MPLAB link). The chip I have selected (PIC16F877 Datasheet Link) has a built in debugging interface that allows programming in-situ and allows full access to all memory and register locations as well as such features as single stepping the CPU or run to breakpoints.

All that being said there are a few obstacles to using the custom hardware platform:
  1. To connect the chip to the computers USB an ICD3 (ICD3 Link) interface is needed. This is easy to obtain but cost $200 each (not bad compared to many of the other options in this market). I currently only have one, so another would need to be located. If this really became a show stopper, I'd find a way to fund this.
  2. MPLAB is programmed in Assembly. On a PIC16F chip there are only about 32 different opcodes, so its not too hard to pick up, but there is no question Assembly is not for the weak hearted. MPLAB does have plug-ins for C and Basic, but these cost at least $100 and up, The use of these higher level languages can also lead to other issues when doing true embedded programming where having full control of the CPU at all times is needed for critical timing issues. 
  3. Bringing a fellow student up to speed on this new environment could be a challenge.  I have been writing code in this environment for years, I would take it upon myself to tutor any other student that is up to the challenge and wants to learn this new skill. I really see this as part of what I want to learn from this class. In the past I have worked most of my software development in a bubble, with me being the only programmer. I really need to learn how to work with other programmers, particularly with those of different skill levels. If along the way I can pass some of my skills to a fellow programmer, then great! I hope there is at least one other student who has the desire to learn this new skill in the class.
A little background (history): The first assembly code I wrote was a monitor ROM program for an 8080 (Link to 8080 info) processor (Note, that is 8080, not 8086, or 80286, or 80386, or...) I had a memory limitation of 256 bytes (Note that is bytes, not KB, or MB, or...). I had to hand assemble the entire code on paper because I did not have a computer at the time. I think I had two bytes of memory left when I was done. It ran the first time, wow was I surprised! I still have that project in a box in the attic somewhere. If there is a student that would like to see a piece of history let me know. I'd be glad to pull it out and share a piece of history (it is sad when your old enough to use the work history to describe something you built).

No comments:

Post a Comment