roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 13:47

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: LCD+AVR
СообщениеДобавлено: 06 янв 2008, 00:49 
Не в сети
Аватара пользователя

Зарегистрирован: 10 окт 2007, 15:11
Сообщения: 27
Откуда: Холодный такой Мурманск
Привет всем! У меня есть экранчик МТ16S2D от МЭЛТа, но я не могу заставить его работать, хотя в протеусе все проходит на ура. На экране - ничего. Все припаяно правилоно, на 100%. проверял. Напряжение = 5В. Дело точно не в контрастности, т.к. припаян подстроичник по схеме с мануала. ПЛЗ, подскажите. Как мне кажется проблема в инициализации.
У кого есть опыт работы с МЭЛТами, скиньте примерчики простые.

Вот отрывок кода:

Инициализация как по мануалу...
Код:
com(48);    //110000
com(48);    //110000
com(48);    //110000
com(56);    //111000
com(8);      //001000
com(01);    //000001
com(06);   //000110
com(15);   //001111

Вывожу данные...
Код:
dat('2');
dat('0');
dat('0');
dat('8'); 
dat(' ');



Описание процедур...

Код:
com(unsigned char data) // команды


PORTC.7=0; //a
PORTC.6=0; //r/w
PORTC.0=0; //e
PORTA=data;
PORTC.0=1;
delay_ms(100);
PORTC.0=0;
   }   

