код со cxem.net попробовать можно, он под мегу8 с частотой 1 МГц, только нужно соблюдать указанную в листинге распиновку. И там безо всяких регистров. Компилятор - CodeVisionAVR C, в другом не будет компилироваться.
а можно это как-то с этой схемой увязать? http://p-45.narod.ru/files/sch_v3.pdf собрана в железе, и к сожалению очень проблематично будет из неё что-то выковырять (блок индикатора имею в виду)... как бы программно сделать так, что на ножку атмеги сигнал завёл и в виде циферок получил...наверное всё-таки делить приедятся, это проще чем с неудобным кварцем работать... интересно к561ИЕ16 на 4Мгц потянет?
что-то я не понял... схема собрана? Значит, индикатор есть, и он подключен к процессору? Значит, единственное, чего нет - это входа счетчика? Частота должна приходить на 11 ногу. А она в схеме используется как выход для управления индикатором... А на порту С есть свободные ноги. Придется переназначить линию cs_lcd другой ноге и перекомпилировать весь код. Тогда можно будет добавить в код процедуры подсчета импульсов.
да, все собрано, нужен только вход и программа которая будет всем этим управлять. CodeVisionAVR скачал себе, осталось понять, как там чего переназначить.
я так понимаю, у тебя уже есть прошивка, раз он работает. Надо смотреть ее исходники, на чем они написаны, и плясать от этого. А процедура вывода на дисплей в прошивке есть точно.
Ситуацию с инициализацией HD44780 можно охарактеризовать словами: «Всем хорош LCD c HD44780, но только чуть-чуть не инициализируется» (напоминает «Всем хороша невеста, но вот чуть-чуть беременна от неизвестного»). Я был в тоске: имею 3 (три) даташита с тремя типами инициализации, несколько скачанных вариантов программ инициализации с программами в Протеус и ничего не идет у меня в компе, ничего не могу приспособить. Сейчас вот нашел, что не одинок. ibiza11 на стр.11 этого форума « Цитата дословно и побуквенно:\Думал на подпрограммы вывода, но как бы я их не упрощал, как бы не увеличивал задержки, результата это не принесло. Следование в точности даташиту тоже результатов не принесло (даташит в моем посте выше). В итоге нашел на давно забытой флешке свою (!!! охренеть) старую программу с инициализацией ЖКИ. Подставил команды оттуда и О, ЧУДО! Свершилось! тут же начало все работать!!! даже с моими подпрограммами вывода (в которых вы не разобрались). вот собственно команды: Код: ;7-отключен ;6-выбор регистра ;5-чтение/запись ;4-строб ;3-DB7 ;2-DB6 ;1-DB5 ;0-DB4 .db 0b00000011,0b00000011 .db 0b00000011,0b00000010 .db 0b00000010,0b00001000 .db 0b00000000,0b00001000 .db 0b00000000,0b00000110 .db 0b00000000,0b00001100 .db 0b00000000,0b00001100 .db 0b00000000,0b00000001 »
Замучился проверять. Может кто и подскажет : «А стоит ли проверять?»
Да ничего не получается, ни в натуре, ни в протеусе. Слепил несколько своих вариантов, впустую. Подумал, решил, что если в Протеус пройдет, то в натуре будет полегче. Нахожу http://radioelektr.ru/podklyutchenie-lc ... omment-255 в нем есть работающая исходники и модель протеуса. Воспроизвел. Пробую – не работает. Отправил знакомому, тот ответил, что очень просто, мол нужно переместить немного землю. Пробую – бесполезно. Наверное он пошутил.
Нахожу другой проект. Вычленяю из него только МК и ЛСД. В Протеусе работает –инициализирует. Можете проверить. В прикреплении-это проект model_ds18b20 (+исходник и файл HEX). ПЕРЕРАБАТЫВАЮ его на Atmega48 -в прикреплении-это проект model_48-1 (+исходник и файл HEX). Проект работает в протеусе. Можете проверить.
Но у меня готова печатная плата, где линии данных и линии управления на разных портах, в прикреплении – это проект model_48-1 (+исходник и файл HEX). Проект не работает в протеусе. Всего-навсего переключил только две линии управления на другой порт. И НЕ РАБОТАЕТ. В LCD-48-2.asm можно увидеть следы моей деятельности и отличия от LCD-DS48.asm. Много NOP в двух местах (оставил)-попытка ввести задержки. Помогите, пожалуйста, если сможете.
Вложения:
Комментарий к файлу: прикреплено 3 проект в протеусе и исходники 1111.rar [44.85 KiB]
Скачиваний: 221
//Модуль LCD используется в 4-битном режиме. //Чтение данных из модля не используется, сигнал W заземлен. //Управляющие сигналы: LCD_E, LCD_RS, LCD_D4, LCD_D5, LCD_D6, LCD_D7. //Для включения подсветки используется порт BKL, активный уровень - высокий.
//Используется функция Delay_ms и макрос Delay_us.
//---------- Таблица пользовательских символов LCD: ----------
//---------- Вывод беззнакового числа 0..9999 на LCD: ----------
void LCD_UInt9999(int n) { char d, ch = ' '; d = n / 1000; if(d) ch = d + 0x30; LCD_Char(ch); n = n % 1000; d = n / 100; if(ch != ' ' || d) ch = d + 0x30; LCD_Char(ch); n = n % 100; d = n / 10; if(ch != ' ' || d) ch = d + 0x30; LCD_Char(ch); n = n % 10; LCD_Char(n + 0x30); }
//----------
main.h:
#define LCD_D5 (1 << PC2) //OX - линия данных LCD D5 #define LCD_D4 (1 << PC3) //OX - линия данных LCD D4 #define LCD_D7 (1 << PC4) //OX - линия данных LCD D7 #define LCD_D6 (1 << PC5) //OX - линия данных LCD D6
Да ничего не получается, ни в натуре, ни в протеусе. Слепил несколько своих вариантов, впустую. Помогите, пожалуйста, если сможете.
Проверил ваши проекты (у меня протеус 7.7 sp2). Оба работают. На экранчик выдается "Temp=pp , 'C" В железе не проверял Да, и пришлось поменять компилятор. Source->Add/Remove source files->Code generation tool, стояло "none", поставил "AVRASM2".
ааа не бейте меня сильно .Где первый вывод у WH1602A-NGG-CT ? что-то я в этом даташите нечего понять не могу столько тут накрутили размеров слева направо ?
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб сен 03, 2011 12:04:59
Родился
Зарегистрирован: Сб сен 03, 2011 11:56:42 Сообщений: 4
Рейтинг сообщения:0
Всем привет! Уже несколько дней тчетно мучаю свой Winstar WH2002L на базе ks0066u.
Запитываю свой девайс и питание заходит в экран, соответственно загорается подсветка и хорошо контрастно первая строчка дисплея. Сразу скажу все ножки шлейфов обзванивал, всё подключено верно без разрывов в том числе и к девайсу. При попытке так называемой инициализации, либо ничего не происходит, либо контраст тускнеет и загоряются чёрным все знакоместа.
/*Программа задержки*/ void Pause (unsigned int Interval) { /*Множитель +26* на каждый мегагерц процессора*/ unsigned int i; //декларация переменной для программы задержки for (i=0;i<(Interval*208+1);i++){asm("nop");}; //Основной цикл программы задержки }
И собственно следом вопрос, имеет ли принципеальное значение на какой порт посажен экран и на какие ножки. К примеру у меня экран посажен на порт Б следующим образом:
PB0 - RS PB1 - E PB2 - E2 (Для больших дисплеев типа Winstar WH4004, в данный момент не используется) PB3 - Линия № 4 Дисплея PB4 - Линия № 5 Дисплея PB5 - Линия № 6 Дисплея PB6 - Линия № 7 Дисплея PB7 - Здесь висит звуковая пищалка которая в проге пикает при нажатии клавиш.
asm("nop"); /*Пауза в один цикл процессора для стабилизации*/
Обычно для контроллеров 44780 требуется задержка как минимум 1 мкс, а у вас же тактовая частота 8МГц. upd: И посмотрите в ассемблерном листинге что генерируется в задержке. Некоторые компиляторы могут выбрасывать некчемные с их точки зрения циклы. Вобще для этой цели лучше использовать таймеры.
У меня сегодня с таким индикатором(16X2) прикол был. У меня их 2шт 1 точно работает второй тоже должен. Подключаю к меге 8 , включаю вижу что-то типа *==^_//Д\\";%<>? долго мучился, 100 раз проверял правильность подключения проводов и наличие контакта, отсутствие КЗ бред выводит и хоть убейся. Подключил второй , включаю вижу "Hello world!" как и было задумано. Кто подскажет в чем может быть причина? Может потому что я + и - первый раз перепутал и чот в первом индикаторе подгорело?
У меня сегодня с таким индикатором(16X2) прикол был. У меня их 2шт 1 точно работает второй тоже должен. Подключаю к меге 8 , включаю вижу что-то типа *==^_//Д\\";%<>? долго мучился, 100 раз проверял правильность подключения проводов и наличие контакта, отсутствие КЗ бред выводит и хоть убейся. Подключил второй , включаю вижу "Hello world!" как и было задумано. Кто подскажет в чем может быть причина? Может потому что я + и - первый раз перепутал и чот в первом индикаторе подгорело?
Тайминги выдерживаешь? У меня на двух индентичных заработало когда тайминги снизил(увеличил задержки).
_________________ Разработал: -BLDC -ФУОЗ/МПСЗ -SMART BMS -ECU/EDC на STM32F4(43%)+CPLD(57%) -Моноинжектор на ATSAMD20G16 -контроллер эффектов для RGB LED ленты -умные часы/обратный счет/секундомер -устройство измерения емкости АКБ
_________________ Разработал: -BLDC -ФУОЗ/МПСЗ -SMART BMS -ECU/EDC на STM32F4(43%)+CPLD(57%) -Моноинжектор на ATSAMD20G16 -контроллер эффектов для RGB LED ленты -умные часы/обратный счет/секундомер -устройство измерения емкости АКБ
У меня сегодня с таким индикатором(16X2) прикол был. У меня их 2шт 1 точно работает второй тоже должен. Подключаю к меге 8 , включаю вижу что-то типа *==^_//Д\\";%<>? долго мучился, 100 раз проверял правильность подключения проводов и наличие контакта, отсутствие КЗ бред выводит и хоть убейся. Подключил второй , включаю вижу "Hello world!" как и было задумано. Кто подскажет в чем может быть причина? Может потому что я + и - первый раз перепутал и чот в первом индикаторе подгорело?
Тайминги выдерживаешь? У меня на двух индентичных заработало когда тайминги снизил(увеличил задержки).
Все разобрался! Этому индикатору нужно минимум 1,5 сек задержки иначе выводит бред.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения