vashurin
Apr 8 2008, 11:32
Привет всем решил прибегнуть на этот раз к помощи инета в решении проблемы.
суть такова.
есть у меня проект написанный на CVAR , я уже исчерпал доступные мне возможности этого ПО.
и прешил перейти на IAR.
все хорошо но вот в IAR нет библиотеки для ЖКИ.
поиски в интернете дали мне прикрепленный файл к этому сообщению. Я уверен что собравшиеся сдесь люди могут мне помочь.
Нажмите для просмотра прикрепленного файла
А в чём собственно вопрос?
vashurin
Apr 8 2008, 12:03
Первое что меня интересует.
Можно-ли использовать эти библиотеки в ИАР-е ?
как сделал я:
1. создал папку LCD в папке проекта(чтоб не засорять корневую иара)
2.код
#include <iom8.h>
#include "LCD\LCD.HD4478.Driver.c"
int main()
{
LCD_Init ();
return 0;
}
3. в файле stdafx.h мнеяю на библиотеку своего камня #include <iom8.h>
4. прикомпиляции выдает
Fatal Error[Pe005]: could not open source file "systime.h" F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 10
это означат что не может чтото найти - ищу я , нахожу в интернете.
кладу в папку LCD.
5. выдает кучу ошибок.
Building configuration: M8_GEN_LCD_IAR - Debug
Updating build tree...
main.cpp
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\systime.h 1
Error[Pe020]: identifier "PD7" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 198
Error[Pe020]: identifier "g_Buffer" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 201
Error[Pe020]: identifier "LCD_Clear" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 216
Error[Pe020]: identifier "DDRA" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 235
Error[Pe020]: identifier "PD5" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 235
Error[Pe020]: identifier "PORTA" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 259
Error[Pe020]: identifier "PD6" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 260
Error[Pe020]: identifier "PD6" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 282
Error[Pe020]: identifier "PINA" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 284
Error[Pe020]: identifier "PD4" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 314
Error[Pe020]: identifier "DDRA" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 315
Error[Pe020]: identifier "PD5" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 315
Error[Pe020]: identifier "PD4" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 360
Error[Pe020]: identifier "PD4" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 373
Total number of errors: 14
Total number of warnings: 1
6. я не смог справиться с
Error[Pe020]: identifier "g_Buffer" is undefined F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\LCD.HD4478.Driver.c 201
может мне пойти ..... другим путем ????????
может есть у кого то
готовое решение моей проблемы, просто не хочется изобретать велосипеД.
а не думали обратиться за разьяснениями к автору библиотеки?
возможно это неполная версия библиотеки.
vashurin
Apr 8 2008, 12:13
хотелось бы самому понять.
как приспособить это дело к иару
GarikBaza
Apr 8 2008, 12:14
А я б поменял имя файла, точки смущают
vashurin
Apr 8 2008, 12:25
там с точками все нормально.
но учту ща перепишу. и попробую
нет эфекта
MrYuran
Apr 8 2008, 12:27
Для начала, я думаю, надо определить порты и пины, к которым подключен ваш индикатор и на которые ругается ИАР.
А также буфер g_Buffer
Вообще-то исходники смотрели?
Вроде бы ничего мудрёного...
IgorKossak
Apr 8 2008, 12:39
Цитата(MrYuran @ Apr 8 2008, 15:27)

Для начала, я думаю, надо определить порты и пины, к которым подключен ваш индикатор и на которые ругается ИАР.
А именно Project->Options->General Options->System->Enable bit definitions in I/O include files.
vashurin
Apr 8 2008, 12:40
да порты определил,
я не пойму для чего g_Buffer
в исходниках его нет в инициализации
теперь понятно
ща попробую
IgorKossak
Apr 8 2008, 12:40
Цитата(vashurin @ Apr 8 2008, 15:39)

я не пойму для чего g_Buffer
в исходниках его нет в инициализации
Ну так определите его.
vashurin
Apr 8 2008, 13:13
Описание шин управления и данных между МП и ЖКИ
в файле есть такая строка там я все и определял
определяю
int g_Buffer[33];
Error[Pe153]: expression must have class type F:\_IAR_Project\M8_GEN_LCD_IAR\LCD\HD4478.c 202
не пойму что внем храниться
что это за тип ??
попытка закоментировать все места где используется g_Buffer
выдает
Building configuration: M8_GEN_LCD_IAR - Debug
Updating build tree...
main.cpp
Linking
Error[e12]: Unable to open file 'D:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation\avr\LIB\DLIB\
dlAVR-1s-ec_mul-f.r90'
Total number of errors: 1
Total number of warnings: 0
MrYuran
Apr 8 2008, 13:29
Судя вот по этому
g_Buffer[1].Address = LCD_ROW2_START;
g_Buffer - это массив структур, а вот что за структуры, надо разбираться...
По-моему, можно его просто выкинуть, а ИАР ругается совсем на другое, библиотеку какую-то по ходу найти не могет
Цитата(MrYuran @ Apr 8 2008, 16:29)

Судя вот по этому
g_Buffer[1].Address = LCD_ROW2_START;
g_Buffer - это массив структур, а вот что за структуры, надо разбираться...
Судя по этому, эта структура содежит адрес начала строки и скорее всего саму строку, но для полной уверености:
Цитата(gotty @ Apr 8 2008, 15:05)

а не думали обратиться за разьяснениями к автору библиотеки?
возможно это неполная версия библиотеки.
vashurin
Apr 9 2008, 10:08
спасибо всем кто принимал сдесь участие,
перелопатил форум и нашел там подобную тему.
вопрос мой не закрыт.
но этот форум можно удалить,
сдесь нет ни чего полезного.
prottoss
Apr 9 2008, 12:04
Только седня:-) удалось прочитать корреспонденцию, потому извиняйте за задержку. Разъяснения:
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.
Кстати, советую включать его во все файлы, работающие с переферией МК. ТОгда не надо будет подключать в каждом файле хедер конкретного МК, а достаточно будет определить МК через опции проекта.
Сегодня целый день пробывал запустить 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 так и на железке...
Проблема была в правильности задержек...
Единственно пока не удалось разобратся с проверкой на готовность LCD..
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.