How-to: Digital bildram, 100% DIY

Det finns massor av digitala bildramar där ute. Många är gamla bärbara datorer med crafty case-omkonfigurationer som passar en fotoramprofil.

Vi bestämde oss för att bygga en 100% DIY, skrapbyggd digital bildram. Vår ram har en 12bit färg LCD, gigabyte lagring på vanliga, fettformaterade microSD-kort, och du kan bygga den hemma. Vi har detaljerna nedan.

Konceptöversikt

Bitmappsbilderna är lagrade på vanliga, PC-läsbara microSD-kort. En bildmikrokontroller läser bilderna över en tre tråds spi-buss. Bilden behandlar bilddata och skriver den till en färg LCD över en enriktad, 9bit SPI-liknande buss. En konfigurationsfil på SD-kortet definierar fördröjningen mellan bilder.

Hårdvara

Klicka för en schematisk bild (PNG). Kretsen och PCB är utvecklade med hjälp av freeware versionen av Cadsoft Eagle. Alla filer för detta projekt ingår i projektarkivet kopplat i slutet av artikeln.

Mikrokontroller

Vi använde en mikrochip pic24FJ64GA002 28pin Soic Microcontroller (IC1) i detta projekt. Vi gillar verkligen det här chipet eftersom funktionen Perifer Pin Select låter oss sätta viktiga funktioner på de stift vi vill ha; Detta ger en mindre, enklare, mycket mer kompakt PCB. Varje kraftstift har en 0,1uf bypass kondensator till marken (C1,2). Den interna 2,5Voltregulatorn kräver en 10UF-tantalkondensator (C12). Chipet är programmerat genom en femstiftshuvud, SV1. R1 är ett dragmotstånd för MCLR-funktionen på PIN 1. Läs mycket mer om detta chip i vår PIC24F-introduktion.

En 32.768khz kristall (Q1) och två 27PF kondensatorer (C10, 11) erbjuder en oscillator för realtidsklockkalendern (RTCC). Dessa delar är valfria, den ursprungliga firmware använder dem inte. RTCC kan användas som en del av en funktion som överstiger den aktuella tiden på skärmen. Knappar som är anslutna till programmeringshuvudet kan användas för att ställa in tiden.

SD-kort

MicroSD-kort är helt kompatibla med vanliga SD-kort, MicroSD-kort kan användas i en SD-kortläsare / författare med en adapter. Vi utvärderade flera microSD-korthållare och bosatte sig på en från SparkFun Electronics. MicroSD-kortet kräver en bypass kondensator mellan strömstiftet och marken (C3). En LED indikerar microSD-läsaktivitet, men det är också användbart för den allmänna debugging (LED1, R2).

Färg LCD 128 × 128 Nokia Knock-off

Projektet är utvecklat runt SparkFuns $ 20 färg LCD-panel. LCD-logiken körs vid 3.3 volter och kräver en avkopplingskondensator (C4). LED-bakgrundsbelysningen kräver en separat 7Volt-tillförsel, och verkar ha en intern strömbegränsare eftersom exempel design inte använder externa motstånd.

LCD-skärmen har en separat ingång för 3.3Volt-displayen. Många rapportbuller i displayen om den här spänningen inte är ren. Vi använde en ferritpärla (L1) och 0,1uf kondensator (C5) för att filtrera tillförseln och har inte upplevt några problem. Detta behandlade även en smutsig hem-etsad prototyp. Ferritpärltypen är inte viktig, vi använde en kvar från vårt lilla webbserverprojekt.

Den lilla kontakten är lätt att lödda på en professionell styrelse med en lödmask, men köpa flera som försäkringar. Sparkfun har ett PCB-fotavtryck för den här delen i deras Eagle Parts-bibliotek, men avståndet mellan dynorna är mindre än Olimex eller BatchPCB kommer att tillverka. Vi föll det genom att minska dynans storlek för att få mycket mer utrymme mellan. Beror inte på kontakten för att hålla LCD-skärmen på plats, använd tejp för att hålla ner den. Vi använde Sticky-Tack för att bifoga LCD-skärmen.

Vi prototyper ett LCD-bärarkort innan du skickade den slutliga designen för tillverkning. Vi rekommenderar att du använder en markfyllning under kontakten utan en lödmask.

Strömförsörjning

