реклама на сайте
подробности

 
 
> LCD и IAR, Не могу заставить работать
ILYCHOFF
сообщение May 30 2006, 05:52
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Раньше писал на CV перешел на IAR. Нашел исходник для работы с LCD HD44780, написан был для ICC, переделал под IAR не могу никак заставить работать. Сначала думал что задержки не работают, они были организованы через for, заменил на стандартные, все-равно никакого эффекта, Тестовая плата и индикатор рабочие, старые прошивки сделанные в CV работают нормально. Проц Мега16, кварц 8 МГц, R/W у индикатора висит на земле, шина 4 бит. индикатор WinStar 1602A

Помогите разобраться в чем причина.

Исходники прилагаются...

Сообщение отредактировал ILYCHOFF - May 30 2006, 06:07
Прикрепленные файлы
Прикрепленный файл  Text_LCD.rar ( 1.54 килобайт ) Кол-во скачиваний: 70
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aleksey_g
сообщение May 30 2006, 07:18
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



Цитата(ILYCHOFF @ May 30 2006, 08:52) *
Помогите разобраться в чем причина.


Попробуй поковырять это. 4-бит. 1Х16 какой-то самсунговский индикатор, с которым противно было работать. одна строка, а вывод как в две по 8 но не рядом стоящие.
ИАР. Работает точно. Это просто упражнения для попробовать. Так что оптимизировать-непаханое поле.
Прикрепленный файл  m48.rar ( 3.31 килобайт ) Кол-во скачиваний: 210
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение May 30 2006, 07:35
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Цитата(aleksey_g @ May 30 2006, 11:18) *
Цитата(ILYCHOFF @ May 30 2006, 08:52) *

Помогите разобраться в чем причина.


Попробуй поковырять это. 4-бит. 1Х16 какой-то самсунговский индикатор, с которым противно было работать. одна строка, а вывод как в две по 8 но не рядом стоящие.
ИАР. Работает точно. Это просто упражнения для попробовать. Так что оптимизировать-непаханое поле.
Прикрепленный файл  m48.rar ( 3.31 килобайт ) Кол-во скачиваний: 210




Спасибо посмотрю....

Вот переписал инициализацию так

void lcd_init(void)
{
delay_ms(50);
LCDDDR = 0xF5;
LCDPORT = 0x00;
delay_us(100);
LCDPORT = (DB5 + DB4);
LCDPORT |= E;
LCDPORT &= ~E;
delay_us(100);
LCDPORT |= E;
LCDPORT &= ~E;
delay_us(100);
LCDPORT |= E;
LCDPORT &= ~E;
delay_us(100);
LCDPORT = DB5;
LCDPORT |= E;
LCDPORT &= ~E;
delay_us(40);
lcd_write_byte(CTRL,0x28);
lcd_write_byte(CTRL,0x0c);
lcd_write_byte(CTRL,0x01);
delay_us(500);
lcd_write_byte(CTRL,0x06);
delay_us(50);
}


все равно не работает...




Цитата(A_Bolshev @ May 30 2006, 11:17) *
Цитата(ILYCHOFF @ May 30 2006, 09:52) *

Раньше писал на CV перешел на IAR.

Нашел исходник для работы с LCD HD44780, написан был для ICC, переделал под IAR не могу никак заставить работать.

Помогите разобраться в чем причина.



попробуйте симулировать в VMLAB - там есть остановка по неверным командам на LCD.



Вам не кажется, что уже достаточно навязывать всем этот курс. Я помощи просил, а не вашу "щепотку си"...
Go to the top of the page
 
+Quote Post
andrvisht
сообщение May 30 2006, 08:14
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



а если так ?
Код
void lcd_init(void)
    {
    delay_ms(50);
    LCDDDR = 0xF5;
    LCDPORT = (DB5 + DB4);
    delay_us(100);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_ms(5);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_us(100);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_us(100);
    LCDPORT = DB5;
    delay_us(100);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_us(40);
    lcd_write_byte(CTRL,0x28);
    lcd_write_byte(CTRL,0x0c);
    lcd_write_byte(CTRL,0x01);
    delay_us(500);
    lcd_write_byte(CTRL,0x06);
    delay_us(50);
    }
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение May 30 2006, 08:25
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Цитата(&-rey @ May 30 2006, 12:14) *
а если так ?
Код
void lcd_init(void)
    {
    delay_ms(50);
    LCDDDR = 0xF5;
    LCDPORT = (DB5 + DB4);
    delay_us(100);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_ms(5);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_us(100);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_us(100);
    LCDPORT = DB5;
    delay_us(100);
    LCDPORT |= E;
    delay_us(450);
    LCDPORT &= ~E;
    delay_us(40);
    lcd_write_byte(CTRL,0x28);
    lcd_write_byte(CTRL,0x0c);
    lcd_write_byte(CTRL,0x01);
    delay_us(500);
    lcd_write_byte(CTRL,0x06);
    delay_us(50);
    }


Все равно не работает, может у кого есть исходник рабочий для 16*2, просто сравнить, и задержки посмотреть уже не знаю на что думать...

help.gif
Go to the top of the page
 
+Quote Post
otrog
сообщение May 30 2006, 11:37
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(ILYCHOFF @ May 30 2006, 12:25) *
Все равно не работает, может у кого есть исходник рабочий для 16*2, просто сравнить, и задержки посмотреть уже не знаю на что думать...

help.gif
Попробуйте это:
Код
#include <avr_macros.h>
#include "delay.h"

#define EN      PORTD
#define EN_Bit  7
#define RS      PORTD
#define RS_Bit  5

#define D      PORTB

#define lcd_delay 15

// Запись в lcd: mode=0 команда, mode=1 данные
void lcd_write(unsigned char data, unsigned char mode)
{
  if (mode) {SETBIT(RS,RS_Bit);} else {CLEARBIT(RS,RS_Bit);}
  SETBIT(EN,EN_Bit);
  D = (D & 0xF0) | (data >> 4); // старший ниббл
  delay_us(lcd_delay);
  CLEARBIT(EN,EN_Bit);
  delay_us(lcd_delay);
  D = (D & 0xF0) | (data & 0x0F); // младший ниббл
  SETBIT(EN,EN_Bit);
  delay_us(lcd_delay);
  CLEARBIT(EN,EN_Bit);
  delay_us(lcd_delay*5);
}

void lcd_init(void)
{
  lcd_write(0x33, 0); delay_ms(5);
  lcd_write(0x32, 0); lcd_write(0x28, 0); // 4 бит, 2 строки
  lcd_write(0x08, 0); // полное выключение дисплея
  lcd_write(0x01, 0); delay_ms(5); // очистка дисплея
  lcd_write(0x06, 0); // сдвиг курсора вправо
  lcd_write(0x0C, 0); // включение дисплея, мигающий курсор
  
//  InitCGram();
}
Работает так например:
Код
lcd_init();
lcd_write('Z', 1);

ПС В lcd_init комментарии некорректны.
ППС А за delay.h большое спасибо. Еще бы найти что-нибудь чтобы можно было в IAR-е писать PORTD.3 = 1;


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ILYCHOFF   LCD и IAR   May 30 2006, 05:52
- - MMP   Инициализация вроде так должна быть: задержка 15 м...   May 30 2006, 06:53
|- - ILYCHOFF   Цитата(MMP @ May 30 2006, 10:53) Инициали...   May 30 2006, 07:09
- - &-rey   согласен с MMP насчет DB4 DB5 вот только насчет за...   May 30 2006, 07:11
|- - &-rey   Цитата(ILYCHOFF @ May 30 2006, 11:25) Все...   May 30 2006, 08:41
||- - ILYCHOFF   Цитата(&-rey @ May 30 2006, 12:4...   May 30 2006, 08:47
||- - &-rey   Цитата(ILYCHOFF @ May 30 2006, 11:47) По ...   May 30 2006, 08:56
- - BVU   Цитата(ILYCHOFF @ May 30 2006, 09:52) Ран...   May 30 2006, 07:37
- - ILYCHOFF   Задержки реализованы следующим образом #ifndef D...   May 30 2006, 07:46
- - BVU   Посмотрите здесь, может дело прояснится: http://el...   May 30 2006, 09:04
- - defunct   Цитата(ILYCHOFF @ May 30 2006, 11:25) Все...   May 30 2006, 11:11
- - ILYCHOFF   А что вам мешает писать PORTB_Bit1=1; ~PORTB_Bit1...   May 30 2006, 11:54
- - otrog   То что нельзя записать так: КодADCSRA.ADEN = 1; А ...   May 30 2006, 12:09
- - prottoss   Привет всем! Не вдавался в подробности обс...   May 30 2006, 14:16
- - WHALE   А ведь вам A_Bolshev ,нисмотря не на что,неплохой ...   May 30 2006, 18:07
- - ILYCHOFF   Всем спасибо за ответы разобрался все заработало к...   Jun 1 2006, 06:42


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 00:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.02639 секунд с 7
ELECTRONIX ©2004-2016