0

RA8875 Driver Board Not working with SD card?
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 12:26 am

Hello i have a small problem. I'm trying to display some images onto the RA8875 Driver board with a 5" LCD display both from adafruit i have bought But The problem is that when i try to add a SD card module and wire it up correctly The display dose not want to come on. But when i use the standard arduino SD explain of CardInfo i get what is on the SD card only one image which i uploaded a BMP image. However if i pull the SD card module out the and reapply power the LCD screen comes on with no problem. Here is the info from the card.

Code: Select all | TOGGLE FULL SIZE
Initializing SD card...Wiring is correct and a card is present.

Card type: SDHC

Volume type is FAT32

Volume size (bytes): 2943352832
Volume size (Kbytes): 2874368
Volume size (Mbytes): 2807

Files found on the card (name, date and size in bytes):
SYSTEM~1/     2018-04-04 03:04:44
  INDEXE~1      2018-04-04 03:04:44 76
P480272.BMP   2016-08-03 06:59:48 391734


Here is where i bought my SD card module from in eBay.
https://www.ebay.com/itm/Micro-SD-TF-Me ... Swgn5XEW8i


I'm trying to use the example code from the Adafruit RA8875 library that is called ra8875_bmpmap. here it is the arduino sketch.

Code: Select all | TOGGLE FULL SIZE
#include <Adafruit_GFX.h>    // Core graphics library
#include <SPI.h>
#include <Wire.h>   
#include <SD.h>
#include "Adafruit_RA8875.h"
#include <Adafruit_STMPE610.h>
#define sd_cs 6                          // uding ethernet shield sd

// Library only supports hardware SPI at this time
// Connect SCLK to UNO Digital #13 (Hardware SPI clock)
// Connect MISO to UNO Digital #12 (Hardware SPI MISO)
// Connect MOSI to UNO Digital #11 (Hardware SPI MOSI)
#define RA8875_INT 3
#define RA8875_CS 10
#define RA8875_RESET 9

Adafruit_RA8875 tft = Adafruit_RA8875(RA8875_CS, RA8875_RESET);

void setup () {
  Serial.begin(9600);

  if (!SD.begin(sd_cs))
  {
    Serial.println("initialization failed!");
    return;
  }

  Serial.println("initialization done.");

  Serial.println("RA8875 start");

  /* Initialise the display using 'RA8875_480x272' or 'RA8875_800x480' */
  if (!tft.begin(RA8875_800x480)) {
    Serial.println("RA8875 Not Found!");
    while (1);
  }

  Serial.println("Found RA8875");

  tft.displayOn(true);
  tft.GPIOX(true);      // Enable TFT - display enable tied to GPIOX
  tft.PWM1config(true, RA8875_PWM_CLK_DIV1024); // PWM output for backlight
  tft.PWM1out(255);

  Serial.print("(");
  Serial.print(tft.width());
  Serial.print(", ");
  Serial.print(tft.height());
  Serial.println(")");
  tft.graphicsMode();                 // go back to graphics mode
  tft.fillScreen(RA8875_BLACK);
  tft.graphicsMode();     
  bmpDraw("parrot.bmp", 0, 0);
}

void loop()
{
}   

// This function opens a Windows Bitmap (BMP) file and
// displays it at the given coordinates.  It's sped up
// by reading many pixels worth of data at a time
// (rather than pixel by pixel).  Increasing the buffer
// size takes more of the Arduino's precious RAM but
// makes loading a little faster.  20 pixels seems a
// good balance.

#define BUFFPIXEL 20

