Hardware projects

Presentation tool

Here's a brief technical writeup of the slide show presentation tool I built for my Elements of Chip Music seminar.


The board is built around a Propeller microcontroller, along with an 8 kB EEPROM and a 12-bit DAC chip. An SD card is attached using a poor man's SD card socket. This card stores the presentation slides and the sound clips in a raw block-based format, meaning there's no proper filesystem.

The cogs are used in the following way:

0Waiting for keypresses, preparing the video memory, animating the transitions.
1SD card driver.
5Video generation.
6Video generation.
7Audio playback.

Video is represented as two tables of line references (front and back buffer), each line reference indicating a starting position in the character grid (a separate RAM buffer), the Y offset within the character row, brightness and a double-width flag. The characters are just byte references into the font, which consists of the built-in Propeller font and some additional graphical characters placed near the top of the RAM.

Audio is streamed from the SD card, meaning that the audio cog plays from one buffer and instructs the SD card cog to simultaneously read the next block into another buffer.

Slide descriptions

The slides are described using a primitive markup language, which is compiled (on the host computer) into a card image. The image is then transferred to the card using dd(1). The markup language allows each slide to refer to a wav file, along with a volume adjustment parameter. The compiler converts each wav file into raw 44.1 kHz mono audio, scaling each sample by the requested volume factor.

Here's an excerpt from the slide description file:

:pulse .25
Waveforms: Only a handful of timbres

    Waveform design approach #2:

    \* Take a cheap function:
      Square wave (1-bit triangle)
    \* Add a parameter \x03 pulse wave


The first line indicates that a "raw slide" will follow. This is the only slide format supported so far. The second line instructs the compiler to read a file called "clips/pulse.wav" and scale its volume by 25%. The remaining lines make up the slide contents. Some characters are entered using special syntax: \* is a solid bullet, \x03 is an arrow and \I is a loudspeaker icon.

The entire presentation, including sound clips, ended up fitting into approximately 40 MB, a rather small corner of the SD card.


Since the Propeller doesn't know how to boot directly from an SD card, an EEPROM chip is needed. I had a couple of 8 kB chips lying around, and the code fits. However, for some reason either the Propeller or the downloading tool I used wouldn't work with an EEPROM of less than 32 kB, so I had to write a wrapper program which, after being downloaded into the Propeller RAM, would in turn write the actual program into the EEPROM chip.

Posted Friday 1-Jul-2011 10:31

Discuss this page

Disclaimer: I am not responsible for what people (other than myself) write in the forums. Please report any abuse, such as insults, slander, spam and illegal material, and I will take appropriate actions. Don't feed the trolls.

Jag tar inget ansvar för det som skrivs i forumet, förutom mina egna inlägg. Vänligen rapportera alla inlägg som bryter mot reglerna, så ska jag se vad jag kan göra. Som regelbrott räknas till exempel förolämpningar, förtal, spam och olagligt material. Mata inte trålarna.

Fri 15-Jul-2011 00:23
Too Cool for PowerPoint are we?
Tue 6-Sep-2011 13:18
I believe he's never heard of it ;)
Sat 7-Jan-2012 13:53
(Nearly) unhackable slide presentation system! And you won't have to pay Microsoft $400 to use it. (Typical Powerpoint price.) Also, no updates/etc, since you will control the code and every aspect of the system! I love it!
Wed 16-May-2012 16:46
the transitions looked cool :-)