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

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

Сообщение s_black »

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

Сообщение Johnson »

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

Сообщение s_black »

Johnson писал(а): Запитана от +5в.
Многовато... А источник насколько мощный?
Контактная информация:
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25

Сообщение Johnson »

Где-то 200мА, от USB запитан.
Но, как я уже писал, если отключить 19 и 20 выводы - подсветка не пропадет.
А сам дисплей рассчитан на работу от +5в.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория

Сообщение s_black »

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

Сообщение Johnson »

В монтаже ошибок 100% нет. Проверял уже неоднократно... И напарник проверял.

В программе. Есть в программе ошибка, но я не знаю где. Делал инит и из ДШ, и из примеров разных...

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

Сообщение s_black »

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

Сообщение shurikss123 »

не помню откуда но тоже спер. написано для atmega168
Скачать WG12232SED1520.tgz
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25

Сообщение Johnson »

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

Сообщение Johnson »

Не выходит...
У тебя другой дисплей. У моего один вход стробоимпульса и два входа выбора чипа.
У тебя два стробоимпульса и нет выбора чипа.
Попробовал инит по аналогии сделать - тот же результат...
Начинаю уже думать, что дисплей мертв...

Пытаюсь после резета читать ReadStatus в цикле и отображать его биты диодами.
После резета загорается RESET, через секунду одновременно ADC и BUSY, потом DISP_OFF.
И так остаются гореть постоянно...
Ерунда какая-то... Бесит уже этот дисплей.
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Сообщение shurikss123 »

Johnson писал(а):Не выходит...
У тебя другой дисплей. У моего один вход стробоимпульса и два входа выбора чипа.
У тебя два стробоимпульса и нет выбора чипа.
Попробовал инит по аналогии сделать - тот же результат...
Начинаю уже думать, что дисплей мертв...

Пытаюсь после резета читать ReadStatus в цикле и отображать его биты диодами.
После резета загорается RESET, через секунду одновременно ADC и BUSY, потом DISP_OFF.
И так остаются гореть постоянно...
Ерунда какая-то... Бесит уже этот дисплей.
дисплеи абсолютно идентичны по распиновке разница только в размерах по этому подключи так как у меня написано только всесто е1-cs1, e2-cs2
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25

Сообщение Johnson »

Погоди... У тебя в коде Е1 и Е2 - это стробировка же.
А, судя по ДШ, у меня CS1 и CS2 - это выбор кристала, а стробировка это EN (/RD)...

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

Сообщение Johnson »

Вобщем, транслировал код в CVAVR.
Из функции LCD_WaitForStatus не выходит...
Спойлер

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

#include <mega8535.h>
#include <i2c.h>
#include <delay.h>
#include "main.h"
#include "encoder.c"


// I2C Bus functions
#asm
   .equ __i2c_port=0x15 ;PORTC
   .equ __sda_bit=1
   .equ __scl_bit=0
#endasm

    int tmp2 = 2;
    unsigned char lcd_x = 0, lcd_y = 0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void){
    unsigned char tmp1 = 0;
    PORTD.7= ~PORTD.7;
    
    ENC_PollEncoder();
    tmp1 = ENC_GetStateEncoder();
    if (tmp1 == RIGHT_SPIN) tmp2++;
    if (tmp1 == LEFT_SPIN)  tmp2--;
    if (tmp2 > 3) tmp2 = 0;
    if (tmp2 < 0) tmp2 = 3;
    
    TCNT0= 0xC2;
}

// Функция ждет, пока не пропадет указанный бит из статуса.
void LCD_WaitForStatus(unsigned char status, unsigned char controller){
	char tmp =0;
	DDRA = 0x00;
	PORTA = 0xff;
	A0=0;
	RW=1;
    
	do{
		if(controller == 0){
			CS1=1;
            NOP;NOP;
			tmp = PINA;
			CS1=0;
		}else{
			CS2=1;
			NOP;NOP;
			tmp = PINA;
			CS2=0;
		}
	}
	while(tmp & status);
	RW=0;
	PORTA = 0x00;
	DDRA = 0xFF;
}

void LCD_WriteCommand(unsigned char commandToWrite,unsigned char ctrl){
	LCD_WaitForStatus(0x80, ctrl);
	DDRA = 0xff;
	A0=0;
	RW=0;
	PORTA = commandToWrite;


	if(ctrl == 0){
		CS1=1;
		NOP;NOP;NOP;
		CS1=0;
	}else{
		CS2=1;
		NOP;NOP;NOP;
		CS2=0;
	}
	PORTA = 0x00;
}

