Microreader

Again... just because of fun, I decided to build
device as small as possible, able to display text from FAT formatted
local storage on display, with USB extension to charge battery and
load/edit files.

My
design goal was slightly complicated by using local PCB cheap supplier
with two layer 8/8 mils technolgy - 6/6 mils would help a lot, four
layers would allow better miniaturization.

I set PIC24FJ64GB002
as a core of Microreader, with DEP096032 OLED display. This is 96*32
pixels white OLED with SSD1307 driver. 24LC1025 serves as non-volatile
storage. MCP73831 is Li-Ion charger and LMR62014 is 3,3/12V step-up
converter for OLED pixels. In fact, there is nothing unusual and most
of Microreader's features is hidden in firmware.

After battery
plug-in, microreader jumps into offline-mode. If there is USB
connection, it sets USB mode. In USB mode Li-Ion battery is charged
(chargin/charged state is displayed) and Microreader starts USB MSD
enumeration. After a while, it should set up new disk drive with 64kB
capacity (actual free space depends on what filesystem you use). You
can copy any files you like on Microreader, but only plain text files
are supported for off-line viewing. When you unplug Microreader from
USB, you are in off-line mode. Use three keys as Up, Select and Down
keys (key placement is obvious). You can browse files and view content
of file with Select key. Up and Down keys does its job here too, Select
key returns you to file list. Holding Up and Down together for a second
shuts device off. Holding Up key wakes Microreader from sleep. Holding
Select while powering-up drings device into USB HID bootloader mode and
standard Microchip HID bootloading software can be used to upload new
firmware.

Technical note - SSD1307 works in SPI or I2C mode, I
choose I2C mode and it wasn't the best option. Its I2C implementation
is somehow flaky and sometimes master end up with locked I2C engine,
SDA permanently in low state. I had to implement "hack", where - if
this condition is detected (bus collision bit is set) - firmware shuts
down I2C engine and master does up to 9 bitbanged clock pulses on SCL
line, watching SDA line. When SDA line returns to high level (slave
released it), it enables hardware I2C, then issues start condition
followed by stop condition.

Microreader on youtubeMicroreader on picassaSchematics in pdf formatPCB gerber filesBootloader - here and firmware, ver. 1 to be uploaded by bootloader is hereFor now, there are no sources (messy as usual), but if you ask me, I can send itA bit more about Microreader is here - if you can read Slovak