Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Програмная эмуляция дисплея 
:(
    Опции темы
RinOSpro
Дата 29.9.2008, 12:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте! Есть алфавитно-цифровой индицирующий модуль на основе контроллера HD44780. 4 строки на 20 символов. Данные поступают по 4-х разрядной шине. 

Цель заключается в следующем выводить данные не на LCD экран, а на монитор копьютера. То есть считывать эти биты и интерпретировать их... Хотел узнать есть ли какие нибудь програмные эмуляторы дисплея?

Еще проблема в маске, я не знаю правильно ли я читаю данные, ведь от маски зависит все...
Люди кто работал с ней помагите плиз!!!
  Вверх
smalcom
Дата 29.9.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: 4
Всего: 7



Цитата

Хотел узнать есть ли какие нибудь програмные эмуляторы дисплея?

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

Цитата

Еще проблема в маске, я не знаю правильно ли я читаю данные, ведь от маски зависит все...

ну и? надо угадать как читаешь?


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
RinOSpro
Дата 30.9.2008, 09:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(smalcom @  29.9.2008,  19:04 Найти цитируемый пост)
софтом выводить в окошке данные.

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

Ах забыл сказать данные поступают по 4-х разрядной шине от чипа FTDI2232C по USB в системе ее видно как 2 COM порта, использую их библиотеку. Пишу на Delphi.
  Вверх
Mazzi
Дата 30.9.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Возьми документацию на твой дисплей, припаяйся к выводам, затем по даташиту программно определяешь, что в него пихают.
На самом деле, там всё не так сложно, вот тебе пример работы с таким дисплеем, из которого ты многое поймёшь(может быть smile )

Код

/**************************************************/ 
/*                                                */ 
/* LcdTest.c                                      */ 
/* LCD interface implementation                   */ 
/*                                                */ 
/* Version : 1.3                                  */ 
/*                                                */ 
/*                                                */ 
/* By: J. Winpenny                                */ 
/*                                                */ 
/* Date: 19/7/1999                                */ 
/*                                                */ 
/*                                                */ 
/* Mode : HD44780 type LCD displays               */ 
/*                                                */ 
/* Notes : Requires "Delays.c"                    */ 
/*                                                */ 
/* This version is for 4 bit mode                 */ 
/*                                                */ 
/*                                                */ 
/**************************************************/ 
#include "lcd.h"

code uchar hex_code[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

/***********************************/ 
/* Setup the lcd device */ 
/***********************************/ 
void LCD_Setup(void) 

/* Reset the LCD */ 

    LCD_SEL = 0;

    delay_ms(30); /* Power up delay */ 
    LCD_FunctionMode(); 
    
    
    LCD_Write_8_Bit( system_set_4_bit ); /* This sequence resets the LCD */ 
    delay_ms(5); 
    LCD_Write_8_Bit( system_set_4_bit ); 
    delay_ms(5); 
    LCD_Write_8_Bit( system_set_4_bit ); 
    delay_ms(5); 
    
    LCD_Write_4_Bit( system_set_4_bit ); 
    delay_ms(2); 
    LCD_Write_4_Bit( display_off ); 
    delay_ms(2); 
    LCD_Write_4_Bit( entry_mode ); 
    delay_ms(2); 
    LCD_Write_4_Bit( display_on ); 
    delay_ms(2); 
    LCD_Write_4_Bit( set_dd_ram ); 
    delay_ms(2); 
    
    LCD_DataMode(); 


/* END OF MAIN */ 


/***********************************/ 
/* Put LCD in Function Mode */ 
/***********************************/ 
void LCD_FunctionMode(void) 

    LCD_RS = 0;
    LCD_Delay(); 

/***********************************/ 
/* Put LCD in Data Mode */ 
/***********************************/ 
void LCD_DataMode(void) 

    LCD_RS = 1;
    LCD_Delay(); 

/***********************************/ 
/* Write a single byte to the LCD */ 
/* 8 Bit Mode */ 
/***********************************/ 
void LCD_Write_8_Bit(char d ) 

/* Write Mode */ 
    LCD_WR = 0;
    LCD_Delay(); 

/* Setup data */ 
    if ( d & 0x80 )   LCD_DATA_7 = 1;
    else              LCD_DATA_7 = 0;
    
    if ( d & 0x40 )   LCD_DATA_6 = 1;
    else              LCD_DATA_6 = 0;
    
    if ( d & 0x20 )   LCD_DATA_5 = 1;
    else              LCD_DATA_5 = 0;
    
    if ( d & 0x10 )   LCD_DATA_4 = 1;
    else              LCD_DATA_4 = 0;
    
    LCD_Delay(); 
    LCD_SEL = 1;
    LCD_Delay(); 
    LCD_SEL = 0;/* De-select LCD */ 

/***********************************/ 
/* Write a single byte to the LCD */ 
/* 4 Bit Mode */ 
/***********************************/ 
void LCD_Write_4_Bit(char d ) 

/* Write Mode */ 
    LCD_WR = 0;
//    LCD_Delay(); 

/* Output Higher 4 bits */ 

    if ( d & 0x80 )    LCD_DATA_7 = 1;
    else               LCD_DATA_7 = 0;
    
    if ( d & 0x40 )    LCD_DATA_6 = 1;
    else               LCD_DATA_6 = 0;
    
    if ( d & 0x20 )    LCD_DATA_5 = 1;
    else               LCD_DATA_5 = 0;
    
    if ( d & 0x10 )    LCD_DATA_4 = 1;
    else               LCD_DATA_4 = 0;

    
//    LCD_Delay(); 
    LCD_SEL = 1;
//    LCD_Delay(); 
/* Clock in the data */ 
    LCD_SEL = 0;
//    LCD_Delay(); 
    LCD_Wait();
    
    LCD_WR = 0;
    LCD_RS = 1;
    
    d <<= 4; /* Output Lower 4 bits */ 
    
    
    if ( d & 0x80 )    LCD_DATA_7 = 1;
    else               LCD_DATA_7 = 0;
    
    if ( d & 0x40 )    LCD_DATA_6 = 1;
    else               LCD_DATA_6 = 0;
    
    if ( d & 0x20 )    LCD_DATA_5 = 1;
    else               LCD_DATA_5 = 0;
    
    if ( d & 0x10 )    LCD_DATA_4 = 1;
    else               LCD_DATA_4 = 0;

    
//    LCD_Delay(); 
    LCD_SEL = 1; 
//    LCD_Delay(); 
    LCD_SEL = 0; /* Clock in the data */ 

    LCD_Wait();


/***********************************/ 
/* LCD timing delay */ 
/* Adjust for your LCD Display */ 
/***********************************/ 
void LCD_Delay(void) 

    delay_ms(1); 

/***********************************/ 
//
/***********************************/ 
void delay_ms(unsigned char ms)
{
     xdata uint ui;
     ui = ms*10;
/*     if (ms == 1) 
        WaitResp();
     else */
        while (ui) ui--;
}
/***********************************/ 
//
/***********************************/ 
void PrintUintHex(uint ui, uchar Position)
{
    SetPos(Position);
    LCD_Write_4_Bit(hex_code[(ui >> 12)&0x0F]);
    LCD_Write_4_Bit(hex_code[(ui >>  8)&0x0F]);
    LCD_Write_4_Bit(hex_code[(ui >>  4)&0x0F]);
    LCD_Write_4_Bit(hex_code[(ui      )&0x0F]);
}
/***********************************/ 
//
/***********************************/ 
void PrintUint(uint ui, uchar Position)
{
    xdata uchar a[5];

    a[0] = 0; while (ui > 9999) { ui -= 10000; a[0]++;} a[0] |= 0x30; 
    a[1] = 0; while (ui >  999) { ui -=  1000; a[1]++;} a[1] |= 0x30; 
    a[2] = 0; while (ui >   99) { ui -=   100; a[2]++;} a[2] |= 0x30; 
    a[3] = 0; while (ui >    9) { ui -=    10; a[3]++;} a[3] |= 0x30; 
    a[4] = ui | 0x30;                                                 

    SetPos(Position);
    LCD_Write_4_Bit(a[0]); LCD_Write_4_Bit(a[1]); LCD_Write_4_Bit(a[2]); 
    LCD_Write_4_Bit(a[3]); LCD_Write_4_Bit(a[4]);
}
/***********************************/ 
//
/***********************************/ 
void PrintUcharHex(uchar uc, uchar Position)
{
    SetPos(Position);
    LCD_Write_4_Bit(hex_code[(uc >>  4)&0x0F]);
    LCD_Write_4_Bit(hex_code[(uc      )&0x0F]);
}
/***********************************/ 
//
/***********************************/ 
void PrintFloat(float fl, uchar Position)
{
    PrintUint(fl,Position);
/*    xdata uchar a[5], b[2];
    a[0] = 0; while (fl > 9999.0)   { fl -= 10000.0;  a[0]++; } a[0] |= 0x30; 
    a[1] = 0; while (fl >  999.0)   { fl -=  1000.0;  a[1]++; } a[1] |= 0x30; 
    a[2] = 0; while (fl >   99.0)   { fl -=   100.0;  a[2]++; } a[2] |= 0x30; 
    a[3] = 0; while (fl >    9.0)   { fl -=    10.0;  a[3]++; } a[3] |= 0x30; 
    a[4] = 0; while (fl >    0.9)   { fl -=     1.0;  a[4]++; } a[4] |= 0x30;                                                 

    b[0] = 0; while (fl >    0.09)  { fl -=     0.1;  b[0]++; } b[0] |= 0x30; 
    b[1] = 0; while (fl >    0.009) { fl -=     0.01; b[1]++; } b[1] |= 0x30; 

    SetPos(Position);
    LCD_Write_4_Bit(a[0]); LCD_Write_4_Bit(a[1]); 
    LCD_Write_4_Bit(a[2]); LCD_Write_4_Bit(a[3]); 
    LCD_Write_4_Bit(a[4]); LCD_Write_4_Bit('.');
    LCD_Write_4_Bit(b[0]); LCD_Write_4_Bit(b[1]);*/
}
//-------------------------------
//        Set cursor position
//-------------------------------
void SetPos(uchar position)
{
    LCD_FunctionMode(); 
    LCD_Write_4_Bit(position | 0x80); //
    LCD_DataMode();
}
//-------------------------------
//        Print string
//-------------------------------    
void PrintString(uchar *mess, uchar Position)
{
    SetPos(Position);
    while (*mess!='\0')
    {
        LCD_Write_4_Bit(*mess);
        mess++;
    }
}
//-------------------------------
//        Clear screen
//-------------------------------
void ClrScr(void)
{
    LCD_FunctionMode(); 
    LCD_Write_4_Bit(clear_lcd); 
    LCD_DataMode();
}
//-------------------------------
//        Wait for the response
//-------------------------------

void LCD_Wait(void)
{
    do
    {
       LCD_SEL=1;  
       LCD_RS=0;  LCD_WR=1;  LCD_DATA_7 = 1;//DAT=0xff;
    }  while(LCD_DATA_7 == 1);    
//    LCD_SEL=0;  LCD_WR=0;
}

Это рабочий модуль.

Удачи!



--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
RinOSpro
Дата 30.9.2008, 12:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Mazzi - Все уже припаяно... я программист поэтому ни че не паяю... 

Мне нужно читать данные которые уже шлются в режиме биг банг... (вроде так электронщики говарят) так вот читать я могу но незнаю какую точно маску задавать... в процедуре FT_SetBitMode (эта процедура из библиотеки D2XXUnit чипа FTDI2232C) как я понял от этой маски зависит почти все...
  Вверх
smalcom
Дата 30.9.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: 4
Всего: 7



может поможет
пример

Цитата

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

для этой... распространенней этой модели наверно и нету - это ж стандарт

Цитата

а вот я хз по какому принципу там картинка строиться...

картинка ту непричем, там оччень простой набор команд. не пожалей времени - осиль доку.

Цитата

Ах забыл сказать данные поступают по 4-х разрядной шине от чипа FTDI2232C по USB в системе ее видно как 2 COM порта, использую их библиотеку. Пишу на Delphi.

п...ц. я так понял вы не особо думая(архитектор или электронщики) тупо прибили 4портовый вариант на входные линии USB. передай умельцам, что еще есть R/-W и строб. вобщем выбери кто недоделал - или ты не дорасказал или они недопаяли

Это сообщение отредактировал(а) smalcom - 30.9.2008, 21:50


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Mazzi
Дата 1.10.2008, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Цитата(RinOSpro @ 30.9.2008,  12:27)
(эта процедура из библиотеки D2XXUnit чипа FTDI2232C)

Интересно, где ты взял такую микросхему? На сайте производителя, 
http://www.ftdichip.com/FTProducts.htm такой нет... smile 

Вот список, чипов которые есть:

FT232R - USB UART IC (Lead Free)
FT245R - USB FIFO IC (Lead Free)
FT2232C - Dual USB UART/FIFO IC
FT2232L - Dual USB UART/FIFO IC (Lead Free)
FT2232D - Dual USB UART/FIFO IC (Lead Free)
FT232BM - USB UART IC
FT232BL - USB UART IC (Lead Free)
FT232BQ - USB UART IC (QFN-32 Lead Free Package)
FT245BM - USB FIFO IC
FT245BL - USB FIFO IC (Lead Free)
FT245BQ - USB FIFO IC (QFN-32 Lead Free Package)
FT8U232AM - USB UART IC
FT8U245AM - USB FIFO IC
FT8U100AX - Multi-Function USB 1.1 Hub Controller IC


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
RinOSpro
Дата 1.10.2008, 13:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Mazzi @  1.10.2008,  09:10 Найти цитируемый пост)

FT232R - USB UART IC (Lead Free)
FT245R - USB FIFO IC (Lead Free)
FT2232C - Dual USB UART/FIFO IC


FT2232C - Dual USB UART/FIFO IC - Она самая! 
  Вверх
Mazzi
Дата 1.10.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Так в чём проблема? Эта микросхема  всего лишь преобразователь на железном уровне, в поток данных он не вносит ничего своего. 

Бери исходник который я выложил раньше и потрудись почитать. В противном случае, тебе не сможет помочь никто. (я имею в виду, если не будешь ничего делать).


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
RinOSpro
Дата 1.10.2008, 15:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот нарисовал примерную схему:
user posted image
Mazzi с кодом ознакомился. Но это не совсем то... помоему у меня как раз наоборот не писать в чип который управляет экраном а читать то что идет на него. И наверно придется формировать кодовую таблицу как у знакогенератора HD44780.

Тут еще проблема со чтением с 4 битной шины, никогда не читал с такой... может подскажите литературу? В общем как говарит разработчик нужно читать когда 3 бит установле в 1 потом когда он идет в 0 как бы по этому стробу нужно получить первый полубайт потом получить второй полубайт и потом их склеить... вот мне просто интересно где гарантии что я не пропущу первый или 2 полубайт... и к томуже разработчик говарит что там между 2 полубайтами время 15 мкр секунд. я из под винды вообще можно их прочитать? этож вроде оч. быстро...

Это сообщение отредактировал(а) RinOSpro - 1.10.2008, 15:43
  Вверх
smalcom
Дата 1.10.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: 4
Всего: 7



Цитата

И наверно придется формировать кодовую таблицу как у знакогенератора HD44780.

доку все-таки не читал?...

Цитата

Тут еще проблема со чтением с 4 битной шины, никогда не читал с такой... может подскажите литературу?

но коментс.

судя по схеме и по тому что говорит разработчик данная тема вообще плохо относится именно к LCD-модулю. 15микросекунд, то поймать можно но в лупе ждать их... плюс еще и юсб... это изврат

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


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Mazzi
Дата 2.10.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



RinOSpro,  одно из двух, либо ты пытаешься поглумиться над нами, либо не понимаешь, что четырёхбитная шина и ЮСБ это несколько разные вещи и выполнить то, что ты говоришь, именно так как ты говоришь нереально.

Ты пишешь для компа, значит данные с ЮСБ к тебе должны приходить в какой нибудь буфер, и не нужно ловить никаких стробов. 


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
xvr
Дата 2.10.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Mazzi @ 2.10.2008,  08:44)
RinOSpro,  одно из двух, либо ты пытаешься поглумиться над нами, либо не понимаешь, что четырёхбитная шина и ЮСБ это несколько разные вещи и выполнить то, что ты говоришь, именно так как ты говоришь нереально.

