AHTOXA 14 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Как думаете, где косяк? А JTAG-то — отключили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба А JTAG-то — отключили? Я уже перебрался на порт А =) На счет JTAG я уже отвечал, с ним еще не работал В папке \cvavr\lib\ есть файл LCD.lib который является текстовым на С с ASM вставками. В нем описаны все процедуры работы с LCD. Можно подредактировать и сделать процедуру обмена как на Баскоме - без чтения с ЛСД? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stas_R 0 23 июля, 2008 Опубликовано 23 июля, 2008 (изменено) · Жалоба Можно немного модернизировать LCD.lib. Там есть такое описание #asm .equ __lcd_direction=__lcd_port-1 .equ __lcd_pin=__lcd_port-2 .equ __lcd_rs=0 .equ __lcd_rd=1 .equ __lcd_enable=2 .equ __lcd_busy_flag=7 #endasm __lcd_busy_flag используется только в _lcd_ready() замените sbrc r26,__lcd_busy_flag rjmp __lcd_busy на задержку вставте несколько _lcd_delay(); если есть осцилограф посмотрите длительности по нему. Удачи. Изменено 23 июля, 2008 пользователем Stas_R Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Можно немного модернизировать LCD.lib. Там есть такое описание #asm .equ __lcd_direction=__lcd_port-1 .equ __lcd_pin=__lcd_port-2 .equ __lcd_rs=0 .equ __lcd_rd=1 .equ __lcd_enable=2 .equ __lcd_busy_flag=7 #endasm Здесь задается к какому пину порта какой вывод ЛСД должен подключаться? __lcd_busy_flag используется только в _lcd_ready() замените sbrc r26,__lcd_busy_flag rjmp __lcd_busy на задержку вставте несколько _lcd_delay(); если есть осцилограф посмотрите длительности по нему. Удачи. Что на что менять, честно говоря, не понял =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sKWO 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Что на что менять, честно говоря, не понял =) Вам предлагают забить на ожидание готовности от ЖКИ, и сделать задержки больше чем по даташиту на Ваш ЖКИ. Здесь задается к какому пину порта какой вывод ЛСД должен подключаться? это определения линий, про порт здесь ничего не сказанно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба Уважаемые друзья! Сегодня проблема была решена. Библиотеки правда не редактировал. Деревенским методом навешал проводов, так, чтоб не резать дорог на плате, по схеме из Хелпа CodeVision. ЛСД выдал то, что от него просили. Проблема была аппаратная. Подвесил к порту С, JTAG не мешает. Единственное, не хочет писать на второй строке . Поковыряю, может найду в чем тут дело. И функция lcd_gotoxy(unsigned char x, unsigned char y) не управляет координатыами курсора, а начинает писать с начала верхней строки. Вопрос снят, lcd_gotoxy() работает. Забыл, что программисты начинает считать с нуля ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба Друзья! Помогите пожалуйста в моем смежном вопросе. Подключил свои LCD 16x2. Но при выводе строк наблюдается следующая фигня. 0-я строка выводится замечательно. 1-я постоянно подмигивает. я подгонял задержку после вывода 0-й строки но все равно видно моргание. Как вообще корректно выводить 2-е строки на LCD подскажите пожалуйтса. Вот функция отображения : void render_menu_new(p_menu p_item_name,unsigned char* p_poz_menu) { unsigned char adc[16]; lcd_clear(); lcd_puts(p_item_name[*p_poz_menu]->menu_name); // здесь выводится первая строка только текст lcd_gotoxy(0,1); sprintf(adc,"спецификаторы", вычилсения) lcd_puts(adc); // вторая строка всегда мигает (выводит преобразование АЦП и значение ШИМ*коэфф) delay_ms(250); } Помогите чем сможете или в книжку ткните. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба ... Попробуйте убрать lcd_clear(); тогда будет менее заметно. (Не забудьте только дополнить все пункты меню пробелами справа, и после lcd_puts(adc); добавьте lcd_puts(" ");) Ну и числа, меняющиеся через 250 мс - сложно воспринимаются, я бы увеличил интервал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба Забавно! Но помогло! Большое спасибо! А без пробелов в конце 1-й строки вылазит начало следующего пункта :-) Получается lcd_clear() можно неиспользовать??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба Забавно! Но помогло! Большое спасибо! А без пробелов в конце 1-й строки вылазит начало следующего пункта :-) Получается lcd_clear() можно неиспользовать??? Конечно, зачем его использовать, если вы всё равно весь экран перерисовываете заново? :) К тому же, не исключён вариант, что lcd_clear() тупо заполняет экран пробелами... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба все конечно хорошо, а вот 0-я строка перестала обновляться. 1-я в порядке.В чем бага??? Подскажите пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 24 июля, 2008 Опубликовано 24 июля, 2008 · Жалоба все конечно хорошо, а вот 0-я строка перестала обновляться. 1-я в порядке.В чем бага??? Подскажите пожалуйста. Дык, добавьте перед выводом пункта меню lcd_gotoxy(0,0); Раньше это делала за вас ф-я lcd_clear(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 25 июля, 2008 Опубликовано 25 июля, 2008 · Жалоба Согласен! Спасибо! Сегодня днем только дошло,что надо курсор переводить на другую позицию :) Утро вечера мудренее!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться