Перевести из одного формата в другой

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

имеется устройство отображения инфо.
жк-дисплей сегментный (производитель неизвестен заказной)
для управления этим жк-дисплеем используется контроллер lc75874.
с управлением и выводом на дисплей инфы разобрался (вызвонил каждый сегмент).

задача: нужно данные которые приходили на этот контроллер преобразовать легко читаемый формат.
допустим 1=31h для вывода на другой индикатор(например на чипе HD44780)
вот к примеру чтобы на дисплее получить символ "В" нужно отправить на контроллер следующую посылку: 00000101 01110010 00010000
общая длина информационного слова без служебных команд 264 бита
посоветуйте способы преобразования
Реклама
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

Я с дисплеем от панели магнитолы на контроллере lc7582 делал так: разбил всю посылку на группы от 3 до 8 бит, под каждую группу свой байт. Там где 7-сегментники подогнал чтоб на каждый байт приходился один разряд. Всякие иконки и т.п. получились как получились. Потом выводил все биты последовательно из каждой группы. Не оптимально, зато работает.
Примерно так:

Код: Выделить всё

void LCD_WriteBuffer()
{
   char n;
#asm("cli")
   LCDCEBIT=1;
   LCD_Wait(2);
   LCD_WriteBits(LCDIcon[0],0,2); // Два бита - иконки
   LCD_WriteByte(LCDSmall[0]);   // Маленькая цифра
   LCD_WriteBits(LCDIcon[0],2,6);// 6 бит иконки
   LCD_WriteByte(LCDLine[0]);    // Иконки настройка
   LCD_WriteByte(LCDLine[1]);   // Иконки настройка
   LCD_WriteBits(LCDIcon[1],0,4);//4 бит иконки
   LCD_WriteByte(LCDSmall[1]);  // Вторая маленькая цифра
   LCD_WriteBits(LCDSmall[2],0,6);//Третья маленькая цифра 6 бит
   LCD_WriteBits(LCDSmall[3],0,3);//Четвертая малая цифра 3 бита
   LCD_WriteBits(1,0,3);                // Переход на вторую страницу
   LCD_Wait(2);
   LCDDATABIT=0;
   LCDCEBIT=0;
   LCD_Wait(8);
   LCDCEBIT=1;
   LCD_Wait(2);
   LCD_WriteBits(LCDSmall[3],3,4);//Продолжение 4 малой цифры 4 бита
   for(n=0;n<4;n++) LCD_WriteByte(LCDBig[n]); // 4 большие цифры
   LCD_WriteDummy(17); // 17 Неиспользуемых бит
   LCD_WriteBits(4,0,3); // Управляющие биты
   LCDDATABIT=0;
   LCD_Wait(2);
   LCDCEBIT=0;  // Завершение записи
#asm("sei")
}
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Реклама
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

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

одно знакоместо состоит из 14-ти сегментов
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

ipkin писал(а):я хочу посылку данных которая шла на контроллер управления нестандартным индикатором перевести в посылку для более распространённых индиков...

А смысл? Проще свой драйвер написать.
...одно знакоместо состоит из 14-ти сегментов
Тогда не используемые полубайты в топку, остается два байта, которыми кодировать символы. Получится таблица символов из энного количества 16-битных слов. ими кодировать изображения символов.
А подпрограмма-драйвер будет коды символов переводить в эти 16-битные коды, пихать их в нужные места буфера (из 264 бит = 33 байта), а потом весь буфер загонять в контроллер.
А ваше деление посылки для контроллера на байты весьма условно. Что мешает загнать просто 4 бита, тогда код символа выровняется на 2 байта, а с двумя байтами проще работать.
Я разбирался так: сделал табличку соответствия каждого бита в посылке своему сегменту/иконке, проверил где граница группы сегментов каждого разряда (цифры) индикатора. и исходя из этого пропускал где надо биты а дальше гнал байты, потом снова пропускал где надо и так все 264 бита
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»