Помогите раскурить SPI (не спайс)
- Войдите на сайт для отправки комментариев
Досталась мне нахаляву дохлая автомагнитола . Плевать на нее. Дисплей у нее интересный. На чипе pt6523.
Работает по протоколу похожему на SPI. Вот даташит на pt6523 https://www.elatec-elco.com/fileadmin/user_upload/electronic-components/Datasheets/Accesories/LCD_Driver_50/PT6523.pdf
Если я правильно понял работает так :
1. Подаем на CS нолик
2.Передаем 41H (инициализация чипа)
3. Подаем на CS единичку
4.Передаем 156 бит данных,где каждый бит это один сегмент дисплея. Причем биты передаются "задом наперед"
5.Передаем 4 служебных бита
Завести дисплей удалось а в от с передачей данных не выходит. Знаний маловато. Не получается сделать правильный "комплект" из 19 перевернутых битов.
Обращаюсь за помощью к коллективному разуму.
Набросал тестовый скетч
#include <SPI.h> // подключаем библиотеку SPI
const int chipSelectPin = 10; //pin для CS
int test = 255;
void setup() {
pinMode(chipSelectPin, OUTPUT);
SPI.begin();
}
void loop()
{
digitalWrite(chipSelectPin, LOW); // вкл CS
SPI.transfer(0x82); //выбираем наш чип (первые 8 бит, 41H согласно даташиту)
digitalWrite(chipSelectPin, HIGH); // выкл CS
//*************************19 байт данных
for (int k=0; k<255; k++)
{
SPI.transfer(test);
delay(10);
}
//**********************
//*************4 служебных бита
SPI.transfer(0);
SPI.transfer(0);
SPI.transfer(0);
SPI.transfer(0);
//*************************************
digitalWrite(chipSelectPin, LOW); // вкл CS
delay(1000);
test--;
}
А вот фото этого чуда
На фото включены все сегменты - в данных 156 единичек
Обратная сторона луны

Дисплей еще интересен тем что в корпусе установлен энкодер и много кнопок.
Подсветка тускловата из за того что подал 5 вместо 8 вольт.
Раскурил сам .
Вот тестовый скетч. Последовательно включает все ячейки дисплея.
Не претендует на "прямизну" но работает.
Вопрос решен.
#include <SPI.h> // подключаем библиотеку SPI const int chipSelectPin = 10; //pin для CS byte test = 1; byte M1[8]={128,64,32,16,8,4,2,1}; void setup() { pinMode(chipSelectPin, OUTPUT); SPI.begin(); } void loop() { if (test==1){ //****************** 1 проход из 20 for (int s=0;s<8;s++){ digitalWrite(chipSelectPin, LOW); // вкл CS SPI.transfer(0x82); //выбираем наш чип (первые 8 бит, 41H согласно даташиту) digitalWrite(chipSelectPin, HIGH); // выкл CS SPI.transfer(M1[s]); for (int k=1;k<20;k++){ SPI.transfer(0); delay (10); } } } //**************************** 1 проход из 20 if (test>1){ //****************** проходы 2 - 20 for (int s=0;s<8;s++){ digitalWrite(chipSelectPin, LOW); // вкл CS SPI.transfer(0x82); //выбираем наш чип (первые 8 бит, 41H согласно даташиту) digitalWrite(chipSelectPin, HIGH); // выкл CS for (int w=1;w<test;w++){ SPI.transfer(0); delay (10); } SPI.transfer(M1[s]); for (int w=1;w<20-test;w++){ SPI.transfer(0); delay (10); } } } //****************** проходы 2 - 20 test++; if (test==20){test=1;} }Вот видео https://youtu.be/f0tlwG2pI_E
Привет. покажи фото или скажи пожалуйста какие пины использовал с ардуино
Привет. покажи фото или скажи пожалуйста какие пины использовал с ардуино
Хм, а какие еще пины можно использовать на хардварном SPI? )))))
Короче вчера подключил все таки дисплей от магнитолы к ардуино нано. Драйвер СТ6523. Надпись хелло ворлд бегала, су..а радости не было предела , я этот дисплей с того года , летом привез из другого города от друзей. Но потом падает паяльник и задевает провод данных от микроконтроллера и вырывает ножку данных под корень. Су..а я чуть не заплакал)) ночь мучений и 15 мин удовлетворения. Очень обидно
А че , нормальный такой секас ))
Я тож со своим мучался , но примения ему так и не нашел . Так и валяется ..