dat(unsigned char data) //данные
{

PORTC.7=1; //a
PORTC.6=0; //r/w
PORTC.0=0; //e
PORTA=data;
PORTC.0=1;
delay_ms(100);
PORTC.0=0;


Добавлено спустя 2 минуты 55 секунд:
Да, еще:

- интерфейс 8 бит
- я работаю через CodeVisionAVR, я знаю, что в нем есть библиотеки работы с ЖКИ, но хочется сделать все самому.
- ATMEGA32


Последний раз редактировалось Vooon 06 янв 2008, 01:44, всего редактировалось 1 раз.
CODE!!! #$@*&!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 06 янв 2008, 02:11 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
1. а точно дисплей рабочий?
когда на него подаёшь напряжение он должен показывать квадратики

2. инициализация и вывод символов для этого дисплея есть гдето на сайте фирмы производителя МЭЛТ или гдето там на форуме

3. попробуй прочитать что у тебя на дисплее
тоесть чтонить отобрази а потом прочитай из дисплея и сравни совпадает ли


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 06 янв 2008, 11:01 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Votmax писал(а):
я работаю через CodeVisionAVR, я знаю, что в нем есть библиотеки работы с ЖКИ, но хочется сделать все самому.
- ATMEGA32


Сделай как в CVAVR или у меня http://www.avr123.nm.ru/z5.htm
и убедись что пара MK + LCD работает.

А потом сам городи наздоровье.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 06 янв 2008, 11:41 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
А, что в МЭЛТ-овских дисплеях запись по нарастающему фронту сигнала е производиться? Обычно enable устанавливается в 1, устанавливаются нужные сигналы на линии данных, и сигнал enable для записи устанавливается в 0. У Вас наоборот. :(

_________________
I live My life!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: LCD+AVR
СообщениеДобавлено: 06 янв 2008, 14:17 
Не в сети
Аватара пользователя

Зарегистрирован: 10 окт 2007, 15:11
Сообщения: 27
Откуда: Холодный такой Мурманск
SSG писал(а):
А, что в МЭЛТ-овских дисплеях запись по нарастающему фронту сигнала е производиться? Обычно enable устанавливается в 1, устанавливаются нужные сигналы на линии данных, и сигнал enable для записи устанавливается в 0. У Вас наоборот. :(


Да, правильно, это я ошибся, когда сюда вставлял, просто я уже много вариантов испробовал, и так единицы и эдак.
Что самое интересное: в мануале МЭЛТА написано, что данные записываются по спаду сигнала е, а в мануале контроллера ЖКИ МЭЛТа, что данные записываются, в течении времени, когда на е выставлена единица.

Myp писал(а):
1. а точно дисплей рабочий?
когда на него подаёшь напряжение он должен показывать квадратики

2. инициализация и вывод символов для этого дисплея есть гдето на сайте фирмы производителя МЭЛТ или гдето там на форуме

3. попробуй прочитать что у тебя на дисплее

тоесть чтонить отобрази а потом прочитай из дисплея и сравни совпадает ли



Когда подаю питание 5.5В видны на экране квадратики, я их контрастностью подкручиваю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 06 янв 2008, 15:26 
Любая операция с любыми внешними или с внутренними устройствами происходит по фронту или по спаду "клока", "защелки".
5.5В. предельно допустимое напряжение - убавь.
Т.к. квадратики появились - переходи к инициализации со всеми задержками и проверками и НЕ проверками флагов:
0x30,// 6 8-ми проводный интерфейс
0x01,// 1 очистка экрана, счетчик на 0
0x0D,// 4 отображение включено
0x06,// 5 увеличение счётчика на 1
, как только её пройдёшь - экран очистится.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 янв 2008, 18:10 
Не в сети
Аватара пользователя

Зарегистрирован: 10 окт 2007, 15:11
Сообщения: 27
Откуда: Холодный такой Мурманск
Сделал алгоритм с проверкой флагов. В общем, после инициализации квадратики остаются. Я записываю данные(2008 year). Ставлю курсор в начальное положение и считываю данные с ячейки, выдает FF, что по таблице соответствует заполненному квадратику? Ни кто не знает в чем дело? Я уже переписал процедуры для данных и команд в соответствии с рекомендуемыми под однотипные ЖКИ.


Код:
com(unsigned char data)

PORTC.7=0;
PORTC.6=0;
PORTA=data;
  PORTC.0=1;
delay_ms(1);
  PORTC.0=0;
   }   

dat(unsigned char data)
{
  PORTC.7=1;
PORTC.6=0;
PORTA=data;
  PORTC.0=1;
delay_ms(1);
  PORTC.0=0;
}


Добавлено спустя 2 часа 2 минуты 46 секунд:
Новые данные: Я поставил большие выдержки времени между командами, чтобы посмотреть, что выполняется. Получается, что во время инициализации видно очистку экрана (по коду 01), т.е. экран на один такт очищается от заполненных квадратиков, а с наступлением следующей команды (06-выбор сдвига экрана) все квадратики экрана снова становятся залитыми. В чем дело?

Срабатывание очистки экрана говорит о работоспособности процедур записи команд и данных. В общем фигня какая-то.


Последний раз редактировалось Digit 16 янв 2008, 11:47, всего редактировалось 1 раз.
Есть же тег CODE!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 15 янв 2008, 18:42 
Во-первых:
Запись данных производится после "Разрешения обращения к модулю (а также строб данных)"
Во-вторых:
Громадная задержка в твоём случае не нужна - ты же работаешь не на 16МГц???
И в третьих:
А порт "А" как настроен в момент чтения?
Код:
com(unsigned char data)
{
PORTC.7=0;
PORTC.6=0;
PORTC.0=1;
PORTA=data;
PORTC.0=0;
}
dat(unsigned char data)
{
PORTC.7=1;
PORTC.6=0;
PORTC.0=1;
PORTA=data;
PORTC.0=0;
}

И вот так по-моему будет лучше:
Код:
void write_44780 (unsigned char *p, int len, char command, char flag)
       {
      while (len--)
             {
           switch (command)
                  {
                case 0:
                     RS0;             // адрес регистра комманд
                    break;
                case 1:
                     RS1;            // адрес регистра данных
                    break;
                }
                   RW0;                  // операция записи
                  E1;               // строб
                  PORTD = *p;
                  E0;
                  PORTD = 0xff;
                  p++;
                if (flag==0)
                   {
                   read_44780 ();
                     while (Flag & (1 << BIT(7)))
                           {
                              read_44780 ();
                          }
                  }
         }
      }


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 янв 2008, 20:41 
Не в сети
Аватара пользователя

Зарегистрирован: 10 окт 2007, 15:11
Сообщения: 27
Откуда: Холодный такой Мурманск
За пример большое спасибо! Вроде я делаю все также, только по-корявому и ламерски, но это я пока учусь. :-)

Большие задержки я поставил между процедурами записи данных/команд, а не во время их исполнения. Я выяснил, что контроллер ЖКИ верно проходит инициализацию. Т.е. по ее завершению экран очищается. А как только начинается запись данных, так все ячейки опять полностью залиты, это подтверждается чтением из ЖКИ - FF.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 15 янв 2008, 20:55 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
Вот страшный пример проекта :)


Вложения:
LCD_Test.zip [33.04 КиБ]
Скачиваний: 43

_________________
I live My life!
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 15 янв 2008, 21:05 
Да ни фига не правильно.
Если бы было правильно, то при записи в LCD одного байта (любого, кроме значения соответствующего этому чёрному прямоугольнику из соответствующей таблицы встроенного знакогенератора) на экране появилось бы что-то, причём в ОДНОЙ ЯЧЕЙКЕ, а не по всему полю.
Положи сюда весь код!!!


Вернуться к началу
  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 15 янв 2008, 22:36 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
а у тя с питанием всё ОК
мб он тупо ресетится постоянно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 янв 2008, 11:41 
Не в сети
Аватара пользователя

Зарегистрирован: 10 окт 2007, 15:11
Сообщения: 27
Откуда: Холодный такой Мурманск
Вот код, он правда примитивный и без проверки флагов, но это я специально, чтоб была только суть, а еще я просто недавно перешел на СИ.

Код:
#include <mega32.h>
#include <stdio.h>
#include <delay.h>

com(unsigned char data);  //процедура записи команд
date(unsigned char data); //процедура записи данных
 
void main(void)
{

DDRA=0xff;               //настройка портов
PORTA=0x00;
DDRB=0xff;
PORTB=0x00;
DDRC=0xff;
PORTC=0x00;
DDRD=0xff;               
PORTD=0x00;
       
     delay_ms(10);
           
    com(0b110000);  //инициализация по мануалу.
    com(0b110000);
    com(0b110000);
    com(0b111000);
    com(0b1000);
    com(0b0001);
    com(0b110);
   
     com(0b1100);  //включение экрана
     
         
       
     date('2');
     date('0');
     date('0');
     date('8'); 
     date(' ');
     date('y');
     date('e');
     date('a');
     date('r');
     date('!');
     
     
         
while (1)
      {   
          };
};

com(unsigned char data)

PORTC.7=0;
PORTC.6=0;
PORTA=data;
PORTC.0=1;
delay_ms(1);
PORTC.0=0;
delay_ms(1);
  PORTA=0x00;
}   

date(unsigned char data)
{
PORTC.7=1;
PORTC.6=0;
PORTA=data;
PORTC.0=1;
delay_ms(1);
PORTC.0=0;
delay_ms(1);
  PORTA=0x00;
      }


Последний раз редактировалось Digit 16 янв 2008, 11:48, всего редактировалось 1 раз.
БЛИН!!! ЕСТЬ ТЕГ "КОД" НА ФОРУМЕ!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 16 янв 2008, 12:15 
Значит так, при инициализации должны быть выдержены задержки.
Зделай так:
Код:
static unsigned char lcd_init_8[1]=
{
0x30,// 8-ми проводный интерфейс
};
static unsigned char lcd_in[3]=
{
0x28,
0x0C,
0x06,
};

void init_44780 ()
{
delay_ms (20);
write_44780 (lcd_init_8, sizeof(lcd_init_8), comm, no_check_flag);
delay_ms (40);
write_44780 (lcd_init_8, sizeof(lcd_init_8), comm, no_check_flag);
delay_ms (40);
write_44780 (lcd_init_8, sizeof(lcd_init_8), comm, no_check_flag);
delay_ms (40);
write_44780 (lcd_in, sizeof(lcd_in), comm, check_flag);
}

Далее, в место твоего gate('2') и т.д. попробуй gate(0x32)
И ещё, не многовато точек с запятой?:
Код:
while (1)
      {   
          };
};

Правильней будет так:
Код:
main ()
{
...
...
while (1)
      {   
       ;;
      }
...
...
}


Вернуться к началу
  
 
 Заголовок сообщения: Re: LCD+AVR
СообщениеДобавлено: 17 янв 2008, 12:04 
Не в сети
Аватара пользователя

Зарегистрирован: 10 окт 2007, 15:11
Сообщения: 27
Откуда: Холодный такой Мурманск
Ура! Получилось! Проблема была не в коде, а в кривых руках, криво припаявших один проводок! Только увидел - сразу исправил - включил - все заработало!!! Ура!

Уже успел написать такие процедуры как очистка экрана, gotoxy, вывод строки целиком. Вот только проблема новая появилась:
-Как вывести число?

МОИ ДЕЙСТВИЯ:

1) Нашел пример в CodeVisionAVR что-то вроде

Код:
char *ptr_to_ram="This string is placed in SRAM";


или

Код:
unsigned char string[];
string="Hello";


Но у меня не работает, говорит, что тип flash unsigned char не соответствует типу unsigned char. Я стал использовать тип flash unsigned char и хорошо так написал процедуру вывода строки.


2) Есть стандартные процедуры типа

Код:
itoa(int n, char *str);[


- переводит число в строку типа char, но у меня же flesh а как перевести char в flesh char или flesh unsigned char ?

3) В общем какой-то тупик!

Подскажите, кто как делает?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO