HOW-TO: digital picture FRAME, 100% diy

There are a ton of digital picture frame tutorials out there. many are old laptops with crafty case reconfigurations that fit a photo frame profile.

We set out to build a 100% DIY, scratch-built digital picture frame. Our frame has a 12bit color LCD, gigabytes of storage on common, FAT-formatted microSD cards, and you can build it at home. We’ve got the details below.

Concept overview

The bitmap images are stored on common, PC-readable microSD cards. A picture microcontroller reads the images over a three wire SPI bus. The picture processes the image data and writes it to a color LCD over a unidirectional, 9bit SPI-like bus. A configuration file on the SD card defines the delay between images.

Hardware

Click for a full size schematic image (PNG). The circuit and PCB are developed using the freeware version of Cadsoft Eagle. All the files for this project are included in the project archive linked at the end of the article.

Microcontroller

We used a Microchip PIC24FJ64GA002 28pin SOIC microcontroller (IC1) in this project. We really like this chip because the peripheral pin select feature lets us put essential features on the pins we want; this gives a smaller, simpler, much more compact PCB. Each power pin has a 0.1uF bypass capacitor to ground (C1,2). The internal 2.5volt regulator requires a 10uF tantalum capacitor (C12). The chip is programmed through a five pin header, SV1. R1 is a pull-up resistor for the MCLR function on pin 1. read much more about this chip in our PIC24F introduction.

A 32.768kHz crystal (Q1) and two 27pF capacitors (C10,11) offer an oscillator for the real-time clock calendar (RTCC). These parts are optional, the initial firmware doesn’t use them. The RTCC could be used as part of a function that superimposes the current time on the screen. buttons connected to the programming header could be used to set the time.

SD-Karte

MicroSD cards are completely compatible with regular SD cards, microSD cards can be used in an SD card reader/writer with an adapter. We evaluated several microSD card holders, and settled on one from SparkFun Electronics. The microSD card requires a bypass capacitor between the power pin and ground (C3). An LED indicates microSD read activity, but its also helpful for general debugging (LED1, R2).

Color LCD 128×128 Nokia knock-off

This project is developed around SparkFun’s $20 color LCD panel. The LCD logic runs at 3.3volts and requires a decoupling capacitor (C4). The LED backlight requires a separate 7volt supply, and appears to have an internal current limiter because example designs don’t use external resistors.

The LCD has a separate input for the 3.3volt display supply. numerous report noise in the display if this voltage isn’t clean. We used a ferrite bead (L1) and 0.1uF capacitor (C5) to filter the supply, and haven’t experienced any problems. This even dealt with a dirty home-etched prototype. The ferrite bead type isn’t important, we used one left over from our tiny web server project.

The small connector is easy to solder on a professional board with a solder mask, but purchase several as insurance. SparkFun has a PCB footprint for this part in their Eagle parts library, but the spacing between the pads is smaller than Olimex or BatchPCB will manufacture. We fudged it by decreasing the pad size to get much more space between.  Don’t depend on the connector to hold the LCD in place, use tape to hold it down. We used sticky-tack to attach the LCD temporarily.

We prototyped an LCD carrier board prior to sending the final design for manufacture. We recommend against using a ground fill under the connector without a solder mask.

Stromversorgung

A 3.3volt supply, offered by an LD1117S33 (IC2), powers the PIC, microSD card, LCD logic, and LCD display. IC2 requires a 0.1uF bypass capacitor (C6) on the supply side, and a 10uF capacitor (C13) on the output. We used the same tantalum capacitor that we used for the picture internal regulator.

The LCD backlight is powered by an LM317 adjustable regulator (IC3) configured to 7volts with 240 (R5) and 1100 (R6) ohm resistors. C7 and C8 are 0.1uF bypass capacitors for the LM317.

J1 is a SMD power jack for a common 2.1mm DC barrel plug. C11 is a 10uF electrolytic capacitor that smooths any lag in the supply voltage. C11 has a maximum 16volt input rating, so the supply voltage is best kept under 12volts. 9-12 volts is probably the idea power supply range.

PCB

Klicken Sie auf ein PNG-Platzierungsdiagramm in voller Größe (PNG). L1, C5, and the LCD are on the opposite side. We can’t prototype two-sided boards in mom’s basement, so we sent this design to BatchPCB. next week we’ll show you how we did it.

Liste der Einzelteile

Teil
Beschreibung

Ic1.
PIC 24FJ64GA002 (SOIC)

IC2.
LD1117S33 3.3Voltregler (SOT223)

IC3
LM317 adjustable regulator (SOT223)

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


Nokia knock-off connector

C1-8
0,1ütig Kondensator (0805)

C10,11
27pF capacitor (0805)

C12,13
10uF tantAlaun-Kondensator (SMCA)

C14.
10UF Elektrolytkondensator (SMD)

L1.
Ferritperle (0805)

LED1.
LED (0805)

Q1.
32.768kHz Kristall.

R1.
2000 Ohm Widerstand (0805)

R2.
390 ohm Widerstand (0805)

R5.
240 Ohm Widerstand (0805)

R6.
1100 Ohm Widerstand (0805)

SD1.
microSD-Kartenhalter

J1.
2.1mm Power Jack (SMD)

SV1.
0,1 “männlicher Pin-Header, bester Winkel

Firmware

Die Firmware ist in c mit der vollständig freien Demonstrationsversion des Bild-C30-Compilers geschrieben. Erfahren Sie alles über das Arbeiten mit diesem Bild in unserer Einführung in die Bild 24F-Serie. Die Firmware ist am Ende des Artikels im Projektarchiv enthalten.

FAT12 / 16/32 Disk Library

Die FAT 12/16/32-Bibliothek von Microchip gibt uns einen einfachen Zugriff auf Dateien, die auf SD-Karten gespeichert sind. Wir haben in unserem Webserver auf einem Unternehmenskartenprojekt eine umfassende Beschreibung dieser Bibliothek angegeben. Wenn Sie Probleme haben, eine Karte mit der Bibliothek zu lesen, überprüfen Sie, ob es in einer digitalen Videokamera formatiert wurde oder das SD-Kartenformater von Panasonic verwendet.

Nokia 6100 LCD-Treiber

Sparkfun hat einen grundlegenden 8-Bit-Farb-Chauffeur (ZIP) für den Nokia 6100. Wir haben es auf das Bild portiert und für den 2-Bit-Per-Pixel-12-Bit-Farbmodus aktualisiert. Mit einer geringen Menge an zusätzlicher Komplexität könnte die Pixelschreibrate problemlos mit einem anderen 12-Bit-Modus verbessert werden, der zwei Pixel mit 3 Bytes liefert.

Das LCD verwendet ein 9-Bit-Protokoll, ein Bit viel mehr als viele SPI-Hardware wird behandelt. Das erste Bit zeigt dem LCD an, ob die nächsten 8bit Daten oder ein Befehl sind. Auf dem Bild 24f ist es unmöglich, manuell im ersten Bit zu schlagen, und nutzen Sie dann den SPI-Peripheriegerät, um die restlichen 8Bits zu senden. Wir verlieren die direkte Kontrolle der Pins, wenn Hardware SPI aktiviert ist. Der Dateneintrag muss vollständig bit-schlagt sein, was den Bildschirm wiederholt die Rate des Bildschirms drastisch reduziert.

Bitmaps lesen.

Es gibt eine Menge Bitmap-Formate. Die Windows-Kompatibilität hält alle mit dem uralten Windows V3-Format. Wir haben zwei C-Strukturen erstellt, um die V3-Bitmap-Daten zu lesen.

Ausgleichen.
Bytes
Bitmap-Datei-Header.

0.
2.
Immer 0x42 0x4d (Hex für BM)

2.
4.
Dateigröße (Bytes)

6.
2.
Reserviert, ignoriert.

8.
2.
Reserviert, ignoriert.

10.
4.
Standort in der Datei der ersten Bitmap-Daten

Bitmap-Dateien starten mit einem 14-Byte-Dateikopf. Die ersten beiden Bytes sind die Buchstaben ‘BM’, was auf eine Bitmap angibt. Wenn die ersten beiden Bytes korrekt sind, lädt die Firmware den Informationsheader. Die letzten vier Bytes geben den Beginn der Bitmap-Daten an, aber die aktuelle Firmware nimmt nur an, dass sie am Ende der Header beginnt.

Ausgleichen.
Bytes
Bitmap Information Header.

14.
4.
Länge des Bitmap-Informationskopfs (40 Byte für Windows V3-Bitmaps)

18.
4.
Breite (Pixel)

22.
4.
Höhe (Pixel)

26.
2.
Farbflugzeuge, immer 1

28.
2.
Farbbits pro Pixel (1, 4, 8, 16, 24 und 32)

30.
4.
Kompressionsmethode, wir lesen nur unkomprimiert (Typ 0)

34.
4.
Bilddatenlänge.

38.
4.
Horizontale Auflösung (Pixel pro Meter)

42.
4.
Vertikale Auflösung (Pixel pro Meter)

46.
4.
Anzahl der Farben, ignoriert.

50.
4.
Anzahl der wesentlichen Farben, ignoriert.

Ein Windows-V3-Bitmap-Informationskopf ist 40 Byte lang. Die Firmware überprüft, dass die Headerlänge (Offset 14) 40 ist, was auf eine V3-Bitmap anzeigt. Wenn die Breite (132), Höhe (132), Farbtiefe (24), und Komprimierung (0) alle Abrechnungen auschecken, werden die Bilddaten verarbeitet und an den Bildschirm ausgegeben.

Ausgleichen.
Bytes
24 Bit-Bild-Bitmap-Daten

54+ (3n)
1.
Pixel n rotem Wert

54+ (3n + 1)
1.
Pixel n Grünwert

54+ (3n + 2)
1.
Pixel n Blauer Wert

Bitmap-Bilder sind unkomprimiert, 1: 1-Darstellungen von Pixeldaten, die in drei Byte-Sequenzen gespeichert sind. Die Daten beginnen in der unteren rechten Ecke des Bildes; Zuerst der rote Wert, dann grün und blau. Wikipedia hat einen kompletten Bitmap-Gehen.

Wenn die Farbtiefe eines Bitmap-Bildes (24Bit) größer ist als das LCD-Anzeigen (12Bit), müssen wir die am wenigsten signifikanten Bits von Farbdaten verwerfen. Um von 24-Bit-Farben auf 12 Bit-Farben umzuwandeln, spuckten wir einfach die Hälfte der Farbdaten. Ein 8-Bit-Wert von 11110011 wird vier Bits nach rechts gedrückt, wobei 1111 ergibt.

Firmware-Spaziergang

INIT PIC, SD, LCD.

Config.ini lesen, erstellen, wenn es nicht existiert.

Verwenden Sie das erste Zeichen von config.ini, um zwischen der Bildverzögerung einzustellen.

Suchen Sie nach Bildern, öffnen Sie das nächste Bild.

Lesen und prüfen Sie den Bitmap-Dateikopf für ein ordnungsgemäßes Format.

Lesen und prüfen Sie den Bitmap-Informationskopf für Version, Größe, Farbe.

Lesen und zeigen Sie jeden Pixelwert an und zeigen Sie an. Bittiefe nach Bedarf anpassen.

Verzögerung, wiederholen Sie dann von 4.

Bilder vorbereiten.

Um diese Demo-Demo einfach zu halten, zeigt der Fotorahmen nur das häufigste Bitmap-Format an. Bilder sollten mit 24-Bit-Farben auf 132×132 Pixel groß sein.

Öffnen Sie ein Bild mit einem Bildbearbeitungsprogramm.

Zeichnen Sie ein quadratisches Auswahlfeld über den Teil des Bildes, das Sie verwenden möchten, typischerweise mithilfe von Shift und Ziehen.

Das Bild zuschneiden.

Größe das Bild auf 132x132Pixel.

Speichern Sie das Bild als Windows-Bitmap, 24Bit Farbtiefe.

Andere Bildgrößen und -formate können mit einem Firmware-Upgrade (PNG, JPG) unterstützt werden, insbesondere mit einem PIN-kompatiblen Mikrocontroller-Upgrade auf ein riesiges DSPIC 33F.

Es benutzen

Setzen Sie Bilder in das Stammverzeichnis einer fetten formatierten SD-Karte. je nach laST-Gerät Um die Karte zu formatieren, muss es möglicherweise mit einer digitalen Videokamera oder dem Panasonic SD-Formatierer formatiert werden.

Optional: Erstellen Sie eine config.ini-Datei mit einem Texteditor. Geben Sie eine einzelne Ziffer von 0-9 ein, um die zwischen Bildverzögerung einzustellen. Speicher die Datei. Wenn Sie keine eigene Datei config.ini erstellen, wird man für Sie mit einer 1-Sekunden-Verzögerung erstellt.

Legen Sie die Karte in die Buchse und stecken Sie den digitalen Bilderrahmen ein. Die Bilder werden mit der definierten Verzögerung auf dem Bildschirm radeln.

Es weiter nehmen

In diesem einfachen digitalen Bilderrahmen sehen wir viel Potenzial. Zahlreiche Funktionen können mit einem Firmware-Upgrade hinzugefügt werden, einige sind die Basis für zukünftige Hardware.

Andere Bildformate anzeigen, Skalenbilder

Zufällige Verblassen und Tücher

Anzeigezeit und Datum über Bild, Set mit den Tasten, die an die Programmierstifte angeschlossen sind

Erweitern Sie die Konfigurationsoptionen in config.ini, um längere Verzögerungen, Fade oder Wipe-Typ aufzunehmen

Verwenden Sie ein Unterverzeichnis für Bilder, da einige Dateibegrenzungen für das Stammverzeichnis einer fetten formatierten SD-Karte vorhanden sind.

Fügen Sie eine Ethernet-Verbindung für vernetzte Display-Updates hinzu.

Download: dpf.v1.zip Es ist hierher bewegt.

Back to top