реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Winstar 1602A + ATmega32 - неправильный код или мертвый дисплей?
sm217
сообщение Nov 14 2008, 15:36
Сообщение #1





Группа: Новичок
Сообщений: 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');
}
Go to the top of the page
 
+Quote Post
МП41
сообщение Nov 14 2008, 16:03
Сообщение #2


4 синих кубика
****

Группа: Участник
Сообщений: 526
Регистрация: 19-09-08
Из: полупроводника, металла и стекла
Пользователь №: 40 326



Я однажды тоже долго долбался с программой, никак не удавалось что-либо написать на экране , а оказалось, что резистор установки констраста стоял на минимуме, так что просто ничего не было видно smile.gif.

Ну а код можно примерно проверить в протеусе.


--------------------
p-n-p-p-n-p-n-n-p-n-p структура однако очень эффективна
Go to the top of the page
 
+Quote Post
sm217
сообщение Nov 14 2008, 18:57
Сообщение #3





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



Регулировка контраста ничего не дала(5.1в, 10кОм подстроечный резистор). Дисплей можно закопать за домом? :\
Go to the top of the page
 
+Quote Post
velbovv
сообщение Nov 15 2008, 05:18
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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. тест не мой, автора не помню.
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Nov 15 2008, 07:00
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Я вот игрался с моделью WH2004A + ATmega32 ( правда на асме ) , резистор контраста у этой линнейки - 2к7 на массу . Далее все как и у остальных .
Go to the top of the page
 
+Quote Post
aesok
сообщение Nov 15 2008, 11:47
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 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 отключен?

Анатолий.
Go to the top of the page
 
+Quote Post
sm217
сообщение Nov 15 2008, 12:15
Сообщение #7





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



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

Анатолий.

Нет, а это имеет значение?
Go to the top of the page
 
+Quote Post
Juras Pr.
сообщение Nov 15 2008, 12:47
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 26-04-08
Из: BY/MN
Пользователь №: 37 111



Имеет, порты не будут работать, на которых JTAG.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 15 2008, 12:49
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
sm217
сообщение Nov 15 2008, 17:57
Сообщение #10





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Nov 15 2008, 18:58
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



У меня так

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

// 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 // Флаг занятости ЖКИ

Если при подаче питания на ЖКИ верхняя строка не светится - то скорей всего ему просто капец . Контраст мы уже обсудили .
Go to the top of the page
 
+Quote Post
sm217
сообщение Nov 15 2008, 19:20
Сообщение #12





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



Но как может быть капец абсолютно новому дисплею? sad.gif
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Nov 15 2008, 19:33
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Цитата(sm217 @ Nov 15 2008, 22:20) *
Но как может быть капец абсолютно новому дисплею? sad.gif


Молча ! Сам пару штук спалил по началу lol.gif А мег спалил не одну далеко ... Теперь все делается красиво и ничего не горит .
Go to the top of the page
 
+Quote Post
sm217
сообщение Nov 15 2008, 19:46
Сообщение #14





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



Ваах..! Простите конечно, но Я ЛОЛИЩЕ! lol.gif
Я неправильно подключал резистор.

Всем спасибо.

Сообщение отредактировал sm217 - Nov 15 2008, 19:47
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 28 2008, 22:34
Сообщение #15


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Недавно чуть не спалил Winstar 2*16, уже не первый раз сталкиваюсь с тем, что выводы питания поменяны местами, причём по маркировке дисплея это никак не отследить. Каждый раз при покупке дисплеев из разных партий приходится внимательно смотреть разводку питания на плате индикатора.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016