|
AtMEGA16+TM12864ABBW6 |
|
|
|
Feb 3 2010, 12:13
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Доброго времени суток. Сразу к проблеме: Попытался запустить указанную в теме связкую, за основу класса взят пример с форума МЭЛТ, схема подключения так же взята оттуда. Проект собирается, но при попытке запустить на меге, на дисплее никакой реакции. Никто не сможет подсказать как проверить работоспособность дисплея или ткнуть на ошибку в программе. PS проверить по рекомендации МЭЛТа через LPT не могу, т.к. этого самого порта на ноуте нету. Заранее спасибо. проект
testing12864.rar ( 48.83 килобайт )
Кол-во скачиваний: 135исходная библиотека
MT_12864.rar ( 2.58 килобайт )
Кол-во скачиваний: 123
Сообщение отредактировал Nekromant - Feb 3 2010, 12:21
|
|
|
|
|
Feb 9 2010, 04:02
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
С прерываниями на данный момент вообще не работаю. и все ссылки на лишние функции вырезаны. плюс в маке-файле прописана только директория лсд и маин. Но в любом случае последую вашему совету и попробую и инициализацию и вывод сделать просто в майне. может и правда где проглядел и что то не так собирается.
Причина редактирования: Бездумное цитирование
|
|
|
|
|
Feb 26 2010, 01:05
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Сергей Борщ @ Feb 10 2010, 09:36)  Проверьте наличие отрицательного напряжения на выводе 18. И его попадание на вывод 3. нету этого самого отрицательного напряжения. если быть точным -0,128В далее ниже прилагаю еще один вариант проекта полностью переписанный и проверенный. вроде без ошибок но так и не заводится. Теперь уже не знаю вообще в каком направлении копать.
testing12864N.rar ( 46.68 килобайт )
Кол-во скачиваний: 104
|
|
|
|
|
Feb 26 2010, 06:24
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 29-01-09
Пользователь №: 44 106

