ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Обсуждаем контроллеры компании Atmel.
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

Здравствуйте, уважаемые коты!

Попал в руки новый дисплей WG12232 (О его управлении прочитал >тут<).

Второй день его мучаю, ни как не могу добиться от него хотя бы точки или символа...
Помогите, пожалуйста, понять, что я не так делаю в коде?

С генерацией всё нормально, 2кГц на него подаю (7вывод) (и, следовательно, МК прошивается нормально).
Распаял тоже всё верно, проверил уже раз 10.

МК: Atmega8535, тактирована кварцем 16МГц

Собственно, код (портировал на CVAVR из вышеуказанной статьи):
Спойлер

Код: Выделить всё

#include <mega8535.h>
#include <delay.h>

interrupt [TIM0_OVF] void timer0_ovf_isr(void){PORTD.7= ~PORTD.7;TCNT0= 0xC2;}

//Команды
#define Display_ON          0b10101111
#define Display_OFF         0b10101110
#define Display_START_Line  0b11000000
#define Set_Page            0b10111000
#define Set_Address         0b00000000
#define ADC_Select_right    0b10100000
#define ADC_Select_back     0b10100001
#define Static_Drive_ON     0b10100101
#define Static_Drive_OFF    0b10100100
#define Duty_Select_0       0b10101000
#define Duty_Select_1       0b10101001
#define Read_Modify_Write   0b11100000
#define END                 0b11101110
#define RESET_com           0b11100010
//порт к которому подключена шина данных ЖКД
#define PORT_DATA PORTA
#define PIN_DATA  PINA
#define DDR_DATA DDRA
//порт к которому подключены управляющие выводы
#define PORT_SIG PORTC
#define PIN_SIG  PINC
#define DDRX_SIG DDRC

//номера выводов микроконтроллера, к которым подключены управляющие выводы ЖКД
#define A0 2
#define RW 3
#define EN 4
#define CS2 5 //L -> Chip2 Enabled!
#define CS1 6 //L -> Chip1 Enabled!
#define RES 7

//макросы для работы с битами
#define ClearBit(reg, bit)       reg &= (~(1<<(bit)))
#define SetBit(reg, bit)          reg |= (1<<(bit))

void WG12232_write (unsigned char data){//общая часть для функций вывода команд и данных
    DDR_DATA = 0xFF;
   PORT_DATA = 0x00;
    ClearBit(PORT_SIG,RW);//режим записи
   SetBit(PORT_SIG,EN);//фронт стробирующего импульса
   PORT_DATA = data;//подаём данные
   delay_us(2);//длительность стробирующего импульса
   ClearBit(PORT_SIG,EN);//спад стробирующего импульса
}

void busy_wait (void){//функция проверки занятости индикатора
    SetBit(PORT_SIG,RW);//режим чтения
   ClearBit(PORT_SIG,A0);//регистра состояния
   PORT_DATA = 0xFF;//с подтягивающими резисторами
   DDR_DATA = 0x00;//порт на вход
   SetBit(PORT_SIG,EN);//фронт стробирующего импульса
   while (!(PIN_DATA & (1<<7)));//ждать выполнения предыдущей команды
   ClearBit(PORT_SIG,EN);//спад стробирующего импульса
   PORT_DATA = 0x00;//обнуляем порт данных
    DDR_DATA = 0xFF;//и переводим его на выход
   SetBit(PORT_SIG,RW);//возвращаем режим записи
}

void WG12232_com_write (unsigned char com){//функция ввода команды в индикатор
    busy_wait();//проверка готовности LCD
    ClearBit(PORT_SIG,A0);//Вывод Ao в 0 (команда)
   WG12232_write(com);//подаём команду
}
void WG12232_data_write (unsigned char data){//функция вывода данных на индикатор
    busy_wait();//проверка готовности LCD
    SetBit(PORT_SIG,A0);//вывод Ao в 1 (данные)
   WG12232_write(data);//подаём данные
}
void WG12232_clear (void){//функция очистки видео ОЗУ, соответсвтенно экрана
    unsigned char V_page,i;//внутренние переменные

    ClearBit(PORT_SIG,CS1);//выбираем оба кристалла
   ClearBit(PORT_SIG,CS2);
   
   for(V_page=0;V_page<4;V_page++)//для всех страниц
   {
       WG12232_com_write(Set_Page | V_page);
      WG12232_com_write(Set_Address);//и адресов
       for (i=0;i<61;i++) WG12232_data_write(0);//пишем нули
   }
}

//функция чтения данных из видео ОЗУ
unsigned char WG12232_data_read (unsigned char page, unsigned char addr){
    unsigned char data;
   
   if((page>3) || (addr>60)){return(0x00);}//проверяем не вышли ли за границы
   WG12232_com_write(Set_Page | page);//установить адрес по вертикали
   WG12232_com_write(Set_Address | addr);//установить адрес по горизонтали
    ClearBit(PORT_SIG,RW);//режим чтения
   SetBit(PORT_SIG,A0);//данных
   PORT_DATA = 0xFF;//с подтягивающими резисторами
   DDR_DATA = 0x00;//порт на вход
   busy_wait();//проверка готовности LCD
   SetBit(PORT_SIG,EN);//фронт стробирующего импульса
   delay_us(10);
   data = PIN_DATA;//считать данные
    ClearBit(PORT_SIG,EN);//спад стробирующего импульса
   PORT_DATA = 0x00;//обнуляем порт данных
   DDR_DATA = 0xFF;//и переводим его на выход
   ClearBit(PORT_SIG,RW);//возвращаем режим записи
   return(data);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void InitLcd(void){
    //настраиваем порты ввода/вывода
    DDR_DATA = 0b00000000;
    PORT_DATA = 0b11111111;
     
    DDRX_SIG = 0b11111100;
    PORT_SIG = 0b10001000;   // (7)RES=1, (6)CS1=0, (5)CS2=0, (4)EN=0, (3)RW=1, (2)A0=0
 
    ClearBit(PORT_SIG,RES);
    delay_us(40);
    SetBit(PORT_SIG,RES);
    while (!(PIN_DATA & (1<<4)));//ждём ответа ЖКИ
 
    WG12232_com_write(END);//END
   WG12232_com_write(Static_Drive_OFF);
   WG12232_com_write(Duty_Select_1);
   WG12232_com_write(Display_ON);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void WG12232_point (unsigned char x, unsigned char y){//функция вывода точки

    unsigned char s;//внутренняя переменная для считанных данных видео ОЗУ
    if((x>32) || (y>122)) return;//проверяем не вышли ли за границы
   if(y>=61){ //если точка на втором кристалле
       SetBit(PORT_SIG,CS1);
       ClearBit(PORT_SIG,CS2);//выбираем второй кристалл
      y = y-61;//определяем для него адрес
   }
   else{ //если на первом кристалле
       ClearBit(PORT_SIG,CS1);//выбираем первый кристалл
       SetBit(PORT_SIG,CS2);
   }
   
   s=(WG12232_data_read((x/8),y));//считываем видео ОЗУ по адресу, где ставим точку (чтобы уже засвеченные точки не потушить)
   WG12232_com_write(Set_Page | (x/8));//выставляем тот же адрес по странице
   WG12232_com_write(Set_Address | y);//и колонке
   WG12232_data_write((1<<(x%8)) | s);//и рисуем точку
}

void main(void){
    TCCR0=0x03;   // прескалер
    TIMSK=0x01;   // разрешаем прерывание по переполнению от таймер0
    ACSR=0x80;
    #asm("sei")

    InitLcd();
   
   WG12232_com_write (RESET_com);//сброс ЖКИ
   
   WG12232_clear();//очистка видео ОЗУ
   
    WG12232_point(10,10);

while (1);}


Инициализацию пробовал проводить по-разному, из разных источников...
Регулятор контраста крутил - без толку.
19 и 20 выводы индикатора не запитываю, судя по ДШ они отвечают за подсветку (кстати, тут не понятно. подсветка есть и без них, это нормально?).

Какова вероятность того, что дисплей мертв?
Или, всё же, не правильно им дергаю?
Подскажите минимальный код, который отобразит на нем хоть что-нибудь (без разницы что)?

PS: Вселяет надежду только то, что после хардрезета (0 на RES) яркость подсветки на миг снижается, далее засвечивается нижний ряд пикселей, потом пиксели пропадают и подсветка возвращается в прежнее состояние.

СпойлерПодключения:
DB0-DB7 дисплея к соответствующим битам PORTA
A0 = PortC.2
EN = PortC.4
RW = PortC.3
CS1 = PortC.6
CS2 = PortC.5
RES = PortC.7
CL = PortD.7

Кому не трудно, перекомпилируйте, пожалуйста, код из статьи под эти порты, буду очень благодарен...
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

Коты, помогайте! :)
Напился валерьянки, и теперь грежу рабочим дисплеем, лапы так и чешутся!
Столько всего сделать надо, а дело застопорилось на этом дисплее. Покупать другой желания особого нету, да и не работает магазин в воскресенье...
Надо и энкодер прикручивать, и ик-приемник, и аудиопроцессор, а индикации нету. А "в слепую" особо не поковыряешься.
Жаль, что паяльника дома нет...
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

Вопрос ещё актуален... Ни как не могу его победить...
Неужели ни кто не ковырял их?
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение shurikss123 »

Johnson писал(а):Вопрос ещё актуален... Ни как не могу его победить...
Неужели ни кто не ковырял их?


дома буду, скину тебе тест свой http://www.youtube.com/watch?v=FdctasN7q6o
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

Буду очень счастлив! :)

Заодно задам пару вопросов ещё...
На каком-то форуме читал, что эти дисплеи очень плохо работают с процессорами с тактом выше 8мГц. У меня 16мГц такт. Может ли быть в этом причина? Хотя, использую CVAVR, там задержки выставляются не от тактов, а по МС/НС...

Всю схему питаю от 5в через программатор. При принудительном сбросе дисплея на миг появляются "артефакты" в виде прямоугольников. Видны они только если резистор контраста выкрутить на максимум (5в на ногу).
Нормально ли, что приходится так контраст выкручивать?
Не может ли быть, что питания не хватает?

Очень ли точно необходимо соблюдать такт дисплея? Должен ли работать, если вместо 2000гц подам 2013гц?

Из ДШ не совсем понял... Какое состояния ноги RES рабочее? Лог.1 и сбрасывать Лог.0?

Обязательно ли запитывать 19 и 20 ноги дисплея (судя по ДШ это LED+ и LED-)?

PS: Ещё заметил один момент. Когда на RES висит лог.0 - то нижний ряд пиеселей подсвечен не зависимо от контрастности... А если контрастность прибавить на максимум - то засвечиваются прямоугольники в шахматном порядке... Это нормально?
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Johnson писал(а):Заодно задам пару вопросов ещё...
На каком-то форуме читал, что эти дисплеи очень плохо работают с процессорами с тактом выше 8мГц. У меня 16мГц такт. Может ли быть в этом причина?

причина не в этом (если Вы, конечно, задержки правильные установили)
Johnson писал(а):Всю схему питаю от 5в через программатор. При принудительном сбросе дисплея на миг появляются "артефакты" в виде прямоугольников. Видны они только если резистор контраста выкрутить на максимум (5в на ногу).
Нормально ли, что приходится так контраст выкручивать?
Не может ли быть, что питания не хватает?

нормально, зависимость контрастности от угла поворота движка переменника достаточно нелинейна (ещё смотря какой характеристики переменник)
Johnson писал(а):Очень ли точно необходимо соблюдать такт дисплея? Должен ли работать, если вместо 2000гц подам 2013гц?

нет не точно , работает и на 1 кГц, и на 5 кГц
Johnson писал(а):Из ДШ не совсем понял... Какое состояния ноги RES рабочее? Лог.1 и сбрасывать Лог.0?

логически подумайте ... СБРОС... сброс с 1 в 0. Не видел ни одного контроллера со сбросом высоким уровнем.
Johnson писал(а):Обязательно ли запитывать 19 и 20 ноги дисплея (судя по ДШ это LED+ и LED-)?

подсветку лучше запитать, так будет большая вероятность увидеть изображение в случае недостаточной контрастности
Johnson писал(а):PS: Ещё заметил один момент. Когда на RES висит лог.0 - то нижний ряд пиеселей подсвечен не зависимо от контрастности... А если контрастность прибавить на максимум - то засвечиваются прямоугольники в шахматном порядке... Это нормально?

тут как-то непонятно... Вы сами себе противоречите: "...независимо от контрастности..." и сразу - "... если контрастность прибавить на максимум..."

При работе с данным дисплее проблем вообще не возникало. Не хочу повторять избитую фразу, но всё же - внимательно проверьте монтаж и программу по строкам. Я думаю проблема пустяковая. Удачи Вам!
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Да, ещё... А какая буковка стоит в конце названия дисплея?
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

s_black писал(а):Да, ещё... А какая буковка стоит в конце названия дисплея?

WG12232E-TML-NA

Про лапы подсветки... А нормально, что подсветка есть даже с незапитанными лапами? Подал на них напряжение - не изменилось абсолютно ни чего.

тут как-то непонятно... Вы сами себе противоречите: "...независимо от контрастности..." и сразу - "... если контрастность прибавить на максимум..."

Понимаю, что противоречу. Линия из нижних пикселей при лог0 на резете видна всегда. однако, при максимальной контрастности видны прямоугольники.


Программу уже перелопатил вдоль и поперек. Более того, я не готовую программу беру, я сам пытаюсь написать и проинициализировать его.
Монтаж аналогично.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Выводы подсветки могут (обычно так и есть) повторяться в общей гребёнке и быть выведены сбоку, т.е. дублированы.
Судя по реакции на сброс дисплей живой. Ещё раз смотрите правильность подключения выводов. Если всё верно, просто залейте готовый хекс, тот, что в статье, и пронаблюдайте картинку. Если её нет - стопудовая ошибка в подключении или фьюзы не настроены. Когда добьётесь картинки с готового хекса - экспериментируйте со своим исходником. Удачи!
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

Готовый хекс настроен на другой МК и другие порты...
Судя по ДШ выводы подсветки не дублированы, но она просто запитана на питание логики.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Если подсветка запитана от логики - порты МК сгорят ((( Смотрите ещё раз монтаж.
Если не получится у Вас запустить дисплей, напишите как Вы хотите подключить порты к дисплею и задайте тип МК - я приеду с работы, перепишу исходник и вышлю Вам хекс для проверки монтажа.
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

s_black писал(а):Если подсветка запитана от логики - порты МК сгорят ((( Смотрите ещё раз монтаж.
Если не получится у Вас запустить дисплей, напишите как Вы хотите подключить порты к дисплею и задайте тип МК - я приеду с работы, перепишу исходник и вышлю Вам хекс для проверки монтажа.

Имел в виду от питания логической части дисплея. По ДШ у него два входа питания - логика и лед.


Про то как подключил порты - предусмотрительно написал в первом посте темы...
Там же и код, как я пытаюсь инициализировать его, и другие замечания.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Отключите подсветку от логики. Может быть она у Вас садит напряжение контроллеров дисплея?
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение aleksandr-zh »

вот на днях писал, но для мега8 и 12864
ноги не долго переназначить и МК тоже
написано под BASCOM

http://bascomavr.3bb.ru/viewtopic.php?id=736#p7436

если надо - перепишу под Вас. Скажите ноги - что и куда подключено
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

aleksandr-zh писал(а):вот на днях писал, но для мега8 и 12864
ноги не долго переназначить и МК тоже
написано под BASCOM

http://bascomavr.3bb.ru/viewtopic.php?id=736#p7436

если надо - перепишу под Вас. Скажите ноги - что и куда подключено


Спасибо, конечно, но у Вас под драйвер ST7920, а в моем дисплее SED1520.
Ну а ноги в первом посте указаны...
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

s_black писал(а):Отключите подсветку от логики. Может быть она у Вас садит напряжение контроллеров дисплея?


Вы не поняли :)
Я подаю питание только на 2ю ногу дисплея, и подсветка сразу зажигается. А подключение питания к 19й ноге вообще ни какого эффекта не производит.

Вообще, если взять этот дисплей и подать питание на 1(-) и 2(+) ноги - он зажгет подсветку и отобразит прямоугольники... Видимо, это сделано для быстрой диагностики работоспособности....

В принципе, попробую подключить схему к более сильному источнику питания... Найти бы только в завалах 7805...
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Johnson писал(а):Я подаю питание только на 2ю ногу дисплея, и подсветка сразу зажигается.

Здаётся мне, что Вы путаете понятия.
Подсветка - это освещение отдельными специальными светодиодами подложки матрицы жидких кристаллов для их лучшего наблюдения в условиях недостаточной освещённости. ЖКИ не излучает свет, как светодиоды, а только меняет прозрачность сегментов, и, при слабой освещённости изображения почти не видно. А то что Вы называете подсветкой - это включение контроллера ЖКИ.
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

s_black писал(а):
Johnson писал(а):Я подаю питание только на 2ю ногу дисплея, и подсветка сразу зажигается.

Здаётся мне, что Вы путаете понятия.
Подсветка - это освещение отдельными специальными светодиодами подложки матрицы жидких кристаллов для их лучшего наблюдения в условиях недостаточной освещённости. ЖКИ не излучает свет, как светодиоды, а только меняет прозрачность сегментов, и, при слабой освещённости изображения почти не видно. А то что Вы называете подсветкой - это включение контроллера ЖКИ.

Извините, я не настолько новичок в электронике, чтоб путать поляризацию ЖКИ и диодную подсветку...
При подаче питания логики начинают светиться именно диоды подложки.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение s_black »

Может дисплей негодный? Фото макета можете выложить?
Johnson
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25
Контактная информация:

Re: ATmega8535 + LCD WG12232 = светящийся кирпич (?)

Сообщение Johnson »

Вот, RES=0
Нижний ряд пикселей подсвечен. Щас ещё заметил, что если удерживать резет в этом состоянии - по дисплею пробегают горизонтальные полосы в произвольном порядке. Выходы МК при этом не изменяются.
Если установить RES=0 полоса пропадает.
При попытках дальнейшей инициализации ни чего не происходит...
Вложения
Изображение 002.jpg
(61.42 КБ) 658 скачиваний
Ответить

Вернуться в «AVR»