Сдается мне, что человеку нужно сделать из компа эмулятор железной HD44780, подключив его (комп с программой эмулятором) через FT2232C.
IMHO cие невозможно. Нужен какой нибудь CPLD/FPGA/MCU для отлова записей/чтений в эмулируемую HD44780, их буферизации и заливки в USB.

PM MAIL   Вверх
RinOSpro
Дата 2.10.2008, 12:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











xvr +1. Ну наконец кто то понял что я хочу. 

xvr скажи пожалуста на языке электронщиков почему это не возможно? я им попытаюсь объяснить это на их языке... 

Цитата(xvr @  2.10.2008,  11:45 Найти цитируемый пост)
Нужен какой нибудь CPLD/FPGA/MCU

А это что?

Это сообщение отредактировал(а) RinOSpro - 2.10.2008, 12:41
  Вверх
smalcom
Дата 2.10.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: 4
Всего: 7



Цитата

Сдается мне, что человеку нужно сделать из компа эмулятор железной HD44780

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

Цитата

Ну наконец кто то понял что я хочу. 

правильно заданный вопрос содержит половину ответа. обратимся к первому сообщению


Цитата

Данные поступают по 4-х разрядной шине. 

Цитата

То есть считывать эти биты и интерпретировать их

и? где тут разговор о знакогенераторе

Цитата

Еще проблема в маске, я не знаю правильно ли я читаю данные, ведь от маски зависит все...

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

Цитата

RinOSpro,  одно из двух, либо ты пытаешься поглумиться над нами, либо не понимаешь, что четырёхбитная шина и ЮСБ

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

действия, топикстартер, действия должны быть.


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1111 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.