November 09, 2007 :
Currently I am working with an Olimex LPC-P2148 development board for the NXP LPC2148 ARM7 32-bit microcontroller. I am working with Jean Labrosse' uC/OS-II real time operating system. For anyone who is not familiar with uC/OS-II and is in need of an RTOS, I highly recommend buying his book. You can find it at Amazon or Borders bookstores. I have also seen it at Barnes and Nobles booksellers. microC/OS-II is written entirely in C and can be compiled as a preemptive or non-preemptive operating system. There have been many articles written about this RTOS so I won't go into great detail about it except to say that the book is very well detailed and comes with a disk which has the entire RTOS on it. There are sample applications which demonstrate how to implement user tasks into the RTOS structure. In the time that has elapsed since I purchased my book, Micrium (Jean Labrosse' company) has released many new add-on modules for use with uC/OS-II. He now has an LCD module, Embedded File System, TCP-IP Stack, USB drivers, CAN drivers etc. I only mention it since together they offer a complete software system that an embedded application can be developed around.
My project that involves the LPC2148 ARM processor which will have a TS8001 QVGA LCD display with backlight. The LCD display has a resolution of 320x240 with 65,000+ colors. It uses Solomon Technologies SSD1289 graphic LCD controller. It has taken some time to understand the datasheet for this controller since there are many different operating modes that this LCD controller can use. It can be communicated with in 8080 18bit, 9bit, 8bit, SPI 3-wire or 4-wire, 6800 18bit, 16bit, 9bits. It also has a very interesting 'Normal Mode' which uses a 18bit or 16bit RGB bus in conjunction with 4-wire SPI. I opted not to use this 'Normal Mode' due to pin availability of the LPC2148. This ARM7 processor has 64 pins which seems like a lot at the beginning of a design. It's surprising how quickly you can use them up.
This valve driver project will drive two valves using h-bridges, six Sensym pressure transducers, two MAX6675 thermocouple channels, one serial port for firmware updates, two thermistor channels, TS8001 QVGA LCD & capacitive touch screen. I decided to try a different approach to reading the pressure by prototyping the pressure transducer circuit using an external A2D convertor. You might be wondering why I would want to use external A2D convertors when the LPC2148 has so many A2D pins available. The reason is because I wanted to try out Analog Devices AD7794 24bit sigma-delta ADC which has a built-in instrumentation amp. I have designed my schematic to be able to use an external reference voltage just to be on the safe side although I hope that the built in voltage reference will be adequate. The AD7794 has good common mode voltage rejection as well. The tests that I have done so far has produced results that are surprising. You would think with 24bits of resolution that the numeric results would be all over the place with the ADC hand wired to development board and the pressure transducer plugged into a breadboard. Even with this crude prototyping environment the results are stable to within about 300 counts over a range of 24 bits. This is giving me stable reading to 1/1000 of a PSI.
Here is a photo of the breadboard with the AD7794 and pressure transducer:

If you look carefully, you can see that the orange tube is plugged into a differential pressure transducer. Directly behind the pressure transducer on the protoboard is the AD7794 sigma delta ADC. Since I wanted to prototype the ADC circuit I needed a TSSOP adapter board with pins spaced 0.100" center to center. I found a panel of assorted boards in a Mouser Catalog. These boards are manufactured by Bellin Dynamic Systems.
For a software development system I tried many different IDE's and Compilers. Obviously I wanted a C compiler but I also wanted in circuit debugging capability with hardware or software breakpoints. The LPC2148 has an interesting feature (limitation?) when it comes to breakpoints, it can support many software breakpoints but only two hardware breakpoints. I spent a little bit of time unraveling my confusion on this point. I searched several ARM forums until I picked up on this tidbit of information. The first IDE and compiler I tried was the Eclipse IDE, GCC ARM C compiler and OpenOCD debugger. I must admit that it was a monumental task setting up this combination of software packages so that they worked together. I spent a lot of time reading hundreds of pages of documents on OpenOCD, Eclipse and GCC. I read every forum I could find that might provide help in getting this trio to work. I came across the infamous James P. Lynch tutorial which got the adrenalin pumping. It seemed like success was at hand. Since I already had the three packages installed it seemed like I could skip ahead in his tutorial to the configuration of each package and save some time. Hindsight tells me that decision actually cost me a week. If I had uninstalled the three packages and gone through David's tutorial it would have taken a day rather than the week I spent on trying to figure out which configuration option I missed. David's tutorial was just fine with the exception that Eclipse had just been updated so there were several differences.
Now, I have used quite a few different IDE's for C development both for PC's as well as embedded systems. I like the GCC compiler well enough and I like the Eclipse IDE. I must admit that Dominic Rath's OpenOCD is the work of pure genius. All three pieces did eventually fit together and they worked well together but it was a chore to set up a new project.
Shortly after I had the GCC tools setup I went to Micrium's website and discovered that they had a port of uC/OS-II for the LPC2148. I knew immediately that I wanted it. I downloaded the port and read the documentation for it. It was for the IAR Embedded workbench. I then hit the IAR website and downloaded the evaluation version for the ARM processors. It has the capability of compiling an image up to 32kb. That enough to compile the RTOS and plenty of tasks for what I'm doing. Since then I've been busy with the ADC and UARTS. I'm getting ready to start on the LCD which will keep me busy for a while, I'm sure. I'll be posting more about this as the progress continues.