Rading SPI data sent to a NJU6623 LCD controller

HI All,

As part of a project I’m working on I need to read data being sent to a 15-CHARACTER 1-LINE DOT MATRIX LCD CONTROLLER DRIVER with OUTPUT PORT - NJU6623 Data Sheet

The aim will be to use a MEGA2560 as a slave. Read the code its being sent and when it picks up a certain character being sent to the DDRAM address 0x80 start sending different data to the screen.

I have the below code for writing to the screen. This works when directly hooked up to the screen.

#include <SPI.h>
#include <Time.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

//PORTB
#define DATAOUT 51 // MOSI
#define SPICLOCK  52 //sck
#define ssPin 53 // PB0

//PORT L
#define mode0 49
#define mode1 48



/**********************************************
// User configurable
**********************************************/
String welcome = "TEST"; // populate something into the text display - 12 Char max anything else is truncated.




void setup() {

  // Control pins for the display SPI
  pinMode(mode0, OUTPUT);
  pinMode(mode1, OUTPUT);
  pinMode(ssPin, OUTPUT);


  // Real time clock
  rtc.begin();
 rtc.adjust(DateTime(2020, 4, 01, 13, 54, 0)); //a fixed time



  SPI.begin();
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3)); //I couldn't see a defined max speed in the NJU6623 datasheet, 10Meg is quite an increase on the original 9600, so need to monitor incase this is not stable.
  Serial2.begin (4800, SERIAL_8E1);


}

void loop()
{


populateFixedLcdDisplay(welcome);
    
}




/*****************************************************************
  // LCD Display
*****************************************************************/

void populateFixedLcdDisplay(String _lcdInput)
{
  _lcdInput.remove(12);

  if (_lcdInput.length() < 12)
  {
    for (byte i = _lcdInput.length() + 1; i <= 12; i++)
    {
      _lcdInput.concat(' ');
    }
  }

  byte _start = 0x80;

  PORTB &= ~(1 << PB0);
  SPI.transfer(0x80);
  PORTB |= (1 << PB0);

  for (byte i = 0; i < _lcdInput.length(); i++)
  {
    PORTL |= (1 << PL0);
    PORTB &= ~(1 << PB0);
    SPI.transfer(_lcdInput.charAt(i));
    PORTB |= (1 << PB0);
    delayMicroseconds(42);
    PORTL &= ~(1 << PL0);
  }
}

As I don’t have a spare Radio ( the device that currently populates the display) I’ve set up an Uno to act as a slave and read what the above code is sending out so I can test its all working before fitting.

Currently my slave code below kind of reads from the above code but only if i sent certain text that ends in :

#include <SPI.h>
char buff [50];
volatile byte indx;
volatile boolean process;


 
void setup (void) {
   Serial.begin (9600);
   SPI.setDataMode(SPI_MODE3);
   pinMode(MISO, OUTPUT); // have to send on master in so it set as output
   SPCR |= _BV(SPE); // turn on SPI in slave mode
   indx = 0; // buffer empty
   process = false;
   SPI.attachInterrupt(); // turn on interrupt
}
 
ISR (SPI_STC_vect) // SPI interrupt routine 
{ 
   byte c = SPDR; // read byte from SPI Data Register
   if (indx < sizeof buff) {
      buff [indx++] = c; // save data in the next index in the array buff
      if (c == ':') //check for the end of the word
      process = true;
   }
}
 
void loop (void) {
   if (process) {
      process = false; //reset the process
      Serial.println (buff); //print the array on serial monitor
      indx= 0; //reset button to zero
   }


delay(1000);
}

How do I modify the slave to read a single CGRAM character being sent to 0x80 of the DDRAM?