Страница 2 из 2

Добавлено: Вт июл 10, 2007 09:14:30
Артур
Барсик Спасибо погляжу, но вряд ли пойму там ведь все крутые! Терминами выражаются :)

Добавлено: Ср июл 11, 2007 15:18:08
moLCHec
Артур строб на то и строб чтоб быть преременным. Вообще на сколько я помню в статье описано как что работает.

Добавлено: Чт авг 02, 2007 09:28:06
VIY
Вот ссылочка на замечательный документ... Сам разбирался по статье, о каторой топик, с трудом, но разобрался...

http://www.atmel.ru/Articles/Atmel17.htm

Эхх, жаль я сразу не попал туда там всё предельно разжовано, и по полачкам разложено, что и как работает у дисьплея день сэкономил-бы! :)

Добавлено: Чт авг 02, 2007 16:05:37
Pa5ha
Кстати, насчет строба. Я когда отлаживал и смотрел на сигналы светодиодные на шинах, то строб шел секунд через 5. И то оно все инициализировалось! (хотя куда оно делось бы)

Добавлено: Вс авг 05, 2007 12:09:32
CiSi
Здраствуйте знатоки.
Подскажите пожалуйсто как включить этот (16S2D) дисплей, доку на него читал , но там больно уж всё кратко. Пишу на С и юзаю CVAVR. Паял всё по схеме, вот только мк у меня Tiny2313 и питание у меня 3,6В. Помогите с исходником.

Добавлено: Вс авг 05, 2007 20:41:40
CiSi
Извините за тупые вопросы.

Добавлено: Ср окт 03, 2007 08:38:32
CiSi
Переделал схему, сделал на меге16, прогу написал (она работает-по крайней мере в протеусе)

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

#include <MEGA16>
#include<delay>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTA
#endasm
#include <lcd>

void main(void)
{

PORTD=0xFF;
DDRD=0xFF;

// LCD module initialization
lcd_init(16);
lcd_putsf("Initializing...");
lcd_putchar(0);

PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);
while (1);

}
Но на дисплее всё равно нечего не появляется, хотя во время инициализации экран мерцает.
Что не так?

Добавлено: Вс мар 09, 2008 08:37:37
Степаныч
Добрый день! Господа можете помочь, в общем есть ATmega32 и дисплей Winstar WH1602B!Соединены они точно по схеме из данной статьи(тоесть к порту Д только естественно на Меге)!Что нужно менять в прошивке если все это на Winstare и Меге32 причем желательно чтоб мега работала на 1 Мгц внутреннего RC. Ну понятно если на мега пашет на 1 Мгц то нужно поменять задержки для перехода в 4 битный режим(тоесть уменьшить их в 10 раз т.к. частота работы протца не 10Мгц а в 10 раз меньше).Это я понял!А вот что делать с контроллером??Если просто поменять в тексте программы заголовочные файлы(at2313 def на m32def) то компилятор выдает что то типо этого : 'Constant 0x85f out of range (0x00-0xFF)
и вторая строка: ldi Temp,RamEnd !!!
Как я понимаю это указывает что константа RamEnd каким то образом не может испоьзоваться(толи из за стека то что у всех мег есть старший и младший SPH и SPL а у at90s2313 и attiny2313 только SPL ). Подскажите плиз!!!!И с LCD не все понятно в данной теме описано что принцип работы с Winstar немного отличается от МЕЛТовских дисплеев только я так и не понял чем!!!!Напишите пожалуйста а то так охота сделать устройство а опыта работы с LCD нет!!!!

Re: Объяснение в любви. Подключаем LCD к микроконтроллеру по

Добавлено: Ср июн 24, 2015 11:28:27
wellcom
Привет! Валерьянка закончилась, бьюсь уже второй день и никак не могу проинициализировать 16*2 дисплей в 4-х битном режиме. Хочу сделать свою библиотеку для CVAVR.
вот код

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

void lcd_init()
{
    PORTE &= (~ (1<<3));
    delay_ms(15); //по даташиту, внутрение процедуры LCD
    lcd_write(0x30, COMAND); //8 bit
    delay_ms(6);
    lcd_write(0x30, COMAND);
    delay_ms(1);
    lcd_write(0x30, COMAND);
    delay_ms(1);   
    lcd_write(0x30, COMAND);  // 
    delay_us(50); 
     lcd_write(0x20, COMAND);  //4 bit
    delay_ms(50);                           
    lcd_write(0x28, COMAND);  //4 bit 2 str, 5x7
    delay_ms(50); 
    lcd_write(0x80, COMAND);  //adrr DRAM -> 0
    delay_ms(50); 
    lcd_write(0x08, COMAND); //выкл дисплей
    delay_us(50);       
    lcd_write(0x06, COMAND); //сдвигать курсор вправо
    delay_ms(1);
     lcd_write(0x02, COMAND); // курсор  в нулевую позицию
    delay_ms(2);   
    lcd_write(0x0E, COMAND); //вкл дисплей и курсор
    delay_ms(5);
        lcd_write(0x01, COMAND); //очистить
    delay_ms(2); 
}

void lcd_write(unsigned char data, unsigned char mode)
{
    if (mode)	//выбор режима 1-data 0-comand
     {
       PORTE |= (1<<3);
     }
     else 
     {
       PORTE &= (~ (1<<3));
     };
    SetBit (PORTE,2); // E=1     
    delay_us(5); 
    PORTD = ((PIND & 0x0F) | (data & 0xF0)); //обнул 4-7 разр   старший нибл  и пишем  в 4-7 данные 
    delay_us(5); 
    ClearBit (PORTE,2); //E=0 
    delay_us(60);        //что бы лсд успел переварить инфо
    SetBit (PORTE,2); //E=1        
    delay_us(5);  
    PORTD = ((PIND & 0x0F) | (data <<4));    //младший нибл    
    delay_us(5); 
    ClearBit (PORTE,2); //E=0
    
    //PORTD |= 0xF0; //1 на  D4-D7 согласно описан
}
В протеусе дисплей не оживает. Не могу понять что делаю не так, перечитал и перепробовал разные варианты из сети, все равно ничего не выходит. Если использовать внутреннюю библиотеку CVAVR все работает на ура. Пробовал и задержки разные и очередность команд менял и все без толку. Инициализация проходит без ошибок в протеусе, а при попытке вывести что нить на екран, после нескольких символов пишет что контроллер дисплея занят. Частоты тактов контроллера в протеусе и проекте одинаковы. Что делаю не так?