Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 05.07.2009, 00:14  
broocks
Частый гость
 
Аватар для broocks
 
Регистрация: 01.12.2007
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
broocks на пути к лучшему
По умолчанию проблема с LCD

Доброго времени суток всем!
Уважаемые гуру программирования МК подскажите плиз
есть LSD 16x2 MTC-S16204XRGHS (аналог MT-16S2H)
есть Atmega 644
написал прогу на с в оболочке WinAvr
залил а на экране "болт"
видно что инициализироватся начинает т.е. после включения питания загорается кубиками верхняя строка потом обе через время задержки при старте и всё дальше полнейший мороз
контролер работает как часики смотрел на анализаторе (записывал кодограммы) всё сходится с программой
Код:
#include ‹avr/io.h›

#include "mylsd.h"
#include "FPROEKT.h"

char str1[16] = "   **КНЯЗЬ**    ";
char str2[16] = "    привет      ";


int main (void)

{
  DDRA = 0xFF;//порт А все выход
  DDRB = 0x07;//порт В 0,1,2 выход остальные входы

  initlsd();
  
  //while(1)
  {
 
  Writestring(str1);
  Writestring(str2);
  }
}
второй блк програмы
Код:
#include ‹avr/io.h›
#include ‹avr/delay.h›
#include ‹stdio.h›

#include "FPROEKT.h"

#define A_1 PORTB |= 4
#define RW_1 PORTB |= 2
#define E_1  PORTB |= 1
#define A_0 PORTB &= 3
#define RW_0 PORTB &= 5
#define E_0  PORTB &= 6
#define date   	PORTA  




void WriteByte(unsigned char data) //запись 1-го байта по текущему адресу
{
  RW_0;
  E_1;
  date = (data);
  E_0;
  RW_1;
 _delay_loop_2(3000);
}



void Writestring(char str[16])  //запись строки по начальному адресу


{
   int i;
   A_1;
   for(i = 0; i ‹ 15; i++ ) 
   { 
   WriteByte(str[i]);
   }
   A_0;
}



void initlsd (void)

{ RW_1;
  E_0; 
  A_0;
  _delay_loop_2( 50000 ); 
  WriteByte(0x30);    //00110000
  WriteByte(0x30);    //00110000
  WriteByte(0x30);    //00110000
  WriteByte(0x3A);    //00111010
  WriteByte(0x08);    //00001000
  WriteByte(0x01);    //00000001
  WriteByte(0x07);    //00000111
  
}
Прикрепленный файл: 4697353.pdf
Реклама:
broocks вне форума  
Непрочитано 05.07.2009, 08:44  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

А в симуляторе проверяли ?
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 05.07.2009, 13:43  
broocks
Частый гость
 
Аватар для broocks
 
Регистрация: 01.12.2007
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
broocks на пути к лучшему
По умолчанию

нет не проверял
нет в базе такой LCD
broocks вне форума  
Непрочитано 05.07.2009, 14:17  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

Скорее всего внутри этого модуля LCD стоит контроллер, совместимый с HD44780. В доказательство этого есть эта страница: http://display.compel.ru/passive/pas...p?ser=MT-16S2H. Там контроллер S6B0066U, а это брат-близнец широкораспространенного и известного HD44780.

Если у вас HD44780-совместимый контроллер, то навскидку у вас неправильная функция инициализации - нехватает задержек между командами. Вот правильная функция для 4-битовой шины между LCD и микроконтроллером (задержки в миллисекундах):
Код:
            Thread.Sleep(16);
            WriteCommand(0x33);
            Thread.Sleep(5);
            WriteCommand(0x32);
            Thread.Sleep(1);
            WriteCommand(0x28);
            WriteCommand(0x08);
            WriteCommand(0x01);
            Thread.Sleep(10);
            WriteCommand(0x06);
            WriteCommand(0x0d);
            Thread.Sleep(1);
alexgap вне форума  
Непрочитано 05.07.2009, 14:28  
atlab
Прописка
 
Регистрация: 18.06.2006
Сообщений: 179
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
atlab на пути к лучшему
По умолчанию

Опередили
Только хотел написать про неправильную инициализацию
Аналогичный вопрос был в ветке про CCS, но там все оказалось тривиальнее - вывод RW был припаян на землю.

На всякий случай ссылка на ту ветку, там есть материалы по LCD:
https://kazus.ru/forum/topics/f_1232...lab+lcd#123279

этот и следующие посты
atlab вне форума  
Непрочитано 06.07.2009, 20:21  
broocks
Частый гость
 
Аватар для broocks
 
Регистрация: 01.12.2007
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
broocks на пути к лучшему
По умолчанию

с инициализацией разобрался забыл выдать команду на включения
Код:
void initlsd (void)

{ RW_1;
  E_0; 
  A_0;
  _delay_loop_2( 50000 ); 
  WriteByte(0x30);    //00110000
  WriteByte(0x30);    //00110000
  WriteByte(0x30);    //00110000
  WriteByte(0x38);    //00111000
  WriteByte(0x08);    //00001000
  WriteByte(0x01);    //00000001
  WriteByte(0x04);    //00000100
  WriteByte(0x0C);    //00001100
  WriteByte(0x3C);    //00111100  --забыл!!
теперь номогу прочитать из памяти
-вывожу первую строчку
-после считую из памяти
-далее вывожу во вторую строку
а он выдаёт - mmmmmmmmmmmmmmmm
Код:
char Rstr[16];
unsigned char ReadByte(void) //чтение 1 байта текущего адреса
{
  DDRA = 0x00;//порт А все вход
  _delay_loop_2(3000);
  E_1;
  _delay_loop_2(1);
  return date;
  E_0;
  _delay_loop_2(3000);
  DDRA = 0xFF;//порт А все выход
  _delay_loop_2(3000);
}
void Raedstring(char adr )
{
   int i;
   for(i = 0; i ‹ 16; i++ ) 
   {
   WriteByte(adr);
   A_1;
   _delay_loop_2(1);
   Rstr[i] = ReadByte;
   A_0;
   adr++;
   }
}
broocks вне форума  
Непрочитано 07.07.2009, 03:04  
atlab
Прописка
 
Регистрация: 18.06.2006
Сообщений: 179
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
atlab на пути к лучшему
По умолчанию

Почитай документацию, особенно в части соответствия адресов позицям индикатора.
atlab вне форума  
Непрочитано 07.07.2009, 23:49  
broocks
Частый гость
 
Аватар для broocks
 
Регистрация: 01.12.2007
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
broocks на пути к лучшему
По умолчанию

всё тема закрыта ошибки нашел
1 return воткнул внутри тела функции и она не завершившись выходила с пустым результатом
2 неправильно считывал

d = portA
а надо
d = pinA

привык в паскале та с этим проще

Код:
#include ‹avr/io.h›
#include ‹avr/delay.h›
#include ‹stdio.h›

#include "FPROEKT.h"

#define A_1 PORTB |= 4
#define RW_1 PORTB |= 2
#define E_1  PORTB |= 1
#define A_0 PORTB &= 3
#define RW_0 PORTB &= 5
#define E_0  PORTB &= 6
#define date   	PORTA  

//char Rstr[16];
char ReadByte() //чтение 1 байта текущего адреса
{
  char z;
  DDRA = 0x00;//порт А все вход
  //date = 0xFF;
  _delay_loop_2(10);
  RW_1;
  _delay_loop_2(1);
  E_1;
  _delay_loop_2(1);
  z = PINA;
  E_0; 
  _delay_loop_2(1);
  RW_0;
  _delay_loop_2(1);
  DDRA = 0xFF;//порт А все выход
  _delay_loop_2(10);
 return z;  
}

void WriteByte(char data) //запись 1-го байта по текущему адресу
{  
  date = (data);
  E_1;
  _delay_loop_2(1);
  E_0;
 _delay_loop_2(3000);
}



void Raedstring(char adr ) //чтение строки с начального адресу
{
   int i;
   for(i = 0; i ‹ 16; i++ ) 
   {
   WriteByte(adr);
   A_1;
   _delay_loop_2(1);
   Rstr[i] = ReadByte();
   A_0;
   adr++;
   }
}




void Writestring(char str[16],char adr)  //запись строки по начальному адресу


{
   int i;
   for(i = 0; i ‹ 16; i++ ) 
   { 
   WriteByte(adr);
   A_1;
   _delay_loop_2(1);
   WriteByte(str[i]);
   A_0;
   adr++;
   }
}

void initlsd (void)

{ 

  DDRA = 0xFF;//порт А все выход
  DDRB = 0x07;//порт В 0,1,2 выход остальные входыRW_0;
  E_0; 
  A_0;
  _delay_loop_2( 50000 ); 
  WriteByte(0x30);    //00110000
  WriteByte(0x30);    //00110000
  WriteByte(0x30);    //00110000
  WriteByte(0x38);    //00111000
  WriteByte(0x08);    //00001000
  WriteByte(0x01);    //00000001
  WriteByte(0x04);    //00000100
  WriteByte(0x0C);    //00001100
  WriteByte(0x3C);    //00111100
  
}
главная прога

Код:
#include ‹avr/io.h›

#include "mylsd.h"
#include "FPROEKT.h"

char str1[16] = "     privet     ";
char Rstr[16];

int main (void)

{  initlsd();
  
  //while(1)
  {
 
  Writestring(str1,0x80);
  Raedstring(0x80);
  Writestring(Rstr,0xC0);
  }
}
broocks вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nokia 3310 LCD Library Проблема с массивами spyx Микроконтроллеры, АЦП, память и т.д 1 07.09.2009 12:47
проблема с LCD 73m Микроконтроллеры, АЦП, память и т.д 4 19.06.2009 02:11
Проблема с подключением LCD к ATmega8515 Sereg Микроконтроллеры, АЦП, память и т.д 0 21.11.2008 17:07
Проблема с настройками LCD (HD44780) Balaganov Микроконтроллеры, АЦП, память и т.д 1 23.09.2005 09:19


Часовой пояс GMT +4, время: 21:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot