Помогите подключить lcd от Mitsubishi Trium Mars к UNO r3

smirnoww
Offline
Зарегистрирован: 24.10.2015

использованные источники информации:

Положительный опытhttp://vrtp.ru/index.php?showtopic=1120&st=1411

Двумя сообщениями ранее этот же автор выложил lcd_table.zip, где есть распиновка

Распиновка lcd mitsubishi Trium Mars

datasheet PCF8812 http://datasheet4u.com/datasheet-pdf/NXP/PCF8812/pdf.php?id=37049 отсюда брал строку инициализации. плюс добавлял символ 27 (B11011), который необходим для запуска этого экрана, т.к. в нём, судя по форумам (тынц1, тынц2) не pcf8812, а его аналог. и без этого символа не работает.

 

В итоге я спаял такую шутку:

на практике это выглядит вот так

пины пронумеровал справа на лево, если смотреть на экран и шлейф снизу. На этой фотке нумерация будет слева направо.

Конденсатор добавил не сразу. сначала Vout оставил висеть в воздухе. Пробовал разные строки инициализации. экран признаков жизни не подавал. потом вот здесь увидел подключение этого вывода к земле через конденсатор 1 мкФ. у меня нашёлся только 22 мкФ. через него и подключил. в итоге при подаче питания экран примерно секунду показывает такую картинку

потом опять никаких признаков жизни.

в ардуину загружал такой скетч

#include "SPI.h" // necessary library
int RESpin = 8;
int DCpin = 9;
int SSpin=10; // using digital pin 10 for SPI slave select

int del=200; // used for various delays
int OutVal = 200;

void setup()
{
 
  pinMode(SSpin, OUTPUT); // we use this for SS pin
  pinMode(RESpin, OUTPUT); //
  pinMode(DCpin, OUTPUT); // 

  SPI.begin(); // wake up the SPI bus.
  SPI.setBitOrder(MSBFIRST);

  digitalWrite(DCpin, LOW); // set command mode

  // RESET
  digitalWrite(RESpin, LOW);
  delay(del);
  digitalWrite(RESpin, HIGH);
  delay(del);

  //setValue(B100001);  //function set; bit PD = 0, bit V = 0; select extended instruction set (bit H = 1 mode)
  //setValue(B10001);  //set charge pump range HIGH (bit PRS = 1)
  setValue(32);  //set PD=0,V=0,H=0
  setValue(12);  //set PD=0,V=0,H=0
  setValue(27);  //unknown code

 /*
  setValue(32);  //set PD=0,V=0,H=0
  //setValue(9);  //when H=0, set D=0,E=1 - all segment ON
  SPI.transfer(10);  //when H=0, set D=1,E=0 - normal
  setValue(64);  //when Y=0
  setValue(128);  //when X=0
  setValue(27);  //unknown code
*/

/*
  setValue(0x21);
  setValue(0xCF);
  setValue(0x06);
  setValue(0x14);
  setValue(0x20);
  setValue(0x0C);
  setValue(0x1B);
*/

/*
  //SPI.transfer(32);  //set PD=0,V=0,H=0
  delay(del);  
  //SPI.transfer(9);  //when H=0, set D=0,E=1 - all segment ON
  //SPI.transfer(10);  //when H=0, set D=1,E=0 - normal
  delay(del);  

  SPI.transfer(64);  //when Y=0
  delay(del);  

  SPI.transfer(128);  //when X=0
  delay(del);  

  SPI.transfer(27);  //unknown code
  delay(del);  
*/


  digitalWrite(DCpin, HIGH); // set data mode
}

void setValue(int value)
{
  digitalWrite(SSpin, LOW);
  SPI.transfer(0); // send command byte
  SPI.transfer(value); // send value (0~255)
  digitalWrite(SSpin, HIGH);
}

void loop()
{
  // print next value
  setValue(OutVal);

  OutVal += 3;
  if (OutVal>255)
    OutVal = 0;
  delay(200);
}

в функции setup()

закомментированы разные строки инициализации. эффект везде одинаковый.

Подскажите, пожалуйста, с какой стороны подступиться? где искать причину такого поведения дисплея? Что я сделал неправильно?

все ноги прозвонил. всё спаяно нормально. Все значения, кроме SPI промерил тестером - тоже всё впорядке.

Подскажите, как протестировать SPI.

Буду рад любой помощи. Заранее спасибо

smirnoww
Offline
Зарегистрирован: 24.10.2015

в соответствии с даташитом к моменту подачи питания на /RES должен быть низкий уровень.

припаял питание к 7 выводу ардуины. тока хватает для питания. изменил функцию инициализации

void setup()
{
 
  pinMode(SSpin, OUTPUT); // we use this for SS pin
  pinMode(RESpin, OUTPUT); //
  pinMode(DCpin, OUTPUT); // 
  pinMode(Vddpin, OUTPUT); // 


  SPI.begin(); // wake up the SPI bus.
  SPI.setBitOrder(MSBFIRST);
//  SPI.setBitOrder(LSBFIRST);

  digitalWrite(Vddpin, LOW); // power off

  //digitalWrite(SSpin, LOW); // set command mode

  digitalWrite(DCpin, LOW); // set command mode

  // RESET
  digitalWrite(RESpin, LOW);
  delay(del);
  digitalWrite(Vddpin, HIGH); // power on
  delay(del);
  digitalWrite(RESpin, HIGH);
  delay(del);

  //setValue(B100001);  //function set; bit PD = 0, bit V = 0; select extended instruction set (bit H = 1 mode)
  //setValue(B10001);  //set charge pump range HIGH (bit PRS = 1)
  setValue(32);  //set PD=0,V=0,H=0
  setValue(12);  //set PD=0,V=0,H=0
  setValue(27);  //unknown code

  digitalWrite(DCpin, HIGH); // set data mode
}

экран при таком подключении вообще не подаёт признаков жизни

 

хелп!

arcon73
Offline
Зарегистрирован: 06.04.2017