En 3.3Volt-utbud, som erbjuds av en LD1117S33 (IC2), krafter PIC, microSD-kort, LCD-logik och LCD-skärm. IC2 kräver en 0,1uf bypass kondensator (C6) på utmatningssidan och en 10uf kondensator (C13) på utgången. Vi använde samma tantal kondensator som vi använde för bildens interna regulator.

LCD-bakgrundsbelysningen drivs av en LM317-justerbar regulator (IC3) som är konfigurerad till 7Volts med 240 (R5) och 1100 (R6) OHM-motstånd. C7 och C8 är 0,1uf bypass kondensatorer för LM317.

J1 är en SMD-strömuttag för en gemensam 2,1 mm dc fatplugg. C11 är en 10uF-elektrolytkondensator som släpper ut någon fördröjning i matningsspänningen. C11 har ett maximalt 16Volt-ingångsbetyg, så matningsspänningen hålls bäst under 12 volymer. 9-12 volt är förmodligen idéutbudet.

Pcb

Klicka för ett fullständigt placeringsdiagram (PNG). L1, C5, och LCD-skärmen är på motsatt sida. Vi kan inte prototypa tvåsidiga brädor i mammas källare, så vi skickade denna design till BatchPCB. Nästa vecka visar vi dig hur vi gjorde det.

Delslista

Del
Beskrivning

IC1
PIC 24FJ64GA002 (SOIC)

IC2
LD1117S33 3.3Voltregulator (SOT223)

IC3
LM317 adjustable regulator (SOT223)

U$1
Color LCD 128×128 Nokia knock-off


Nokia knock-off connector

C1-8
0.1uF capacitor (0805)

C10,11
27pF capacitor (0805)

C12,13
10uF tantalum capacitor (SMCA)

C14
10uF electrolytic capacitor (SMD)

L1
ferrite bead (0805)

LED1
LED (0805)

Q1
32.768kHz crystal

R1
2000 ohm resistor (0805)

R2
390 ohm resistor (0805)

R5
240 ohm resistor (0805)

R6
1100 ohm resistor (0805)

SD1
microSD card holder

J1
2.1mm power jack (SMD)

SV1
0.1” male pin header, best angle

Firmware

The firmware is written in C using the totally free demonstration version of the picture C30 compiler. learn all about working with this picture in our introduction to the picture 24F series. The firmware is included in the project archive at the end of the article.

FAT12/16/32 disk library

Microchip’s FAT 12/16/32 library gives us easy access to files stored on SD cards. We gave a comprehensive description of this library in our web server on a company card project. If you’re having trouble reading a card with the library, check that it was formatted in a digital video camera or using Panasonic’s SD card formatter.

Nokia 6100 LCD driver

SparkFun has a basic 8bit color chauffeur (ZIP) for the Nokia 6100. We ported it to the PIC, and updated it for the 2byte-per-pixel 12bit color mode. With a small amount of added complexity, the pixel write rate could easily be enhanced by using a different 12bit mode that delivers two pixels using 3 bytes.

The LCD uses a 9bit protocol, one bit much more than many SPI hardware will handle. The first bit tells the LCD whether the next 8bits are data or a command. On the picture 24F it’s impossible to manually bang in the first bit, and then use the SPI peripheral to send the remaining 8bits. We lose direct control of the pins when hardware SPI is enabled. The data entry has to be completely bit-banged, which dramatically reduces the screen revitalize rate.

Reading Bitmaps

There are a ton of bitmap formats.  Windows compatibility keeps everyone using the ancient Windows v3 format. We created two C structs to read the V3 bitmap data.

Offset
Bytes
Bitmap file header

0
2
Always 0x42 0x4D (hex for BM)

2
4
File size (bytes)

6
2
Reserved, ignored

8
2
Reserved, ignored

10
4
Location in file of the first bitmap data

Bitmap files start with a 14byte file header. The first two bytes are the letters ‘BM’, indicating a bitmap.  If the first two bytes are correct, the firmware loads the information header. The last four bytes indicate the beginning of bitmap data, but the current firmware just assumes it will begin at the end of the headers.

Offset
Bytes
Bitmap information header

14
4
Length of bitmap information header (40bytes for Windows V3 bitmaps)

18
4
Width (pixels)

22
4
Height (pixels)

