zeconir

Прошу помощи с определением распиновки и контроллера дисплея

2 сообщения в этой теме

zeconir    100

Добрый день. Появилась возможность добыть несколько десятков дисплеев от китайфонов. Дисплеи с сенсором, так что для радиолюбителя - прям лакомый кусочек. Но вот инфы на них нет.

Надписи на шлейфе:
M403B115
M30112B341
FPC-FTM300D80Z
2010-01-26

На сенсоре:
PB093-FR-TR

Прошу помощи в определении контроллера и распиновки, может ко-то с ними уже сталкивался. В крайнем случае, можно и только контроллер. Распиновку и инициализацию попытаюсь снять лог. анализатором с рабочего тела с аналогичным дисплеем.

lot_45_mega_lot_displeyv_120_shtuk.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
andryxa    216

Очень уж их много китайцы наплодили, инфу можно и не найти. Но можно поступить по другому, распиновок 37, 40 пиновых всего несколько штук, сравнением можно определить какая у вас распиновка. После определения распиновки можно подключить к контроллеру и прочитать из нулевого регистра первые два байта, это и будет маркировка контроллера дисплея. 

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Гость Артур
      Автор: Гость Артур
      На брелке автосигнализации Sheriff ZX-930 разбился LCD-экран. Купил новый брелок на авито, но продавец подсунул нерабочий (бог ему судья). Видимо что-то с мозгами у брелка, т.к. не реагирует на кнопки и т.д., но экран рабочий. В общем хочу экран поставить на мой брелок. Но там к нему подходит плоский шлейф, сидит видимо не клее. Пошел в мастерскую, там почему-то отказались делать, хотя думаю для них это не сложно. В общем хочу сам попробовать переставить.
      Буду очень благодарен за рецепт как аккуратно снять и переставить LCD с шлейфом.

    • Автор: Дмитрий Мартынов
      Здравствуйте!
      Пишу программу на C++ для управления LCD (HD44780) по I2C через модуль расширения портов ввода/вывода PCF8574AT.
      void LCD_I2C::readBF() { transmitByte(0b00001110); //transmits E, RW set to HIGH and RS, set to LOW _delay_ms(5); transmitByte(0b00001010); //transmits E, RS set to LOW and RW set to HIGH _delay_ms(5); initRestart(); transmitAddrRW(0b01111111); //sends PCF8574AT address + SLA+R do { receiveDataAck(); PORTA = storage; } while((storage & (1 << BF)) != 0); //wait until BF is 0 initRestart(); transmitAddrRW(0b01111110); } Метод void transmitByte(uint8_t data) после инициализации состояния "Старт" и отправки адреса устройства + SLA+W отправляет байт данных по TWI с ожиданием бита подтверждения (команды работают верно, проверял по регистру статуса TWI - 0x08, 0x10 и 0x24).
      Метод void transmitAddrRW(uint8_t address) отправляет соответственно SLA+W/R + адрес устройства (команда работает также верно). Нареканий к работе TWI у меня нет, т.к. недавно с его помощью успешно запустил часы DS1307 с интеграцией LCD.
      После передачи запроса на чтение флага занятости инициализируется состояние "ПОВСТАРТ", отправляется адрес устройства + SLA+R, далее идет цикл - запрос байта данных (состояние выводов PCF8574AT) с отправкой бита подтверждения uint8_t receiveDataAck() (команды работают также верно, возвращает storage = TWDR) и вывод storage на порт А микроконтроллера (там установлены светодиоды).
      Чтение регистра данных TWDR после принятия байта данных (receiveDataAck()) дает следующий результат - 0b00000010 - установлен только бит RW микросхемы. Таким образом, флаг занятости BF = DB7 = 7й бит оказывается сразу же сброшенным, происходит мгновенный выход из цикла - контроллер дисплея не успевает скушать информацию, и инициализация не выполняется (неудачную инициализацию определяю по отсутствию курсора). Ожидалось, что флаг занятости будет установлен в единицу и произойдет несколько итераций перед выходом из цикла.
      При замене метода ожидания сброса флага занятости BF на программную задержку в 250 мс везде, где это требует datasheet - инициализация происходит успешно (появляется курсор, как и должно быть).

      Вопрос: что можно сделать, чтобы вместо _delay_ms(250) использовать readBF(), т.к. этот путь мне кажется более верным (уж очень не хочется использовать задержку .__.)? Возможно, проблема в микросхеме, которая неверно выдает информацию при чтении? (Имеется вторая микросхема, она вообще не работает:D)

      З.Ы. На фото виден результат чтения флага BF и Adress Counter - установлен только бит RW.  



      З.Ы.Ы Кому интересно - вот функция main(). Повторюсь - проблема только в методе readBF():
      void LCD_I2C::init() { setBitRate(20000); initStart(); transmitAddrRW(0b01111110); //send PCF8574AT address + SLA+W _delay_ms(60); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(20); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(5); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(5); sendInstruction(0b00100000); //function set 4-bit operation readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00100000); //function set 4-bit operation, 2 lines, 5x8 dots sendInstruction(0b10000000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display off, cursor off, blinking off sendInstruction(0b10000000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display clear sendInstruction(0b00010000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //entry mode set increment, display shift off sendInstruction(0b01100000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display on, cursor off, blinking off sendInstruction(0b11100000); readBF();/ }  
    • Автор: oner
      Вопрос знатокам: можно ли без особых танцев с бубнами для выведения строчного текста вместо дисплея 1602 подключить 12864?  В идеале  используя то же количество проводов между контроллером и дисплеем. Контроллер Atmega8.
       
      И если можно, то как?
    • Автор: BataniQ1991
      Поломался бп. Универсальный. Нет на выходе напряженИя. Начал ити по схеме и вот на входе трансформатора есть напряжение а на выходе нет. Выход красным отмечен.
      Так вот хочется узнать какая распиновка трансформатора дабы поискать похожий.


    • Автор: LoKeR
      Доброго времени суток, решил создать свои символы на LiquidCrystal по вертикали, нарисовал единичку показывает норм, рядом добавил пятерочку получил место 1->5 и место 5->разбитую 5 (можно на рисунке посмотреть)
      #include <BigCrystal.h> #include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11, 12); BigCrystal bigCrystal(&lcd); /********************edinica********************/ byte edinica1[8] = { 0b11111, 0b11111, 0b01111, 0b00111, 0b00011, 0b00001, 0b00000, 0b00000 }; byte edinica2[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111 }; byte edinica3[8] = { 0b11111, 0b11111, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b00000 }; byte edinica4[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111 }; byte edinica5[8] = { 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte edinica6[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111 }; byte edinica7[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000 }; byte edinica8[8] = { 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; /********************The End********************/ /******************** Pyat *********************/ byte pyat1[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b01111, 0b00111 }; byte pyat2[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte pyat3[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte pyat4[8] = { 0b00000, 0b00001, 0b00011, 0b00011, 0b00011, 0b00011, 0b00011, 0b00011 }; byte pyat5[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte pyat6[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte pyat7[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; byte pyat8[8] = { 0b11100, 0b11110, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 }; /********************* The End *********************/ /**/ /**/ void setup() { bigCrystal.begin(20, 4); /********************edinica********************/ lcd.createChar(1, edinica1); lcd.createChar(2, edinica2); lcd.createChar(3, edinica3); lcd.createChar(4, edinica4); lcd.createChar(5, edinica5); lcd.createChar(6, edinica6); lcd.createChar(7, edinica7); lcd.createChar(8, edinica8); /********************The End********************/ /********************* Pyat *********************/ lcd.createChar(9, pyat1); lcd.createChar(10, pyat2); lcd.createChar(11, pyat3); lcd.createChar(12, pyat4); lcd.createChar(13, pyat5); lcd.createChar(14, pyat6); lcd.createChar(15, pyat7); lcd.createChar(16, pyat8); /********************* The End *********************/ /**/ /**/ } void loop() { /**/ lcd.setCursor(19,0); lcd.write((uint8_t)16); lcd.setCursor(19,1); lcd.write((uint8_t)15); lcd.setCursor(18,0); lcd.write((uint8_t)14); lcd.setCursor(18,1); lcd.write((uint8_t)13); lcd.setCursor(17,0); lcd.write((uint8_t)12); lcd.setCursor(17,1); lcd.write((uint8_t)11); lcd.setCursor(16,0); lcd.write((uint8_t)10); lcd.setCursor(16,1); lcd.write((uint8_t)9); /**/ /********************edinica********************/ lcd.setCursor(19,2); lcd.write((uint8_t)8); lcd.setCursor(19,3); lcd.write((uint8_t)7); lcd.setCursor(18,2); lcd.write((uint8_t)6); lcd.setCursor(18,3); lcd.write((uint8_t)5); lcd.setCursor(17,2); lcd.write((uint8_t)4); lcd.setCursor(17,3); lcd.write((uint8_t)3); lcd.setCursor(16,2); lcd.write((uint8_t)2); lcd.setCursor(16,3); lcd.write((uint8_t)1); /******************** The End ********************/ }