|
Winstar 1602A + ATmega32 - неправильный код или мертвый дисплей? |
|
|
|
Nov 14 2008, 15:36
|

Группа: Новичок
Сообщений: 6
Регистрация: 14-11-08
Из: Ladyzhyn, Vinnyts'ka Oblast', Ukraine
Пользователь №: 41 640

|
Предистория: до попыток связать дисплей с атмегой проводилось проверочное включение с не очень надежным питанием(нечто китайское + MC7805(аналог ЕН5) + керамическй конденсатор на 15 нанофарад). Признаки жизни дисплей подавал 2 раза - сначала засветилась узкая полоска, при втором включении был короткий перелив. При дальнейших включениях признаков жизни не было. На данный момент питание надежное. При включении, опять же, никаких признаков жизни - как при попытке управления с контроллера так и без оного. Вопрос: какова вероятность смерти дисплея в результате проверочного включения? Есть ли способ проверить его работоспособность отдельно от контроллера? Или дело все-же в коде? Пробовал использовать код отсюда: http://homepage.hispeed.ch/peterfleury/avr...tware.html#libsА так же нечто самописное: ( собиралось с avr-gcc -Os -DF_CPU 8000000UL -fno-builtin -mmcu=atmega32 -c main.c ) Код #include <util/delay.h> #include <avr/io.h> #define EN _BV(PC4) #define RW _BV(PC5) #define RS _BV(PC6) #define DB7 _BV(PC0) #define DB6 _BV(PC1) #define DB5 _BV(PC2) #define DB4 _BV(PC3) #define T_EN PORTC |= EN; _delay_us(5); PORTC ^= EN void d_init(void){ DDRC = _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3) | _BV(PC4) | _BV(PC5) | _BV(PC6); _delay_ms(16); PORTC = DB5 | DB4; T_EN; _delay_ms(5); T_EN; _delay_us(150); PORTC ^= DB4; T_EN; _delay_ms(1); PORTC |= DB7 | DB6; T_EN; _delay_us(40); PORTC ^= DB6 | DB5 | DB4; T_EN; _delay_us(40); PORTC ^= DB7 | DB4; T_EN; _delay_us(40); PORTC ^= DB4 | DB5; T_EN; _delay_us(50); PORTC ^= DB5; } void putc(char c){ PORTC = RS; PORTC |= c << 4; T_EN; PORTC ^= (c >> 4) << 4; T_EN; PORTC |= DB7 | DB6 | DB5 | DB4; PORTC ^= RS; _delay_ms(1); } int main(void){ d_init(); putc('w'); }
|
|
|
|
|
Nov 14 2008, 18:57
|

Группа: Новичок
Сообщений: 6
Регистрация: 14-11-08
Из: Ladyzhyn, Vinnyts'ka Oblast', Ukraine
Пользователь №: 41 640

|
Регулировка контраста ничего не дала(5.1в, 10кОм подстроечный резистор). Дисплей можно закопать за домом? :\
|
|
|
|
|
Nov 15 2008, 05:18
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 30-07-08
Пользователь №: 39 290

|
При подаче на дисплей напряжения, регулировкой контрастности можно засветить первую строку.
Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания (> 4,5 В) и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30 независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем), причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) з любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в таблице 7 (содержащей в том числе команду выбора необходимой разрядности шины).
Необходимо помнить, что когда Вы объявляете режим работы с 4-х разрядной шиной, то есть выдаете команду $20, то делаете это обычно из 8-ми разрядного режима, который устанавливается автоматически после подачи напряжения питания, а значит вы не сможете адекватно объявить необходимое значение флагов N и F, располагающихся в младшей тетраде команды установки разрядности шины. Поэтому команду необходимо повторить в уже установившемся 4-х разрядном режиме путем последовательной передачи двух тетрад, то есть для 4-х разрядного режима образом p.s. тест не мой, автора не помню.
|
|
|
|
|
Nov 15 2008, 11:47
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(sm217 @ Nov 14 2008, 18:36)  ( собиралось с avr-gcc -Os -DF_CPU 8000000UL -fno-builtin -mmcu=atmega32 -c main.c ) Код #define EN _BV(PC4) #define RW _BV(PC5) #define RS _BV(PC6) #define DB7 _BV(PC0) #define DB6 _BV(PC1) #define DB5 _BV(PC2) #define DB4 _BV(PC3) ..... } JTAG отключен? Анатолий.
|
|
|
|
|
Nov 15 2008, 12:15
|

Группа: Новичок
Сообщений: 6
Регистрация: 14-11-08
Из: Ladyzhyn, Vinnyts'ka Oblast', Ukraine
Пользователь №: 41 640

|
Цитата(aesok @ Nov 15 2008, 14:47)  JTAG отключен?
Анатолий. Нет, а это имеет значение?
|
|
|
|
|
Nov 15 2008, 12:49
|

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

|
Цитата(sm217 @ Nov 15 2008, 14:15)  а это имеет значение? А почитать даташит? Ключевое слово "JTAG" для поиска по даташиту у вас уже есть.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 15 2008, 17:57
|

Группа: Новичок
Сообщений: 6
Регистрация: 14-11-08
Из: Ladyzhyn, Vinnyts'ka Oblast', Ukraine
Пользователь №: 41 640

|
Спасибо, JTAG отключил. Тем не менее, вопрос остается, такой же _новый_ дисплей не подает признаков жизни. Первую строку при подаче питания не видно. Вот как я указал порты для вышеуказанной библиотеки: Код #define LCD_PORT PORTC /**< port for the LCD lines */ #define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */ #define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */ #define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */ #define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */ #define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */ #define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */ #define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */ #define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */ #define LCD_RS_PORT LCD_PORT /**< port for RS line */ #define LCD_RS_PIN 6 /**< pin for RS line */ #define LCD_RW_PORT LCD_PORT /**< port for RW line */ #define LCD_RW_PIN 5 /**< pin for RW line */ #define LCD_E_PORT LCD_PORT /**< port for Enable line */ #define LCD_E_PIN 4 /**< pin for Enable line */
Сообщение отредактировал sm217 - Nov 15 2008, 18:00
|
|
|
|
|
Nov 15 2008, 19:46
|

Группа: Новичок
Сообщений: 6
Регистрация: 14-11-08
Из: Ladyzhyn, Vinnyts'ka Oblast', Ukraine
Пользователь №: 41 640

|
Ваах..! Простите конечно, но Я ЛОЛИЩЕ! Я неправильно подключал резистор. Всем спасибо.
Сообщение отредактировал sm217 - Nov 15 2008, 19:47
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|