My first ARM project

I’ve been trying off and on for years to get into ARM development. But my insistence on using FOSS for development has proven a difficult hurdle to overcome. But recently I acquire an STM32F0-Discovery board when they were offering samples. I’m proud to say I managed to get to a point where prototyping for the hardware on a Linux box is easy. I’ve written a bit about it here, and have posted a basic template (including Makefiles) in a github repository.

Above you can see my first working project. I ported it over from an AVR project, it’s the discovery board driving a Nokia 3595 LCD screen. It’s nice to have a microcontroller which is already at the 3V levels this display expects. Right now I’m addressing it via software, but I plan to migrate to hardware SPI and look into generating video. We’ll see.

One of my other near-term plans is to put up a quick post about how to use my template to compile the STM example code. I found that the image shipping on the boards is just a bit different from the source they provided in the firmware package.

Binary Burst Clock firmware update

I pulled out the Binary Burst Clock and did some more work on the firmware. The big change is that I’m using a different library for the i2c communications. The one I started with had some issues and I didn’t want to work them out myself. Instead I grabbed Peter Fleury’s i2c library. He has two in the package, one is for chips with full TWI hardware (which is not the case with the ATtiny84 I’m using). The other is a software implementation written in assembly. It’s meant to be included in C projects and is super easy to work with.

I also implemented a test to see if the RTC oscillator is running. If not, a ‘first run’ function will start the oscillator and enable the backup battery. The buttons now work for setting the time, and I’ve migrated from a delay-based time keeping tick to one that uses TIMER1 (also used for debouncing the buttons).

At this point I would say the clock is fully functional. I still want to look into some things like how best to calibrate the oscillator for the RTC. Also of interest to me is a deeper menu system that would allow for things like intensity settings and alternate time displays.

The most up to date code is on the master branch of the repository.

Life on a Character LCD

I just wrote about a project over at Hackaday where a 16×4 character LCD was used to play Conway’s Game of Life. I’m fond of the game, and have dabbled in programming it myself. I thought it would be fun to take the idea and make the game board a bit bigger.

I’ve divided each character into two pixels by using custom characters. Originally I wanted to use four pixels per character, but the HD44780 protocol only allows for 8 customs and that’s not enough to map every possible combination of four pixels.

But what I ended up with works quite well. I used an Arduino with the LiquidCrystal library which comes with the IDE. The rows and columns wrap so that the game keeps going when it reaches the edge of the screen. I do seem to have one bug in my code which keeps generating garbage at column 0. I’m probably not going to take the time to squash this. It’s not a huge deal, and it keeps the game from becoming stagnant.

Check out my code repository if you’re interested.

Android app for Binary coded ASCII characters

I wrote about a project this morning that used a piece of tinfoil connected to an Arduino to simulate touchscreen presses on a tablet. I tried to do this myself but couldn’t get it to work reliably. I had already written this Android app which I intended to use with the interface technique had it work. I can’t unwrite that code so I’ve decided to share it. There’s a description in the video, and here’s a link to the code repository: