Serj78 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Всегда отрицательно отношусь к применению чего-то, чего руками не потрогаешь и не поменяешь. Особенно к разным библиотекам, притянутым за уши к конкретным компиляторам. Будь то хоть delay() на циклах. А с некоторых пор являюсь поклонником GCC (и дело тут не столько в халяве, сколько в открытости исходников, в том числе и всех библиотек.) Дык в CV большинство библиотек открыто- бери и правь. просто человек этого не умеет или не знает и "хавает что дают" Кстати там есть замечательная такая подфункция lcd_ready(); которая вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.) она тупо ждет ответа от индикатора и вешает программу при сбое обмена. рекомендую подписать в ней таймаут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба А JTAG на порте С отключен? Дело в том, что плата позволяет подключить ЛСД к любому из портов микроконтроллера, что несколько раз уже пытался сделать. Так что думаю дело не в JTAG. С JTAG правда еще не разбирался и не работал. Спасибо за совет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Кстати там есть замечательная такая подфункция lcd_ready(); которая вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.) она тупо ждет ответа от индикатора и вешает программу при сбое обмена. рекомендую подписать в ней таймаут. Так вот она где порылась, собака! тогда понятно, почему виснет. Чтение-то вообще обрублено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stas_R 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба CodeVision при работе с LCD читает бит состояния и если RD не используется программа циклится на опросе готовности. Можете проверить в отладчике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Дык в CV большинство библиотек открыто- бери и правь. просто человек этого не умеет или не знает и "хавает что дают" Кстати там есть замечательная такая подфункция lcd_ready(); которая вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.) она тупо ждет ответа от индикатора и вешает программу при сбое обмена. рекомендую подписать в ней таймаут. Совершенно точно, с контроллерами только начал знакомиться. Пока приходится "хаватю что дают", для этого и обратился за помощью. Подфункцию lcd_ready() не применял. Но эффект получается подобным: программа перестает выполняться на этапе выполнения инициализации ЛСД. Может функция lcd_init() тоже тупо ждет ответа от индикатора? 2 Stas_R & MrYuran & Serj78: Похоже на то. Странно что Баском хавает без ответа от ЛСД, на нем ведь все работает. Буду пытаться как-то решить эту проблему. В любом случае всем огромное спасибо за советы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Похоже на то. Странно что Баском хавает без ответа от ЛСД, на нем ведь все работает. Буду пытаться как-то решить эту проблему. В любом случае всем огромное спасибо за советы! Хреновая в CV библиотечная функция для работы с LCD.Лучше возьмите в шапке форуме че-нить и подточите под компилятор.хотя,вроде,там и для и для CV что-то есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Хреновая в CV библиотечная функция для работы с LCD Она не хреновая, а просто делает все(или почти все) что в даташите на ЖКИ прописано, что тут такого? А есть еще библиотеки которые с этими ЖКИ через сдвиговый регистр работают по 3м проводам, так что теперь считать хреновыми все остальные либы, которые по 7 проводам работают? Странно что Баском хавает без ответа от ЛСД, на нем ведь все работает У баскома значит такая библиотека, которая не читает готовность индикатора, а раз и вы это не используете, то вам надо таки другую либу юзать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
delamoure 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Я давненько юзаю CodeVision, но библиотеки для символьного LCD там неудобны лишь одним. Они жестко задают использование линий микроконтроллера, что бывает неудобным при разводке платы. Недавно написал для себя драйвер символьного LCD на базе HD44780. Проверял только с 4-х строчным дисплеем. То, что реализовано - работает без проблем. Только подключите библиотеки для вашего MCU, и delay.h HD44780.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kool 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Подфункцию lcd_ready() не применял Применяли, только неявно. Serj78 ведь писал: "вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.)". То есть она вызывается функциями lcd_init(), lcd_clear(), lcd_gotoxy(),lcd_putsf("ххх") и др., в том числе и функцией lcd_init(). LCD - относительно медленное устройство и каждая команда (вывод одного символа, очистка экрана, смена положения курсора, ...) выполняется им довольно долго (37мкс...1,5мс, в зависимости от команды) по меркам контроллера. Поэтому контроллеру приходится ждать LCD. И сделать это можно 2-мя путями: 1. перед каждой следущей командой к LCD проверять/ждать очищения BusyFlag'а lcd-индикатора 2. контроллер между командами к LCD сам выдерживает время, необходимое для выполнения предыдущей команды индикатором. Недостаток 1-го варианта - обязательное наличие линии R/W между LCD и контроллером (для чтения BusyFlag). Недостаток 2-го - время, которое выдерживает контроллер между командами, должно быть с некоторым запасом, так как время выполнения команд ЖКИ-индикатором может отличаться от индикатора к индикатору и зависит от температуры. Видимо, в BascomAVR реализован 2й метод, поэтому он и работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Я давненько юзаю CodeVision, но библиотеки для символьного LCD там неудобны лишь одним. Они жестко задают использование линий микроконтроллера, что бывает неудобным при разводке платы... Это существенный недостаток, тот же Баском позволяет выбирать линии... Как обстоят дела с этим в ИмиджКрафте и других компиляторах? Применяли, только неявно. Serj78 ведь писал: "вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.)". То есть она вызывается функциями lcd_init(), lcd_clear(), lcd_gotoxy(),lcd_putsf("ххх") и др., в том числе и функцией lcd_init(). LCD - относительно медленное устройство и каждая команда (вывод одного символа, очистка экрана, смена положения курсора, ...) выполняется им довольно долго (37мкс...1,5мс, в зависимости от команды) по меркам контроллера. Поэтому контроллеру приходится ждать LCD. И сделать это можно 2-мя путями: 1. перед каждой следущей командой к LCD проверять/ждать очищения BusyFlag'а lcd-индикатора 2. контроллер между командами к LCD сам выдерживает время, необходимое для выполнения предыдущей команды индикатором. Недостаток 1-го варианта - обязательное наличие линии R/W между LCD и контроллером (для чтения BusyFlag). Недостаток 2-го - время, которое выдерживает контроллер между командами, должно быть с некоторым запасом, так как время выполнения команд ЖКИ-индикатором может отличаться от индикатора к индикатору и зависит от температуры. Видимо, в BascomAVR реализован 2й метод, поэтому он и работает. Спасибо за ответ. Теперь все понятно :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Да компилятору-то вобщем-то по барабану. Он всё позволяет, что не противоречит правилам Си. Вам же уже написали - подцепите любую другую библиотеку, благо их немеряно. Да в конце концов, и самому полезно поколупаться. А менять среду разработки из-за встроенных библиотек.. Ну как бы это сказать... Помягче... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Да компилятору-то вобщем-то по барабану. Он всё позволяет, что не противоречит правилам Си. Вам же уже написали - подцепите любую другую библиотеку, благо их немеряно. Да в конце концов, и самому полезно поколупаться. А менять среду разработки из-за встроенных библиотек.. Ну как бы это сказать... Помягче... Согласен - покопаться всегда полезно, даже если не получится. Кроме КодеВижн больше ни с чем не работал (ну и Баском), в любом случае попробовать испытать и другие компиляторы, может какой больше понравится и не только из-за встроенных библиотек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serj78 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба Применяли, только неявно. Serj78 ведь писал: "вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.)". То есть она вызывается функциями lcd_init(), lcd_clear(), lcd_gotoxy(),lcd_putsf("ххх") и др., в том числе и функцией lcd_init(). осмелюсь поправить: функция lcd_init не вешает программу, там таймаут написан, если индикатор не подключен (нет ответа кажется, в течении 5мс) то она возвращает 0. проверьте это значение (например светодиодом на любой ноге) и будет ясно где косяк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
harm 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба осмелюсь поправить: функция lcd_init не вешает программу, там таймаут написан, если индикатор не подключен (нет ответа кажется, в течении 5мс) то она возвращает 0. проверьте это значение (например светодиодом на любой ноге) и будет ясно где косяк. Контроллер выставляет сигнал RD, потом E после чего наступает зависание. Все остальные ножки в нуле. Можно сделать вывод, что ожидается чтение. Нашел описание для упомянутого выше НВ44780 http://files.lv-soft.info/Integrated-circu...hd44780_rus.pdf В нем по временной диаграмме контроллер должен сбросить сигнал E в ноль и по спадающему фронту прочитать данные с шины. Но E находится в 1 постоянно (смотрел осциллографом), значит он не пытается считать. Или же другой вариант: после нескольких безуспешных попыток, которые я не успеваю заметить пока сбрасываю, контроллер перестает считывать по какой-то причине. Как думаете, где косяк? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stas_R 0 23 июля, 2008 Опубликовано 23 июля, 2008 · Жалоба В папке \cvavr\lib\ есть файл LCD.lib который является текстовым на С с ASM вставками. В нем описаны все процедуры работы с LCD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться