Like any major projects, there were difficulties encountered in the course of production. Perhaps the biggest difficulty was the loss of one of our partners after the first semester. We were counting on his knowledge and insights to help bring this project to completion. When he left, we had to do some major reallocation of duties and planning so we could attempt to move forward in a timely manner.
The hardware we chose, while it functions to an extent, was probably underpowered for what we originally envisioned. This was shortsighted on our part. We chose components that we were already somewhat familiar with so as to ease the process of building the project and reduce frustration in learning a new technology (as we were already learning a whole new subject matter alongside building our project.)
To that end, we have run into limitations in the size of numbers we can use. In cryptography, numbers routinely exceed the maximum 32 bit variables available on a PIC. With more crafty programming and software development, this could perhaps be worked around. However, we were unable to implement that kind of code in the time allowed.
Program size is limited to 8k so we are unable to include too many features beyond the basic program. Error checking and more ‘Object Oriented’ functions are beyond the scope of what we can do here. However, for a straight forward program, this amount of memory does seem passable. Modules of the program also suffered from size limits. A block of machine code cannot exceed a certain size (known as a psect) before the PIC will run out of room in a memory bank. Code must be divided so that it can be compiled into machine code and placed into different memory banks.
Using HI-Tech C PiccLite was troublesome initially, due to the 2k compile limit and limited devices supported. This was a major frustration originally, but once we moved to the full version of the HI-Tech C compiler (with a 45 day demo) most of our problems were relieved and we could focus on programming.
The programming was not finished in time to implement the project onto a PCB board. Some more refinements should be made before the project is fit for public consumption. Input verification, error checking, and exception handling all should be implemented first. Also, the program should be wrapped up more nicely to show the differentiation between Alice, Oscar, and Bob and their roles in the operation. This project is highly dependent on the user guide, but it would be nice to ultimately get away from a paper document that needs to follow the tool around.
We learned a lot about project management and the lifecycle of a project. The conceptualization process, gathering information from the customer, requirements captures, design options, progress updates, and all that it entails was greatly educational and we learned very much through that process.
We learned not to dwell on decisions after they have been made. If a decision has been made, don’t waste time second guessing and wondering if it was the right one. Make a move and make it work. You can always go back if there was a mistake, but you’ll never get anywhere if you don’t move forward in a timely manner.
Cryptography was a totally new topic for our group when we started, and in investigating how it works we learned so much that our previous education had left untouched. Cryptography is a truly fascinating topic and we enjoyed learning about it and can see why it has potential as a teaching tool to make math more interesting.
Creating an educational device greatly opened our eyes to the difficulties that exist in trying to make complicated topics accessible and easy to grasp for someone totally new to the subject. This project seemed like a fairly straightforward task until we finally grasped that it is meant for people to learn from. That opens a whole new can of worms that delves into how people learn, what is too easy, what is too hard, and what is too boring to even sit through. Education is a matter of taste, and we have a deeper respect for those who make it their life’s goal to educate, because it is a HARD thing to do.
In the future, I would like to see our project developed into a fully functional teaching device that doesn’t depend quite as much on an accompanying User Guide. Larger LCD’s would be effective, as well as larger microcontrollers capable of more storage and variable sizes. Perhaps a memory card could be implemented to store different programs on the board and uploaded to the PICS as the user wanted to change the program. Perhaps even having swappable memory cards would be an option.
Our advice for new design students would be: “Don’t be afraid of making a few small mistakes early on when they can be changed and remedied. Be more afraid of not moving forward until you feel things are perfect. When you finally do move forward, you may realize (as you very well probably will) that the meticulously thought out plan missed a few key points and now it is too late in the game to make up for them.” Also, communicate with your advisor and customer often and keep them updated. Their ideas for your project might change as you all become more familiar with what the project is really about.
All in all, we learned an incredible amount about project design, cryptography, education, and ourselves in this project. These are all valuable lessons that we will be able to take with us into the future.