скрытое меню
I2C

LCD дисплей HGS 12832-51 A0 I2C

Примечание: спасибо этому дисплею лично , так как именно он заставил к счастью меня купить логический анализатор всего за 2300р. LA1010 там же на алике.

Как все начиналось

12832 - 128 *32 точек

Процесс начинается с того , что мы толком не знаем какой у нас дисплей и какой контроллер дисплея внутри.
Знаем только , что подключается по I2C, есть схема устройства , в котором он используется.

Предположительно подключается он так:

фотка 1

ERD - Read /Write Enable or Read - подтянут к земле.

Программно используются только линии SDA, SCL, RST и подсветка дисплея. Остальное программно не управляется.

определяем контроллер дисплея I2C

Для этого сканируем шину I2C по разным адресам, т.е. тупо смотрим ответ на команду

HAL_StatusTypeDef res = HAL_I2C_IsDeviceReady(&hi2c2, address, 1, HAL_MAX_DELAY);

У нас ответ пришел по адресу 0x7C (0b01111100).
По информации из интернета определили что , это контроллер дисплея ST7032 (Slaver address 0b01111100).

Находим даташит на ST7032 без проблем

(см. внизу файлы для скачивания)

DDRAM 80 characters * 8 bits
CGRAM Character Generator RAM

Инициализация дисплея

Как я понял сначала сброс по линии RESET (1-0-1).

Потом надо сразу послать такие команды инициализации :


	commandSend(0X38); // FUNCTION SET 8 bit,N=1,5*7dot
	HAL_Delay(1);
	commandSend(0X14); // Internal OSC frequency
	HAL_Delay(1);
	commandSend(0x78); // Contrast set
	HAL_Delay(1);
	commandSend(0X5E); // Power/ICON/Contrast control
	HAL_Delay(1);
	commandSend(0X6A);  //Follower control
	HAL_Delay(200);          // for power stable 
	commandSend(0X0C); // DISPLAY ON
	HAL_Delay(1);
	commandSend(0X01); //CLEAR DISPLAY
	HAL_Delay(2);
	commandSend(0X06); // ENTRY MODE SET , CURSOR MOVES TO RIGHT
	HAL_Delay(1);	

Дисплей упорно молчит - не сдается

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

Тупо посылаем последовательно байты (данные) со значениями от 0 до 256:


		for(uint8_t uu=0x00; uu<0xff; uu++)
			dataSend(uu);

И дисплей в какой-то момент зажег все точки и мы это увидели.

На самом деле это немного добавило смысла - все-равно ничего не понятно...

Точки все загорелись при посылке байта 0xAE. Потом при посылке по второму уже кругу 0x00 все точки потухли.

Теперь пора и почитать даташит ST7032.

Почитали , вроде все делаем правильно...

Момент истины - покупка логического анализатора

Подключаемся к SDA,SCL, RstInd (CS) в работающем устройстве , где используется дисплей, и радости нет предела : Сёсе китай !

фотка 1

Обратите внимание цифры, значения байтов авто-определились (проставлены в синей рамке) :

Итак , что надо посылать , на самом-деле:

0x7С 0x80 0xE2 первый пакет 1110 0010  Set DDRAM address  
0x7С 0x80 0x40 Set CGRAM 
0x7С 0x80 0x22 Function Set
0x7С 0x80 0xA6 ‭1010 0110‬ Set DDRAM address  
0x7С 0x80 0x2F Function Set
0x7С 0x80 0xAF Set DDRAM address 



И сразу на экране зажглись некоторые точки (как звезды на небе). Вот теперь Ура Товарищи!

Далее лог анализатора продолжаем изучать:

0x80 0x00  ???
0x80 0x10  Cursor or Display Shift
0x80 0xB0  Set DDRAM address 0110000
0xC0 0X00  пошли данные ...

Не буду долго здесь расписывать, ибо до конца понять и разобрать все не удалось , но в итоге все более менее заработало :

фотка 1

В итоге все получилось

Лог байтов , которые надо послать :

инициализация

>> 0x80 0x08 0x80 0x40 0x80 0x22 0x80 0xA6 0x80 0x2F 0x80 0xAF

первая строка

>> 0x80 0x00 0x80 0x10

-> C0 00 40 00 00 00 40 7F 42 00 00 3E 45 49 51 3E 00 1E 29 49 49 06 00 36 49 49 49 36 00 03 05 09 71 01 00 30 49 49 4A 3C 00 39 45 45 45 27 00 10 7F 12 14 18 00 31 4B 45 41 21 00 46 49 51 61 42 00 00 40 7F 42 00 00 3E 45 49 51 3E 00 1E 29 49 49 06 00 36 49 49 49 36 00 03 05 09 71 01 00 30 49 49 4A 3C 00 39 45 45 45 27 00 10 7F 12 14 18 00 31 4B 45 41 21 00 46 49 51 61 42 00 00 40 7F 42 00 00 00

вторая строка

>> 0x80 0x00 0x80 0x10

-> C0 00 40 00 00 7F 08 08 08 7F 00 38 54 54 54 18 00 00 41 7F 40 00 00 00 41 7F 40 00 00 38 44 44 44 38 00 00 00 00 00 00 00 3F 40 38 40 3F 00 38 44 44 44 38 00 7C 08 04 04 08 00 00 41 7F 40 00 00 38 44 44 48 7F 00 00 00 00 00 00 00 00 42 7F 40 00 00 42 61 51 49 46 00 21 41 45 4B 31 00 18 14 12 7F 10 00 27 45 45 45 39 00 3C 4A 49 49 30 00 01 71 09 05 03 00 36 49 49 49 36 00 06 49 49 29 1E 00 00

третья строка

>> 0x80 0x00 0x80 0x10

-> C0 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 61 51 49 46 00 00 00 00 00 00 00 38 44 44 48 7F 00 00 41 7F 40 00 00 7C 08 04 04 08 00 38 44 44 44 38 00 3F 40 38 40 3F 00 00 00 00 00 00 00 38 44 44 44 38 00 00 41 7F 40 00 00 00 41 7F 40 00 00 38 54 54 54 18 00 7F 08 08 08 7F 00 00

четвертая строка

>> 0x80 0x00 0x80 0x10

-> C0 00 40 00 00 7F 08 08 08 7F 00 38 54 54 54 18 00 00 41 7F 40 00 00 00 41 7F 40 00 00 38 44 44 44 38 00 00 00 00 00 00 00 3F 40 38 40 3F 00 38 44 44 44 38 00 7C 08 04 04 08 00 00 41 7F 40 00 00 38 44 44 48 7F 00 00 00 00 00 00 00 21 41 45 4B 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Файлы для скачивания