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.
Video/Embed: Fördjupning del 1.
Video/Embed: Fördjupning del 2.

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.




