код со 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]
Скачиваний: 236
//Модуль 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 сек задержки иначе выводит бред.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения