Например TDA7294

Форум РадиоКот • Просмотр темы - Инициализация видеоконтроллера MX88V462
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн авг 04, 2025 04:54:57

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Сб июл 12, 2014 18:12:07 
Встал на лапы

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн янв 26, 2009 17:27:18
Сообщений: 129
Откуда: Odessa, Ukraine
Рейтинг сообщения: 0
Благодаря помощи wss60, есть первые результаты viewtopic.php?p=2068630#p2068630

Разбираюсь с генерацией OSD. Из даташита на MX88V462 download/file.php?id=186737
128 fixed characters and 64 programmable characters 
Display 128 characters in valid display area.  ??????
Composition of a character: 18 x 12 dots

Не могу понять, как в RAM хранятся символы? Как сослаться на символ встроенного шрифта?
Интуитивно представляю FONT TABLE RAM как массив бит 18 строк на (12*(128+64)) столбцов, но не вижу подтверждения в исходнике. Что задает массив m_RamFontTab?
Вот кусок:
Спойлер
Код:
На стр 112 даташита:
EXT REG ADRESS_L 0xF2[D5-0] CHAR CODEOF FONT TABLE RAM 
EXT REG ADRESS_H 0xF3[D4-0] SCAN LINE OF THE FONT APPOINTED BY REG 0xA0 (0 - 0x11)
EXT REG DATA_L 0xF4[D7-0] DATA FONT TABLE RAM
EXT REG DATA_H 0xF5[D7-0] DATA FONT TABLE RAM


unsigned char m_RamFontTab[]=   
{   
   0xFF,0x0F,0xFF,0x0F,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x7F,0x0C,0x7F,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,//LT   
   0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//T   
   0xFF,0x0F,0xFF,0x0F,0x03,0x00,0x03,0x00,0x03,0x00,0xE3,0x0F,0xE3,0x0F,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,//RT       
   0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,//R   
   0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0xE3,0x0F,0xE3,0x0F,0x03,0x00,0x03,0x00,0x03,0x00,0xFF,0x0F,0xFF,0x0F,//RB   
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F, //B   
   0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x7F,0x0C,0x7F,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0xFF,0x0F,0xFF,0x0F,//LB   
   0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x60,0x0C//L   
};


#define MXIC_CHAR_COUNT_PER_LINE     16
#define MXIC_CHAR_LINE_COUNT         8
#define OSD_ADDRESS_L        0xF2
#define OSD_ADDRESS_H        0xF3
#define OSD_DATA_L           0xF4
#define OSD_DATA_H           0xF5 
unsigned char MXIC_OSDReg_Write(unsigned char m_Target,unsigned int m_Address,unsigned char *m_Data,unsigned int m_Count)   
{   
    int i,m_Offset=0;   
    int j;   
    unsigned char m_Address_H;   
    unsigned char m_Address_L;   
   
   MXIC_WriteExternalReg(OSD_RW_CTRL,m_Target|0x80);//Burst Mode Write
   
   m_Address_H=(unsigned char)(m_Address/0x100);   
    m_Address_L=(unsigned char)(m_Address-OSD_ADDRESS_H*0x100);   
   
   MXIC_WriteExternalReg(OSD_ADDRESS_H,m_Address_H);   
    MXIC_WriteExternalReg(OSD_ADDRESS_L,m_Address_L);   
   
   switch(m_Target)   
    {                                       
        case OSD_CTRL_REG:   
            for(i=0;i<m_Count;i++)   
            {   
                MXIC_WriteExternalReg(OSD_DATA_L,m_Data[i]);   
            }   
            break;   
        case OSD_FONT_RAM:   
            for(i=0,m_Offset=0;i<m_Count;i++)   
            {   
                for(j=0;j<18;j++)   
                {   
                    MXIC_WriteExternalReg(OSD_DATA_L,m_Data[m_Offset]);   
                    MXIC_WriteExternalReg(OSD_DATA_H,m_Data[m_Offset+1]);   
                    m_Offset+=2;                   
                }   
            }   
            break;   
        case OSD_CODE_BUFFER:   
            for(i=0,m_Offset=0;i<m_Count;i++,m_Offset+=2)   
               
            {   
                MXIC_WriteExternalReg(OSD_DATA_L,m_Data[m_Offset]);   
                MXIC_WriteExternalReg(OSD_DATA_H,m_Data[m_Offset+1]);                                 
            }   
            break;   
        case OSD_ATTR_REG:   
            for(i=0,m_Offset=0;i<m_Count;i++,m_Offset+=2)   
            {   
                MXIC_WriteExternalReg(OSD_DATA_L,m_Data[m_Offset]);   
                MXIC_WriteExternalReg(OSD_DATA_H,m_Data[m_Offset+1]);                                 
            }   
            break;   
    }   
    MXIC_WriteExternalReg(OSD_RW_CTRL,0x04);//Disable OSD Read_Write Mode   
    return 1;             
}   


