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:
|0||Waiting for keypresses, preparing the video memory, animating the transitions.|
|1||SD card driver.|
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.
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:
[raw] :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 \I
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
Tue 6-Sep-2011 13:18
Sat 7-Jan-2012 13:53
Wed 16-May-2012 16:46