List of my Projects

A listing of past and current projects and interesting stuff I've been working on. My interests vary greatly so there's no telling what I'll be adding.

7-Segment development board

This is the latest in a line of articles detailing how to build boards that I will call discovery boards in that they are used as a way to learn electronics and provide a building block for prototyping complete systems. In this article I will be describing how to fabricate a multiplexed 7-segment display using 2 LN5643R-11, 3 element displays and a few other assorted common devices. This is an intermediate level project, I say that because I'm a software guy with a bit of electronic knowledge and it was a learning experience for me.

Nikon IR Remote
I've been wanting to do this project for quite some time but have been waiting for the cooler weather, that's when I do most of my projects. This was one of the first projects on my list because I want to use what I learned here in another more ambitious project that I'll be starting shortly. The picture below shows the finished product and as you can see there are very few parts and a very simple layout. I'm a software guy if I can do it anyone can. The total price of materials for this project was right around $11 and it took maybe 1-1/2 to do everything with the only thing remainingis to find some kind of enclosure for it, but it works and that is not a show stopper.
Real Time Clock Development Board
This is my second in a series of Development Extension Board (DEB) articles, if you missed the first one AVR LED/Level shifter Board be sure to check it out. These DEB boards came about as a way to mount frequenty used components on a board external to the MPU, be easy to use in the development cycle and have the ability to be plugged into a bread board where it may be wired easily. In cases such as with the RTC we will be using the PCF8583 Clock/Calendar with 256 X 8-bit RAM device where communication with the device is accomplished using the I2C Bus protocol. I haven't had any experience with this device or for that matter any device using the I2C Bus but wanted to learn so here we are. Although I used an AVR processor this board can be used with any MPU that supports GPIO and interrupts if notification required.
AVR LED/Level shifter Board
The board I have created for this article contains a group of 8 LEDs and 4 Bi-directional channels of Level Shifting using the 2N7000 N-Channel Exhancement Mode FET. I used an LM317 voltage regulator to provide the 3.3V for the level translation so decided to run it to the header so as to provide 3.3V external to the board.
Track downloads using an HttpHandler
In the pipeline, the Handler is called last and when it is called, the appropriate HTTPHandler is executed. Since the HTTPApplication object will call the HTTPHandler to process the request and generate a response we can use our handler to implement our call to the business layer to update the count for the file in question and fulfill the request for the download.
Keypad scan using Shift Registers
Scan any size switch matrix with this hardware/software combination that only requires 5 general purpose ports using the SPI interface. Only one serial to parallel, one parallel to serial shift register and a few resistors are necessary to scan a 64X64 switch matrix and if a larger number of switches need to be scanned the shift registers may be daisy chained together in any combination.
MCP4921 12 bit DAC
The MCP492X are DACs that provide high accuracy and low noise performance for industrial applications
where calibration or compensation of signals (such as temperature, pressure and humidity) are required.
SPI Serial CMOS EEPROM
Since memory on an AVR processor is at a premium an inexpensive solution is the Serial EEPROM memory. It can be purchase from 128 bytes to 125K bytes in many different configuations but we will be looking at the CAT25128 device in this article. Adding external memory to an AVR turned out to be a simple task requiring very little hookup and basic SPI code to communicate with the device.
AVR Assembler 101
There is a good reason to learn assmebler, the more you know about the inner workings of the processor the more capable a programmer you will become. And even if you do decide that you need to write portions of your code in Assembler you are not restricted to just using Assmbler or higher level language we can mix them as long as we observe a few simple rules. For instance we could use 'C' as our main language but write the interrupt routines in assembler.
SPI Master and USI Slave communications
Serial Peripheral Interface or SPI might be referred to as a non-standard standard as there doesn't seem to be any official specification on the subject. The best reference I've found are in the Atmel datasheets and "AVR319: Using the USI module for SPI communication". The older Atmel chips did not use the SPI protocol they instead had a Universal Serial Interface or USI that was close to SPI and with a little effort can be used to communicate with a device using the SPI protocol.

AVR Studio and C++
C++ is generally not a good choice for programming Micro controllers as it consumes more program and data memory but if memory is not a primary concern then C++ can be a viable option. This also assumes that timing is not a critical consideration for your application, in this case C or Assembler would be the obvious choice. But for those who would like to benefit from the advatages that C++ has to offer a solution is  presented here using AVR Stduio and GCC++.
Square Wave Generator
In this on-going series of articles or tutorials if you wish, I attempt to provide a usable application that demonstrate the ideas or areas of learning that I am attempting to convey.  In this article I have provided an application that uses a windows application that communicates with an ATMega1280 running a program that provides a configurable PWM (Pulse Width Modulation).  The windows application transmits commands to the MPU to manage the output of the PWM controlling the frequency and duty cycle, turning the output on or off and setting the prescale value, all of which will be discussed in this text.
ATMega1280 + Button Debounce

The debounce logic I came up with was a combination of several that I found while googling, but I already had a preconception of what I needed and none that I found quite fit the bill. The logic uses a state machine where the transition between states is dictated by a timer that is read at periodic intervals and a delta time extracted. The delta time is used in conjunction with a set of time intervals for press and release based on common intervals defined for the average time it takes for a device to settle.

ATMega1280 + Shift Register
In this tutorial I'll be explaining how to interface an ATMega1280 Micro controller to a shift register, in this case an SN74HC595D, but the theory should be the same for most shift registers except perhaps the pin out. I will present 3 different ways that this can be accomplished, the 3 forms are; 1) Brute force, I call this the manual procedure, 2) using a timer and 3) using the Serial Peripheral Interface (SPI). Each method has it's pros and cons so deciding on a method is entirely a; matter of choice.
ATMega1280 + 16x2 LCD Module Tutorial
Article describing one way to interface to an LCD device and use Peter Fleury's AVR-GCC LCD Library to output data to the device.
HttpHandler Tutorial
Tutorial using HttpHandler, JQuery, AJax and LinqToSql to make requests to and receive responses from an SQL database using the power of JQuery'a Ajax functionality and LinqToSql.
Ajax Page Load
Demo that uses JQuery's Ajax load function to asyncronously populate a page with an Html page.