unsigned char OSD_AutoLoadRamFont(void)                       
{   
    return MXIC_OSDReg_Write(OSD_FONT_RAM,0x00,m_RamFontTab,8);   
}


 
unsigned char MXIC_OSD_ShowText(unsigned char *m_Str,unsigned char m_Count,unsigned char m_RowVal,unsigned char m_ColVal)   
{   
    unsigned char m_DisplayBuffer[MXIC_CHAR_COUNT_PER_LINE*2]={' '};   
    unsigned char m_AttributeBuffer[MXIC_CHAR_COUNT_PER_LINE*2]={' '};   
    int i,j;     
    for(i=0,j=0;i<m_Count;j+=2,i++)   
    {   
         m_DisplayBuffer[j]=ASCII_TO_FONTIndex(m_Str[i]);   
         m_DisplayBuffer[j+1]=0x04;   
    }                                                                 
    MXIC_OSDReg_Write(OSD_CODE_BUFFER,(m_RowVal*OSD_COL_COUNT+m_ColVal),m_DisplayBuffer,m_Count);                                                     
    return 1;   




Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Сб июл 12, 2014 23:06:59 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Если преобразовать (по алгоритму в коде) массив (m_RamFontTab) в графику то получаются квадратики с полосками, которые можно собрать в рамку любого размера. Похоже это рамка для меню в виде шрифта.
Изображение
В остальном нужно разбираться…

Если попробовать передать числа от 0..255 – что на экране при этом происходит?
Код:
unsigned char i;

for (i=0;i<0xFF;i++)
{
  MXIC_OSD_ShowText(i, 1,0,0);
  _delay_ms(500);
}


Вложения:
xf.png [862 байт]
Скачиваний: 1965
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Вс июл 13, 2014 16:38:34 
Встал на лапы

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн янв 26, 2009 17:27:18
Сообщений: 129
Откуда: Odessa, Ukraine
Рейтинг сообщения: 0
Так и понял, что в m_RamFontTab 8 символов. Въехал в структуру OSD_FONT_RAM. А вот как в code buffer передать индекс программного символа не понял.
Сразу не заметил, что размерность адреса коде буфер - 7бит, от туда и "Display 128 characters in valid display area"

Цитата:
что на экране при этом происходит?

Так в том то и дело, что MXIC_OSD_ShowText не работает. Там, кстати, ворнинг при компиляции... makes pointer from integer without a cast ???
А конкретно - не то, что ожидается, символы не перебираются. Видно в рамке три символа, первый периодически меняется с O на X без закономерности, 2 и 3 - набор пикселей - появляются - пропадают. Если применить OSD_ShowText, у нее внутри очистка кодебуфера, то на экране вообще ни чего.
Сразу после включения в кодебуфере есть какой то мусор, фото в теме T112 его демонстрирует. Смущает, что картинка не статична. После очистки и железного ресета - мусор не появляется.
Проблема, мне кажется с передачей массива указателей в функцию MXIC_OSD_ShowText.
На MXIC_OSDReg_SingleWrite(OSD_CODE_BUFFER,0x0000,0x04, ASCII_TO_FONTIndex(0x31));
получаю 1 в верхнем левом углу рамки :)

Что такое 0x04 в MXIC_OSD_ShowText
m_DisplayBuffer[j]=ASCII_TO_FONTIndex(m_Str[i]);
m_DisplayBuffer[j+1]=0x04; //???????????

Вот как организован CODE BUFFER
for (i=0;i<0xFF;i++)
{
MXIC_OSDReg_SingleWrite(OSD_CODE_BUFFER,i,0x04, ASCII_TO_FONTIndex(i));
}

ИзображениеИзображение

Заменил фото


Вложения:
Комментарий к файлу: 0-127
WP_001363.jpg [63.72 KiB]
Скачиваний: 1954
Комментарий к файлу: 128 : 255
WP_001360.jpg [38.01 KiB]
Скачиваний: 1925
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Вс окт 12, 2014 17:01:04 
Встал на лапы

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн янв 26, 2009 17:27:18
Сообщений: 129
Откуда: Odessa, Ukraine
Рейтинг сообщения: 0
Появилось время закончить мониторчик.
МК ATMEGA8L, внутренний генератор 8МГЦ, 3 кнопки, программный I2C.
Корпус отфрезеровал из 10мм оргстекла.
Дорисовал крестик, с возможностью передвижения и изменения цвета, а также добавил возможность смены формата PAL 4:3/16:9 .
Полноценное меню кодить лень.

Исходники прилагаю.

Забыл про питание сказать.
I,A U,V
0.16 3.3 цифра
0.1 5 аналог
0.21 5 LED подсветка


Вложения:
Комментарий к файлу: Исходник
MX88V462.rar [87.6 KiB]
Скачиваний: 350
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Сб окт 18, 2014 01:29:17 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Отлично! :)
Не понятно только что в массиве OSD_CHAR_TAB зашифровано?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Сб окт 18, 2014 11:53:53 
Встал на лапы

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн янв 26, 2009 17:27:18
Сообщений: 129
Откуда: Odessa, Ukraine
Рейтинг сообщения: 0
Это массив из 128 кодов символов, которые могут в статике отображаться в видимой области(в окне/окнах) экрана, в данном случае крестик. 128 - максимум.
Адреса вшитых символов можно вычислить по фото выше, адреса пользовательских от 128-192.


пс была мысль добавить к экрану USART для проверки связи с различными устройствами, но 128 символов показалось маловато, может попробую в динамике выводить инфу...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инициализация видеоконтроллера MX88V462
СообщениеДобавлено: Сб окт 18, 2014 19:31:24 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Теперь разобрался :)
Попробую применить в t112…


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y