26
2
Color planes, always 1

28
2
Color bits per pixel (1, 4, 8, 16, 24 and 32)

30
4
Compression method, we only read uncompressed (type 0)

34
4
Image data length

38
4
Horizontal resolution (pixels per meter)

42
4
Vertical resolution (pixel per meter)

46
4
Number of colors, ignored.

50
4
Number of essential colors, ignored.

A Windows V3 bitmap information header is 40bytes long. The firmware verifies that the header length (offset 14) is 40, indicating a V3 bitmap. If the width (132), height (132), color depth (24), and compression (0) all check out, the image data is processed and output to the screen.

Offset
Bytes
24bit image bitmap data

54+(3n)
1
pixel n red value

54+(3n+1)
1
pixel n green value

54+(3n+2)
1
pixel n blue value

Bitmap images have uncompressed, 1:1 representations of pixel data stored in three byte sequences.  The data starts at the lower right-hand corner of the image; first the red value, then green and blue. Wikipedia has a complete bitmap walk through.

If the color depth of a bitmap image (24bits) is greater than the LCD can display (12bits), we need to discard the least significant bits of color data. To convert from 24bit color to 12bit color, we just chuck half the color data; an 8bit value of 11110011 is pushed four bits to the right, giving 1111.

Firmware walk-through

Init PIC, SD, LCD.

Read config.ini, create if it does not exist.

Use first character of config.ini to set between image delay.

Look for images, open next image.

Read and check bitmap file header for proper format.

Read and check bitmap information header for version, size, color.

Read and display each pixel value. adjust bit depth as needed.

Delay, then repeat from 4.

Preparing images

To keep this demo simple, the photo frame only displays the most common bitmap format. images should be sized to 132x132pixels, with 24bit color.

Open a picture with an image editing program.

Draw a square selection box over the part of the image you want to use, typically using shift and drag.

Crop the image.

Size the image to 132x132pixels.

Save the image as a windows bitmap, 24bits of color depth.

Other image sizes and formats could be supported with a firmware upgrade (PNG, JPG), especially with a pin-compatible microcontroller upgrade to a huge dsPIC 33F.

Använder det

Put images in the root directory of a FAT formatted SD card. depending on the laST-enheten för att formatera kortet, det kan behöva formateras med en digital videokamera eller Panasonic SD-formatatorn.

Valfritt: Gör en config.ini-fil med en textredigerare. Ange en enda siffra, från 0-9, för att ställa in bildfördröjningen. Spara filen. Om du inte skapar din egen config.ini-fil, skapas en för dig med en 1 sekunders fördröjning.

Sätt kortet i uttaget och sätt i den digitala bildramen. Bilderna cyklar på skärmen med den definierade fördröjningen.

Ta det vidare

Vi ser mycket potential i denna enkla digitala bildram. Många funktioner kan läggas till med en firmwareuppgradering, vissa är grunden för framtida hårdvara.

Visa andra bildformat, skalbilder

Slumpmässiga bleknar och torkdukar

Visningstid och datum över bilden, sätt med knappar anslutna till programmeringsnålarna

Utöka konfigurationsalternativen i Config.ini för att inkludera längre förseningar, blekna eller torka typ

Använd en underkatalog för bilder eftersom det finns några filbegränsningar till rotkatalogen på ett fettformaterat SD-kort.

Lägg till en Ethernet-anslutning för nätverksuppdateringar.

Ladda ner: dpf.v1.zip det har flyttat till här.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

Omvänd teknik KAYAK Mobile API

Reste Meta-Search-webbplatsen KAYAK använde uppenbarligen för att ha en offentlig API som inte längre är tillgänglig. Vi kan inte säga att vi sörjer förlusten av gränssnittet vi aldrig hade känt

LIFEPO4-batterier fungerar mycket bättre i en videokamera än NiMH

, vi håller med [Zapmaker] att Canon-kameror tuggar genom nickelmetallhydridbatterier. Men vi kommer inte att använda alkaliska eftersom vi tycker att det är slöseri. Hans tjänst är att använda ett

Shoving en Raspberry Pi Zero i en Xbox-styrenhet

med frisläppandet av Raspberry Pi Zero förra månaden, vi har väntat i njutning för att se de allra första innovativa hacken för att ta reda på, vilket utnyttjar sin lilla