реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> IAR и LCD с контроллером HD4478, Как подключить, как применить библиотеку
prottoss
сообщение Apr 9 2008, 12:04
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Только седня:-) удалось прочитать корреспонденцию, потому извиняйте за задержку. Разъяснения:

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



2. LCD_Clear() - и ежу понятно зачем нужна. Можно либо выкинуть, либо написать свою - текста нет, сами понимаете из за того же g_Buffer -а.



3. #include "systime.h" можно выкинуть - это хедер системного времени устройства. Задержки делались именно через системное время. Но так как выложил в сеть, сделал задержки средствами компилятора через __delay_cycles(...).



4. Для того, чтобы компилятор не ругался на макросы типа:

Error[Pe020]: identifier "DDRD" is undefined ....HD4478.c 176 надо подключить хедер ioavr.h.

Кстати, советую включать его во все файлы, работающие с переферией МК. ТОгда не надо будет подключать в каждом файле хедер конкретного МК, а достаточно будет определить МК через опции проекта.


--------------------
Go to the top of the page
 
+Quote Post
Roger
сообщение Jun 26 2010, 20:39
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 27-06-06
Пользователь №: 18 383



Сегодня целый день пробывал запустить LCD (FDCC 1602L) c использованием этой библиотеки.
Получилось запусить только так...
Код
mcu_set_io();
    
    delay_ms(50);
    LCD_RQCMD();
    LCD_Bus_Write(0x20);
    delay_ms(5);
    LCD_Bus_Write(0x20);
    LCD_Bus_Write(0x80);
    delay_ms(5);
    LCD_Bus_Write(0x00);
    LCD_Bus_Write(0xC0);
    delay_ms(5);
    LCD_Bus_Write(0x00);
    LCD_Bus_Write(0x60);
    delay_ms(5);
    LCD_RQDATA();
    LCD_Bus_Write(0x30);
    LCD_Bus_Write(0x50);

Код
void LCD_Bus_Write(UCHAR data)
{    
  LCD_RQWR();
  UCHAR temp;
  temp = data & 0xf0;        
  LCD_PORTDATA &= 0x0f;    
  LCD_PORTDATA |= temp;    
  LCD_STARTSTB();     
  NOP();            
  LCD_ENDSTB();     

/*    SWAP(data);        
    
    temp = data & 0xf0;    
    LCD_PORTDATA &= 0x0f;    
    LCD_PORTDATA |= temp;    
    LCD_STARTSTB();    
    NOP();            
    LCD_ENDSTB();     
*/

}


Т.е. дисплей запускается если на него подавать сначала старшую тетраду, потом отдельно командой младушю тетраду, а так чтобы использовать закоментированный код, не получается....
Код
    SWAP(data);        
    temp = data & 0xf0;    
    LCD_PORTDATA &= 0x0f;    
    LCD_PORTDATA |= temp;    
    LCD_STARTSTB();    
    NOP();            
    LCD_ENDSTB();


Народ подскажите в чем может быть трабла. Однозначно что в выводе младшей тетрады.... Все уже проверил неоднократно...
LCD весит на PORTC
RS -> PC0
RD/RW -> PC1
E -> PC2
DW4..DW7 -> PC4..PC7

Тестировал как в Proteus так и на железке...
Go to the top of the page
 
+Quote Post
Roger
сообщение Jun 27 2010, 05:44
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 27-06-06
Пользователь №: 18 383



Проблема была в правильности задержек...

Единственно пока не удалось разобратся с проверкой на готовность LCD..
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th August 2025 - 09:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016