void LCD_WriteData(unsigned char dataToWrite){
    LCD_WaitForStatus(0x80, 0);
    LCD_WaitForStatus(0x80, 1);
    A0=1;
    RW=0;
    PORTA = dataToWrite;
    if(lcd_x < 61){
        CS1=1;
        NOP;NOP;
        CS1=0;
    }else{
        CS2=1;
        NOP;NOP;
        CS2=0;
    }
    lcd_x++;
    if(lcd_x >= SCREEN_WIDTH)
    	lcd_x = 0;
}

void LCD_GoTo(unsigned char x,unsigned char y){
    lcd_x = x;
    lcd_y = y;

    if(x < (SCREEN_WIDTH/2)){
        LCD_WriteCommand(COLUMN_ADDRESS_SET | lcd_x, 0);
        LCD_WriteCommand(PAGE_ADDRESS_SET | lcd_y, 0);
        LCD_WriteCommand(COLUMN_ADDRESS_SET | 0, 1);
        LCD_WriteCommand(PAGE_ADDRESS_SET | lcd_y, 1);
    }else{
        LCD_WriteCommand(COLUMN_ADDRESS_SET | (lcd_x - (SCREEN_WIDTH/2)), 1);
        LCD_WriteCommand(PAGE_ADDRESS_SET | lcd_y, 1);
    }
}

void LCD_ClearScreen(void){
    char j, i;
    for(j = 0; j < 4; j++){
        LCD_GoTo(0, j);
        for(i = 0; i < SCREEN_WIDTH; i++){
	        LCD_WriteData(0);
	    }
    }
    LCD_GoTo(0, 0);
}



void main(void){
    char i;  
    
    DDRA=0b11111111;
    DDRB=0b00000000;
    DDRC=0b11111100;
    DDRD=0b10111100;   //0,1 - Encoder; 2,3,4,5 - LED; 6 - IrDA; 7 - LCD Clock;

    PORTA=0b00000000;
    PORTB=0b00010000;
    PORTC=0b10001100; // RES=1,CS1=1,CS2=1,EN=0,RW=1,A0=1  ||  SDA=0,SCL=0
    PORTD=0b01000011;

    TCCR0=0b00000011;
    TIMSK=0b00000001;
    ACSR =0b10000000;

    i2c_init();

    #asm("sei");
    
    RES=0;
    delay_ms(10);
    RES=1;
    delay_ms(10);    
    
    LCD_WriteCommand(RESET, 0);
    LCD_WriteCommand(RESET, 1);

    LCD_WaitForStatus(0x10, 0);

    LCD_WaitForStatus(0x10, 1);

    LCD_WriteCommand(DISPLAY_ON, 0);
    LCD_WriteCommand(DISPLAY_ON, 1);

    LCD_WriteCommand(DISPLAY_START_LINE | 0, 0);
    LCD_WriteCommand(DISPLAY_START_LINE | 0, 1);
    
    delay_ms(100);
    
    LCD_ClearScreen();
    
    
    for(i = 0; i < 5; i++) 
        LCD_WriteData(0xAA);
    LCD_WriteData(0x00);

    while (1){
        PORTD.2 = ~PORTD.2;
        delay_ms(200);    
    }

}
Посмотрите логику, может где напутал?..

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

Сообщение Johnson »

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

Сообщение s_black »

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

Сообщение Johnson »

Да я на работе сижу... Не всегда есть время.
Щас вот только перепаял соединения все.
Напишу демо-код - обязательно выложу.

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

Сообщение shurikss123 »

Johnson писал(а):Да я на работе сижу... Не всегда есть время.
Щас вот только перепаял соединения все.
Напишу демо-код - обязательно выложу.

PS: да, дисплей завелся, инициализацию проходит и уже отрисовывает произвольные данные...
Осталось разобраться с управлением и оформить код...
Пыгодь, ты че дисплей к верх нагами включал??
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт мар 05, 2009 08:15:25

Сообщение Johnson »

shurikss123 писал(а):
Johnson писал(а):Да я на работе сижу... Не всегда есть время.
Щас вот только перепаял соединения все.
Напишу демо-код - обязательно выложу.

PS: да, дисплей завелся, инициализацию проходит и уже отрисовывает произвольные данные...
Осталось разобраться с управлением и оформить код...
Пыгодь, ты че дисплей к верх нагами включал??
Ага :)

Разработчики по-умолчанию посчитали, что пользователь будет идиотом, и прасположили выводы питания так, что включение наоборот не вызовет повреждений...
Контактная информация:
Ответить

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