Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Winstar 1602A + ATmega32 - неправильный код или мертвый дисплей?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
sm217
Предистория: до попыток связать дисплей с атмегой проводилось проверочное включение с не очень надежным питанием(нечто китайское + 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');
}
МП41
Я однажды тоже долго долбался с программой, никак не удавалось что-либо написать на экране , а оказалось, что резистор установки констраста стоял на минимуме, так что просто ничего не было видно smile.gif.

Ну а код можно примерно проверить в протеусе.
sm217
Регулировка контраста ничего не дала(5.1в, 10кОм подстроечный резистор). Дисплей можно закопать за домом? :\
velbovv
При подаче на дисплей напряжения, регулировкой контрастности можно засветить первую строку.

Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять
следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением
рабочего напряжения питания (> 4,5 В) и выполнением каких-либо операций с контроллером.
Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30
независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем),
причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать
паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды
вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу,
на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины,
вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер
в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) з любого состояния.
Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF)
выполняется инициализация режимов работы с выдачей инициализирующей последовательности,
аналогичной указанной в таблице 7 (содержащей в том числе команду выбора необходимой разрядности шины).

Необходимо помнить, что когда Вы объявляете режим работы с 4-х разрядной шиной, то есть выдаете команду $20,
то делаете это обычно из 8-ми разрядного режима, который устанавливается автоматически после подачи
напряжения питания, а значит вы не сможете адекватно объявить необходимое значение флагов N и F,
располагающихся в младшей тетраде команды установки разрядности шины. Поэтому команду необходимо
повторить в уже установившемся 4-х разрядном режиме путем последовательной передачи двух тетрад,
то есть для 4-х разрядного режима образом
p.s. тест не мой, автора не помню.
pavel-pervomaysk
Я вот игрался с моделью WH2004A + ATmega32 ( правда на асме ) , резистор контраста у этой линнейки - 2к7 на массу . Далее все как и у остальных .
aesok
Цитата(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 отключен?

Анатолий.
sm217
Цитата(aesok @ Nov 15 2008, 14:47) *
JTAG отключен?

Анатолий.

Нет, а это имеет значение?
Juras Pr.
Имеет, порты не будут работать, на которых JTAG.
Сергей Борщ
Цитата(sm217 @ Nov 15 2008, 14:15) *
а это имеет значение?
А почитать даташит? Ключевое слово "JTAG" для поиска по даташиту у вас уже есть.
sm217
Спасибо, 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     */
pavel-pervomaysk
У меня так

// Работа с ЖКИ

// LCD PORTA

// Двухстрочный ЖКИ 16 х 2 контроллер 44780 режим 4 бита 5 х 7 точек

.equ led = PA0 // Подсветка ЖКИ 1 вкл / 0 выкл
.equ rs = PA1 // Выбор регистра ЖКИ
.equ rw = PA2 // Чтение_запись данных в ЖКИ
.equ e = PA3 // Включение разрешения команд
.equ bf = PA7 // Флаг занятости ЖКИ

Если при подаче питания на ЖКИ верхняя строка не светится - то скорей всего ему просто капец . Контраст мы уже обсудили .
sm217
Но как может быть капец абсолютно новому дисплею? sad.gif
pavel-pervomaysk
Цитата(sm217 @ Nov 15 2008, 22:20) *
Но как может быть капец абсолютно новому дисплею? sad.gif


Молча ! Сам пару штук спалил по началу lol.gif А мег спалил не одну далеко ... Теперь все делается красиво и ничего не горит .
sm217
Ваах..! Простите конечно, но Я ЛОЛИЩЕ! lol.gif
Я неправильно подключал резистор.

Всем спасибо.
Nanobyte
Недавно чуть не спалил Winstar 2*16, уже не первый раз сталкиваюсь с тем, что выводы питания поменяны местами, причём по маркировке дисплея это никак не отследить. Каждый раз при покупке дисплеев из разных партий приходится внимательно смотреть разводку питания на плате индикатора.
pavel-pervomaysk
Цитата(Nanobyte @ Dec 29 2008, 00:34) *
Недавно чуть не спалил Winstar 2*16, уже не первый раз сталкиваюсь с тем, что выводы питания поменяны местами, причём по маркировке дисплея это никак не отследить. Каждый раз при покупке дисплеев из разных партий приходится внимательно смотреть разводку питания на плате индикатора.


Это в основном с дисплеями у которых выводы с боку находятся в 2 столбика 2 х 8 ( 2 х 7 ) .
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.