void bmpDraw(char *filename, int x, int y) {
  File     bmpFile;
  int      bmpWidth, bmpHeight;   // W+H in pixels
  uint8_t  bmpDepth;              // Bit depth (currently must be 24)
  uint32_t bmpImageoffset;        // Start of image data in file
  uint32_t rowSize;               // Not always = bmpWidth; may have padding
  uint8_t  sdbuffer[3*BUFFPIXEL]; // pixel in buffer (R+G+B per pixel)
  uint16_t lcdbuffer[BUFFPIXEL];  // pixel out buffer (16-bit per pixel)
  uint8_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer
  boolean  goodBmp = false;       // Set to true on valid header parse
  boolean  flip    = true;        // BMP is stored bottom-to-top
  int      w, h, row, col;
  uint8_t  r, g, b;
  uint32_t pos = 0, startTime = millis();
  uint8_t  lcdidx = 0;
  boolean  first = true;

  if((x >= tft.width()) || (y >= tft.height())) return;

  Serial.println();
  Serial.print(F("Loading image '"));
  Serial.print(filename);
  Serial.println('\'');

  // Open requested file on SD card
  if ((bmpFile = SD.open(filename)) == NULL) {
    Serial.println(F("File not found"));
    return;
  }

  // Parse BMP header
  if(read16(bmpFile) == 0x4D42) { // BMP signature
    Serial.println(F("File size: "));
    Serial.println(read32(bmpFile));
    (void)read32(bmpFile); // Read & ignore creator bytes
    bmpImageoffset = read32(bmpFile); // Start of image data
    Serial.print(F("Image Offset: "));
    Serial.println(bmpImageoffset, DEC);

    // Read DIB header
    Serial.print(F("Header size: "));
    Serial.println(read32(bmpFile));
    bmpWidth  = read32(bmpFile);
    bmpHeight = read32(bmpFile);

    if(read16(bmpFile) == 1) { // # planes -- must be '1'
      bmpDepth = read16(bmpFile); // bits per pixel
      Serial.print(F("Bit Depth: "));
      Serial.println(bmpDepth);
      if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
        goodBmp = true; // Supported BMP format -- proceed!
        Serial.print(F("Image size: "));
        Serial.print(bmpWidth);
        Serial.print('x');
        Serial.println(bmpHeight);

        // BMP rows are padded (if needed) to 4-byte boundary
        rowSize = (bmpWidth * 3 + 3) & ~3;

        // If bmpHeight is negative, image is in top-down order.
        // This is not canon but has been observed in the wild.
        if(bmpHeight < 0) {
          bmpHeight = -bmpHeight;
          flip      = false;
        }

        // Crop area to be loaded
        w = bmpWidth;
        h = bmpHeight;
        if((x+w-1) >= tft.width())  w = tft.width()  - x;
        if((y+h-1) >= tft.height()) h = tft.height() - y;

        // Set TFT address window to clipped image bounds

        for (row=0; row<h; row++) { // For each scanline...
          // Seek to start of scan line.  It might seem labor-
          // intensive to be doing this on every line, but this
          // method covers a lot of gritty details like cropping
          // and scanline padding.  Also, the seek only takes
          // place if the file position actually needs to change
          // (avoids a lot of cluster math in SD library).
          if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
            pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
          else     // Bitmap is stored top-to-bottom
          pos = bmpImageoffset + row * rowSize;
          if(bmpFile.position() != pos) { // Need seek?
            bmpFile.seek(pos);
            buffidx = sizeof(sdbuffer); // Force buffer reload
          }

          for (col=0; col<w; col++) { // For each column...
            // Time to read more pixel data?
            if (buffidx >= sizeof(sdbuffer)) { // Indeed
              // Push LCD buffer to the display first
              if(lcdidx > 0) {
                tft.drawPixel(col+x, row+y, lcdbuffer[lcdidx]);
                lcdidx = 0;
                first  = false;
              }

              bmpFile.read(sdbuffer, sizeof(sdbuffer));
              buffidx = 0; // Set index to beginning
            }

            // Convert pixel from BMP to TFT format
            b = sdbuffer[buffidx++];
            g = sdbuffer[buffidx++];
            r = sdbuffer[buffidx++];
            lcdbuffer[lcdidx] = color565(r,g,b);
            tft.drawPixel(col+x, row+y, lcdbuffer[lcdidx]);
          } // end pixel

        } // end scanline

        // Write any remaining data to LCD
        if(lcdidx > 0) {
          tft.drawPixel(col+x, row+y, lcdbuffer[lcdidx]);
        }

        Serial.print(F("Loaded in "));
        Serial.print(millis() - startTime);
        Serial.println(" ms");

      } // end goodBmp
    }
  }

  bmpFile.close();
  if(!goodBmp) Serial.println(F("BMP format not recognized."));

}

// These read 16- and 32-bit types from the SD card file.
// BMP data is stored little-endian, Arduino is little-endian too.
// May need to reverse subscript order if porting elsewhere.

uint16_t read16(File f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read(); // MSB
  return result;
}

uint32_t read32(File f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read(); // MSB
  return result;
}

uint16_t color565(uint8_t r, uint8_t g, uint8_t b) {
  return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}