|
1) MT12864A нормально эмулируется в Proteus - можно попробовать и сразу узнаете в чем проблема - в железе или в коде. 2) У Атмеги выключить фьюз JTAGEN (сам попадался и именно с таким индикатором)
|
|
|
|
|
Mar 8 2010, 13:55
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Son Of Stone @ Feb 26 2010, 09:24)  1) MT12864A нормально эмулируется в Proteus - можно попробовать и сразу узнаете в чем проблема - в железе или в коде. 2) У Атмеги выключить фьюз JTAGEN (сам попадался и именно с таким индикатором) с Протеусом я очень сильно на вы и недолюбливаю его а фьюз у меги выключен уже давно
|
|
|
|
|
Mar 8 2010, 21:12
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Nekromant @ Feb 26 2010, 03:05)  нету этого самого отрицательного напряжения. если быть точным -0,128В Значит либо ошибка в инициализации, либо в подключении, либо убитый дисплей. Покажите вашу схему подключения. По вашему коду: ужас. С таким кодом не будет работать даже правильно подключеный исправный дисплей  . 1) Не вижу настройки выводов группы LCD_CTRL на вывод. 2) Код LCD_CTRL_PORT|= (0 << LCD_E);// LCD_E=0; комментарий не соответствует коду. Код не имеет смысла. Чтобы код делал то, что написано в комментарии, он должен быть таким: Код LCD_CTRL_PORT &= ~(1 << LCD_E); Таких мест в вашем коде очень много, не буду перечислять все. 3) Код //При необходимости настроить здесь шину данных на вывод LCD_CTRL_PORT|= ((0 << LCD_RW)&&(cd << LCD_DI)&&(l << LCD_CS1)&&(r << LCD_CS2)); Этот код тоже делает не то, что вы ожидаете. Этот код делает то же самое, что и предыдущий: LCD_CTRL_PORT |= 0, т.е. ничего. Вы путаете логические и двоичные операции, функции "ИЛИ" и "И". Надо было написать: Код LCD_CTRL_PORT &= ~(1 << LCD_RW); // LCD_RW = 0 LCD_CTRL_PORT |= (cd << LCD_DI) | (l << LCD_CS1) | (r << LCD_CS2); или, если на этом порту больше ничего не подключено, так: Код LCD_CTRL_PORT = (0 << LCD_RW) | (cd << LCD_DI) | (l << LCD_CS1) | (r << LCD_CS2); А потом посмотрите в листинг и сравните с таким кодом: Код LCD_CTRL_PORT &= ~((1 << LCD_RW) | (1 << LCD_DI) | (1 << LCD_CS1) | (1 << LCD_CS2)); if(cd) LCD_CTRL_PORT |= (1 << LCD_DI); if(l) LCD_CTRL_PORT |= (1 << LCD_CS1); if(r) LCD_CTRL_PORT |= (1 << LCD_CS2); Потом вы можете заметить, что функция WriteByte() всегда вызывается или с r=1, l=0 или с r=0, l=1. Так зачем передавать в нее два взаимно однозначных параметра? Достаточно передвать лишь один. 4) Код _delay_ms(140); //Это время предустановки адреса (tAW) Вы не попутали миллисекунды и наносекунды? 5) В закомментированном коде ReadByte() есть настройка шины данных индикатора на вывод данных, но нет настройки порта меги на ввод. Аналогично и для WriteByte() - есть настройка индикатора на ввод, но нет настроки порта меги на вывод. Есть еще огромный простор для оптимизации.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 9 2010, 11:14
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Сергей Борщ @ Mar 9 2010, 01:12)  ... да... видимо перерыв в писании программ больше полугода не идет на пользу совсем. действительно все намешал и ведь даже не заметил . сейчас попробую учесть все замечания 1-включил 2,3 счас подправлю 4 с задержками еще возиться однако придется и не раз так как все таки я сомневаюсь что МТ и ТМ дисплеи прямо один в один работают хоть вроде и копии 5 код раскомментирован и исправлен с вашими замечаниями 6-после изменений появилось отрицательное напряжение -5V что уже радует. буду копать дальше и все результаты обязательно выложу здесь p.s. оптимизировать буду как только запустится)))).
Сообщение отредактировал IgorKossak - Mar 9 2010, 17:56
Причина редактирования: Бездумное цитирование
|
|
|
|
|
Mar 9 2010, 12:54
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
вроде везде подправил следуя замечаниям. Выкладываю уже третью версию проекта. подключение дисплея писано в Main.h( проблемы с интернетом на работе потому крутимся как можем).
testing12864v3.rar ( 50.44 килобайт )
Кол-во скачиваний: 83
|
|
|
|
|
Mar 9 2010, 13:11
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Nekromant @ Mar 9 2010, 14:54)  вроде везде подправил следуя замечаниям. Ага. "Телепаты, налетайте!" Какие симптомы, что лечим на этот раз?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 9 2010, 13:55
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Сергей Борщ @ Mar 9 2010, 16:11)  Ага. "Телепаты, налетайте!" Какие симптомы, что лечим на этот раз? не ну не телепаты) запуститься не запустился, хотя вроде все подправил. на всякий случай в майне написал подключение. лично меня смущает 3 и 18 ноги нормально ли их накоротко связывать или же хоть какое то сопротивление надо? и второе я вообще правильно его включил а то не удивлюсь что еще чего-нибудь прочитал А а поставил Б. и третье Функция _delay_us() может работать с дробными числами как я в проекте поставил? если нет то как наносекунды сделать? насколько я знаю есть ms и us а таймер включать на дисплей мне кажется кощунством
Сообщение отредактировал Nekromant - Mar 9 2010, 13:58
|
|
|
|
|
Mar 9 2010, 14:40
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Nekromant @ Mar 9 2010, 15:55)  на всякий случай в майне написал подключение. лично меня смущает 3 и 18 ноги нормально ли их накоротко связывать или же хоть какое то сопротивление надо? Надо. Им настраивается контрастность. Цитата(Nekromant @ Mar 9 2010, 15:55)  и второе я вообще правильно его включил а то не удивлюсь что еще чего-нибудь прочитал А а поставил Б. Вечером гляну, если никто не ответит. Цитата(Nekromant @ Mar 9 2010, 15:55)  и третье Функция _delay_us() может работать с дробными числами как я в проекте поставил? может.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 9 2010, 15:04
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
так и еще, почему у меня при включении дисплея через раз то +5 то - 5 вольт??? Сейчас уже отвязался от контроллера полностью просто на ноги 1 и 2 дисплея подал 5 вольт и получил на 18 ноге -7 возможных по даташиту пляшушие значения от -0,18 до 2,85. при этом сопротивление между 1) +5 и 3 или 18 ногой =28,5МОм 2) GND и 3 или 18 ногой =28,5 МОм сопротивления между ногами 3 и 18 пробовал менять от 100 Ом до 4,7кОм
Сообщение отредактировал Nekromant - Mar 9 2010, 15:21
|
|
|
|
|
Mar 10 2010, 10:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Nekromant @ Mar 9 2010, 17:04)  так и еще, почему у меня при включении дисплея через раз то +5 то - 5 вольт??? Сейчас уже отвязался от контроллера полностью просто на ноги 1 и 2 дисплея подал 5 вольт и получил на 18 ноге -7 возможных по даташиту пляшушие значения от -0,18 до 2,85. Разбирайтесь с подключением, питанием. Преобразователь напряжения никак не завязан на контроллер, должен работать всегда и выдавать -7...-10в. Код _delay_us((1000-140-450)/1000); //Минимально допустимый интервал между сигналами E=1 Это компилится в _delay_us(0). Хотите получить деление с плавающей точкой - приведите к формату с плавающей точкой хотя бы один из операндов: (1000-140-450)/1000.0 Код void WaitReady(bool l, bool r) {//Ждать готовности индикатора, опрашивая байт статуса //При необходимости настроить здесь шину данных на ввод LCD_CTRL_DDR=0x00; LCD_DATA_DDR=0x00; А ноги управления зачем на ввод настроили? И где переключение на ввод в функции чтения? Подключение похоже на правду. На AVcc питание не забыли подать? От него питается порт A.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 10 2010, 14:18
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Сергей Борщ @ Mar 10 2010, 13:32)  Разбирайтесь с подключением, питанием. Преобразователь напряжения никак не завязан на контроллер, должен работать всегда и выдавать -7...-10в. Код _delay_us((1000-140-450)/1000); //Минимально допустимый интервал между сигналами E=1 Это компилится в _delay_us(0). Хотите получить деление с плавающей точкой - приведите к формату с плавающей точкой хотя бы один из операндов: (1000-140-450)/1000.0 Код void WaitReady(bool l, bool r) {//Ждать готовности индикатора, опрашивая байт статуса //При необходимости настроить здесь шину данных на ввод LCD_CTRL_DDR=0x00; LCD_DATA_DDR=0x00; А ноги управления зачем на ввод настроили? И где переключение на ввод в функции чтения? Подключение похоже на правду. На AVcc питание не забыли подать? От него питается порт A. 1) так и оставил только два провода питания на 1 и 2 ноги на дисплее и потыкался тестером везде где видел дорожки и намеки на точки хоть какие то. нигде ниже 0V не обнаружилось((( дисплей не имеет никакой настройки по умолчанию? ну скажем затянуть3 3 ногу на землю или вообще не подключать? (я по аналогии с нашими MT16s2 там вроде так помогало). 2) настроил на вход все чтоб не забыть)))) счас уже исправил 3) контроллер на STK500 стоит так что питание есть, плюс к этому когда на порт А диоды цепляешь то они моргают, то есть порт работает. 4) плавающую точку добавил.
Сообщение отредактировал Nekromant - Mar 10 2010, 14:55
|
|
|
|
|
Mar 10 2010, 15:02
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Nekromant @ Mar 10 2010, 16:18)  1) так и оставил только два провода питания на 1 и 2 ноги на дисплее и потыкался тестером везде где видел дорожки и намеки на точки хоть какие то. нигде ниже 0V не обнаружилось((( Значит ищите, что могли спалить/отломать в преобразователе, или ставьте внешний источник -7в, или берите новый индикатор. Цитата(Nekromant @ Mar 10 2010, 16:18)  дисплей не имеет никакой настройки по умолчанию? ну скажем затянуть3 3 ногу на землю или вообще не подключать? (я по аналогии с нашими MT16s2 там вроде так помогало). Не знаю, я с ним не работал. В даташите упоминаний не нашел. Перечитайте - может я чего-то не заметил.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 10 2010, 15:17
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Сергей Борщ @ Mar 10 2010, 18:02)  Значит ищите, что могли спалить/отломать в преобразователе, или ставьте внешний источник -7в, или берите новый индикатор.Не знаю, я с ним не работал. В даташите упоминаний не нашел. Перечитайте - может я чего-то не заметил. я тоже не нашел. попробую завтра у человека питание кинуть на другой дисплей и проверю сигналы потом отпишусь сюда.
|
|
|
|
|
Mar 12 2010, 13:50
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Доброго времени суток. 1)Итак как я и обещал я подключился к такому же дисплею как указано у меня в топике: дисплей по маркировке совпадает один в один разница в дате покупки примерно год и на этот раз подопытный кролик никуда даже не припаивался. 2)подавали только напряжение +5v и землю. остальное все висело в воздухе 3) результат удивил: на третьей ное дисплея появилось +5V (как и на первом дисплее). на 18 же ноге не появилось ничего. 4) перечитал еще раз даташит - не нашел ничего про то почему может не быть этого отрицательного напряжения.
|
|
|
|
|
Mar 16 2010, 05:01
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369

|
Цитата(Сергей Борщ @ Mar 13 2010, 15:18)  Предположим, что источник включается командой display on (0x3F). Можно предположить и так. но при подаче этой команды -7 вольт так же нигде не появилось ( ps однако надо начинать читать даташит по другой диагонали
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|