QVGA320x240
QVGA320x240
Drivkretsen i denna modul Àr ILI9341 och anvÀnder 4 trÄdar SPI-interface.
En fördel med denna display Àr att den inte tar mÄnga portar pÄ UNO-kortet, och dÄ finns fler portar kvar för övriga experiment.
Video: GenomgÄng av QVGA320x240 display.

Stiftrad J2 Àr till displayen
Vcc: DrivspÀnning 5 Volt.
GND: Jord.
CS: Chip select. Om det Àr flera moduler pÄ en SPI-buss mÄste dessa ha var sin CS.
Exempel: SD-kortets CS kan vara kopplat till port 4 och displayens CS till port 10 pÄ UNO-kortet.
RESET: HÀr Àr den inte styrd frÄn UNO-kortet, utan permanent kopplad till 3 Volt.
D/C (Data/Command): Command anvÀnds för instÀllningar i SPI-bussen, till exempel bakgrundsbelysning, ljusstyrka eller adress för kommande data.
Data Àr det som ska visas pÄ displayen.
MOSI: Master Output Slave Input, data frÄn UNO-kortet.
SCK: Serial Clock, klockar en puls för varje bit.
LED: Ström till bakgrundsbelysningen. Denna mÄste ha ett 100 Ohms motstÄnd nÀr den körs med 5 Volt.
MISO: Master Input Slave Output, behöver inte kopplas.
Stiftrad J4 Àr till SD-kortet
DS_CS: Chip select.
DS_MOSI: Master Output Slave Input, data frÄn UNO-kortet.
DS_MISO: Master Input Slave Output.
DS_SCK: Serial Clock.

Modulen mÄste ha 3 Volts nivÄ till portarna. Speciellt RESET mÄste ha 3 Volt.
Om du inte ska anvÀnda SD-kortlÀsaren rÀcker det med en 4-bitars nivÄanpassning.

MISO behöver inte kopplas, eftersom det inte gÄr nÄgon data frÄn displayen till UNO-kortet.
AnvÀnder du bara displayen och inte kortlÀsaren behöver du inte koppla kablar till de vÀnstra stiften mÀrkta SD_xxxx.
Bilder som Àr med i bildspelet finns att ladda ner lÀngst ner pÄ originalsidan.
Video: Exempel och test av QVGA320x240.

Arduino-kod
#include <Adafruit_GFX.h> // Core graphics library #include "Adafruit_ILI9341.h" // Hardware-specific library #include <SPI.h> #include <SD.h> // TFT display and SD card share hardware SPI. // For Arduino Uno: pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK. #define TFT_DC 9 #define TFT_CS 10 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); #define SD_CS 4 void setup(void) { Serial.begin(9600); tft.begin(); tft.setRotation(3); tft.fillScreen(ILI9341_BLUE); Serial.print("Initializing SD card..."); if (!SD.begin(SD_CS)) { Serial.println("failed!"); } Serial.println("OK!"); } void loop() { // max 8 tecken i filnamn bmpDraw("krymp.bmp", 0, 0); delay(1000); bmpDraw("Banner2.bmp", 0, 0); delay(1000); bmpDraw("bread.bmp", 0, 0); delay(1000); bmpDraw("Banner2.bmp", 0, 0); delay(1000); bmpDraw("Level.bmp", 0, 0); delay(1000); bmpDraw("Banner2.bmp", 0, 0); delay(1000); bmpDraw("Rain.bmp", 0, 0); delay(1000); bmpDraw("Banner2.bmp", 0, 0); delay(1000); bmpDraw("Budget.bmp", 0, 0); delay(1000); bmpDraw("Banner2.bmp", 0, 0); delay(1000); } // Opens a Windows BMP and displays it at the given coordinates. #define BUFFPIXEL 20 void bmpDraw(char *filename, uint8_t x, uint16_t y) { File bmpFile; int bmpWidth, bmpHeight; uint8_t bmpDepth; uint32_t bmpImageoffset; uint32_t rowSize; uint8_t sdbuffer[3 * BUFFPIXEL]; uint8_t buffidx = sizeof(sdbuffer); boolean goodBmp = false; boolean flip = true; int w, h, row, col; uint8_t r, g, b; uint32_t pos = 0, startTime = millis(); if ((x >= tft.width()) || (y >= tft.height())) return; Serial.println(); Serial.print(F("Loading image 039;")); Serial.print(filename); Serial.println(039;\039;039;); if ((bmpFile = SD.open(filename)) == NULL) { Serial.print(F("File not found")); return; } if (read16(bmpFile) == 0x4D42) { Serial.print(F("File size: ")); Serial.println(read32(bmpFile)); (void)read32(bmpFile); bmpImageoffset = read32(bmpFile); (void)read32(bmpFile); bmpWidth = read32(bmpFile); bmpHeight = read32(bmpFile); if (read16(bmpFile) == 1) { bmpDepth = read16(bmpFile); if ((bmpDepth == 24) && (read32(bmpFile) == 0)) { goodBmp = true; rowSize = (bmpWidth * 3 + 3) & ~3; if (bmpHeight < 0) { bmpHeight = -bmpHeight; flip = false; } w = bmpWidth; h = bmpHeight; if ((x + w - 1) >= tft.width()) w = tft.width() - x; if ((y + h - 1) >= tft.height()) h = tft.height() - y; tft.setAddrWindow(x, y, x + w - 1, y + h - 1); for (row = 0; row < h; row++) { if (flip) pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize; else pos = bmpImageoffset + row * rowSize; if (bmpFile.position() != pos) { bmpFile.seek(pos); buffidx = sizeof(sdbuffer); } for (col = 0; col < w; col++) { if (buffidx >= sizeof(sdbuffer)) { bmpFile.read(sdbuffer, sizeof(sdbuffer)); buffidx = 0; } b = sdbuffer[buffidx++]; g = sdbuffer[buffidx++]; r = sdbuffer[buffidx++]; tft.pushColor(tft.color565(r, g, b)); } } Serial.print(F("Loaded in ")); Serial.print(millis() - startTime); Serial.println(" ms"); } } } bmpFile.close(); if (!goodBmp) Serial.println(F("BMP format not recognized.")); } uint16_t read16(File &f) { uint16_t result; ((uint8_t *)&result)[0] = f.read(); ((uint8_t *)&result)[1] = f.read(); return result; } uint32_t read32(File &f) { uint32_t result; ((uint8_t *)&result)[0] = f.read(); ((uint8_t *)&result)[1] = f.read(); ((uint8_t *)&result)[2] = f.read(); ((uint8_t *)&result)[3] = f.read(); return result; }
Problem?
Om det inte gÄr att lÀsa frÄn SD-kortet, kontrollera att det Àr formaterat med FAT och inte NTFS.
Denna sida Àr konverterad med hjÀlp av AI.
En sida för dig som bygger elektronik sjÀlv, experimenterar och laborerar.
Skapad av Per-Anders Hult för PchButik.se.