byte decToBcd(byte val){
  // Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}




I also forgot I'm using a Arduino uno board. Can someone please help me???

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 12:30 am

I'm sorry i forgot one other thing. When i uploaded the ra8875_bmpmap example i get this message in Serial monitor.


initialization done.
RA8875 start
RA8875 Not Found!

I did change the Select from 4 to 6 on the board so it matches the Sketch. But i did change the bmp image name to P480272.bmp so it can match what is on the sd card.

Also there are no errors while uploading. Everything went good.

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 1:57 am

I think I'm close to the problem. It might be the SD card module. It might not like sharing stuff on the SPI bus and Locks it up for only the SD card being on it.

Can anyone tell me if I'm close or not? I'm going to Solder some male header pins on a SD card adapter full side and Wire it up to the arduino with the module. I have done it before and worked. So I'm going to try it again and see if it will work or not.

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 2:44 am

Okay here is a update. I have wired up a SD card with male header pins like in this image I'm attaching. And i did get it to work it did read the files with no problem. But when i go to upload the other sketch ra8875_bmpmap i get the same error

initialization done.
RA8875 start
RA8875 Not Found!


When i pulled all the wires from the SD card and rebooted the uno board the LCD display and controller board worked perfectly. So that means the RA8875 controller board doesn't like anything else Attached to the SPI bus while the RA8875 Driver control board is hooked up. Can someone on the Adafruit support Staff help me please??
Attachments
Due_and_SD_001.png
Due_and_SD_001.png (91.59 KiB) Viewed 536 times

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 8:15 pm

What am i doing wrong. No matter what i attach to the SPI bus a Ethernet shield or a SD card module really anything The LCD driver board and LCD doesn't work.

Is it a problem with the Library or something wrong with the RA8875, or with the chip it's self?

Update: I narrow it down to two pins Mosi and Miso. When i connect Mosi the LCD doesn't work. When i unplug it and connect Miso the LCD doesn't want to come on either. So now there might be something either wrong with the RA8875 library or the RA8875 doesn't like other devices and only wants to lock them up so nothing works if it connects to SPI when the RA8875 driver board is connected.

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by adafruit_support_carter on Sun Apr 08, 2018 8:56 pm

Post a photo of your setup showing how everything (UNO, display, SD card reader) are all connected.

adafruit_support_carter
 
Posts: 5878
Joined: Tue Nov 29, 2016 2:45 pm

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 9:18 pm

Hello i have used all the same Jumper wires to match everything up Here are the images of the setup.

20180408_210850.jpg
20180408_210850.jpg (202.57 KiB) Viewed 473 times


20180408_210845.jpg
20180408_210845.jpg (158.18 KiB) Viewed 473 times


20180408_210837.jpg
20180408_210837.jpg (250.01 KiB) Viewed 473 times

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Sun Apr 08, 2018 10:25 pm

First thing i did i check and rechecked my wiring 8 times over or more i lost track on how many times. The wiring is correct. Then i made sure the sketch was pointed to the correct pins. And they was i recheck them at least 5 or 6 times. I checked everything and still having this problem. Please i need help.


Joseph

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by adafruit_support_carter on Mon Apr 09, 2018 12:18 pm

Let's see if we can get the display to work first. Check the following wiring and change if needed - Pin 3 looks like it's going to WAIT, not INT. Leave everything else wired as is and try running this example sketch:
https://github.com/adafruit/Adafruit_RA ... xtmode.ino

You may need to install the GFX library, which you can do through the Library Manager.

adafruit_support_carter
 
Posts: 5878
Joined: Tue Nov 29, 2016 2:45 pm

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Mon Apr 09, 2018 1:17 pm

Hello i do have GFX library installed from before because of one of my other adafruit LCD screens. i did try that sketch and i get nothing coming up. I did change pin 3 to wait sorry my mistake on that i must of pulled it and put in the wrong place. When i uploaded the sketch i get this inserial monitor,

RA8875 start
RA8875 Not Found!


But if i pull the SD card module from the breadboard i get this from the serial monitor.

RA8875 start

after that and the LCD screen comes on.

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Mon Apr 09, 2018 4:11 pm

This is my SD card module.



CALATEX_2.jpg
CALATEX_2.jpg (42.92 KiB) Viewed 400 times

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Tue Apr 10, 2018 1:30 am

Hello i been testing it again with the SD card nodule and getting the same Error in the Serial monitor in the ra8875_bmpmap sketch.




initialization done.
RA8875 start
RA8875 Not Found!

What now? I been trying everything.

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by adafruit_support_carter on Tue Apr 10, 2018 11:39 am

Okay here is a update. I have wired up a SD card with male header pins like in this image I'm attaching. And i did get it to work it did read the files with no problem.

And this means the SD card reader work by itself also, correct?

To make sure - the two pieces of hardware work OK if you use the separately. But if you try to tie them together so you can use them at the same time, they stop working?

adafruit_support_carter
 
Posts: 5878
Joined: Tue Nov 29, 2016 2:45 pm

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Tue Apr 10, 2018 12:33 pm

Hello i put the SD card module on a different breadboard with another Uno board and uploaded the Example sketch from Arduino called Cardinfo and this is what the Serial monitor shows

Initializing SD card...Wiring is correct and a card is present.

Card type: SDHC

Volume type is FAT32

Volume size (bytes): 2943352832
Volume size (Kbytes): 2874368
Volume size (Mbytes): 2807

Files found on the card (name, date and size in bytes):
SYSTEM~1/ 2018-04-04 03:04:44
INDEXE~1 2018-04-04 03:04:44 76
P480272.BMP 2016-08-03 06:59:48 391734


Yes SD card module works with no problem

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Re: RA8875 Driver Board Not working with SD card?

by josephchrzempiec on Tue Apr 10, 2018 4:43 pm

Hello yes if apart the SD card module on it's own arduino uno board works perfect. Same with the ra8875 driver board and lcd if on it's own uno board no problems. But if tied together they both stop working.

josephchrzempiec
 
Posts: 56
Joined: Tue May 12, 2015 4:34 am

Please be positive and constructive with your questions and comments.


cron