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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 09.03.2013, 23:36  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

У меня на отладочной плате отдельно есть источник напряжения в 5В.

Цитата:
Поэтому если не подключен и не сконфигурирован вывод LCD R/W ваша схема будет виснуть при инициализации.
Очень похоже на правду. Вот только с моим знанием языка, не могу найти где в коде запряталась ошибка.
Реклама:
Fogtech вне форума  
Непрочитано 10.03.2013, 00:03  
shurenock
Частый гость
 
Регистрация: 01.04.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
shurenock на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

В заголовочном файле lcd.h прописаны выводы контроллера. кстати в вашем заголовочном файле есть строка:

#define LCD_CONTROLLER_KS0073 1 /**‹ Use 0 for HD44780 controller, 1 for KS0073 controller */

Где между прочем прописано, что используйте 0 для HD44780 контроллера, 1 для KS0073 контроллера.
У вас стоит 1, т.е. дальше система команд используется как для контроллера KS0073. Надо исправить на 0.

Далее конфигурируются параметры LCD в комментах дается перевод тремя восклицательными знаками !!! выделены параметры которые необходимо указать для своего дисплея
#define LCD_LINES 2 /**‹ число видимых строк на дисплее - 2 !!! */
#define LCD_DISP_LENGTH 16 /**‹ число символов в строке 16 !!! */
#define LCD_LINE_LENGTH 0x40 /**‹ длинна строки !!! - обычно в десятичном формате просто 40 ставится */
#define LCD_START_LINE1 0x00 /**‹ DDRAM адрес первого символа строки 1 !!! в моем дисплее был 0x80*/
#define LCD_START_LINE2 0x40 /**‹ DDRAM адрес первого символа строки 2 !!! в моем дисплее был 0xC0*/
#define LCD_START_LINE3 0x10 /**‹ DDRAM адрес первого символа строки 3 !!! */
#define LCD_START_LINE4 0x50 /**‹ DDRAM адрес первого символа строки 4 !!! */
#define LCD_WRAP_LINES 1 /**‹ 0: no wrap, 1: wrap at end of visibile line !!! Я у себя выставлял в 0*/

Адресацию для конкретного дисплея надо смотреть по полным техническим данным

для подсоединения выводов дисплея использовать определения:
#define LCD_DATA0_PORT PORTC /**‹ port for 4bit data bit 0 */
#define LCD_DATA0_PIN PIN3_bm /**‹ pin for 4bit data bit 0 */
#define LCD_DATA1_PORT PORTC /**‹ port for 4bit data bit 1 */
#define LCD_DATA1_PIN PIN4_bm /**‹ pin for 4bit data bit 1 */
#define LCD_DATA2_PORT PORTC /**‹ port for 4bit data bit 2 */
#define LCD_DATA2_PIN PIN5_bm /**‹ pin for 4bit data bit 2 */
#define LCD_DATA3_PORT PORTC /**‹ port for 4bit data bit 3 */
#define LCD_DATA3_PIN PIN6_bm /**‹ pin for 4bit data bit 3 */
#define LCD_RS_PORT PORTC /**‹ port for RS line */
#define LCD_RS_PIN PIN0_bm /**‹ pin for RS line */
#define LCD_RW_PORT PORTC /**‹ port for RW line */
#define LCD_RW_PIN PIN1_bm /**‹ pin for RW line */
#define LCD_E_PORT PORTC /**‹ port for Enable line */
#define LCD_E_PIN PIN2_bm /**‹ pin for Enable line */

В вашей схеме все необходимые выводы от LCD подключаются на порт C номера выводов порта прописаны в значении. Например PIN1_bm - порт С вывод 1 и т.д.

Когда все установите правильно должно заработать.

Кстати, на всякий случай, часто народ мучается с яркостью символов на дисплее. Вроде все правильно, а на экране ничего нет. Обычно после подачи питания дисплея до сброса яркость резистором выкручивается до состояния, когда одна строка начинает светиться где-то на четверть от максимума. Потом после появления символов яркость устанавливается начистовую.

Последний раз редактировалось shurenock; 10.03.2013 в 00:15. Причина: Добавление информации
shurenock вне форума  
Сказали "Спасибо" shurenock
Fogtech (12.03.2013)
Непрочитано 12.03.2013, 13:30  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Спасибо большое за Ваши старания помочь!

Я так понимаю Вы использовали эту же библиотеку для работы с LCD?

Цитата:
В заголовочном файле lcd.h прописаны выводы контроллера. кстати в вашем заголовочном файле есть строка:

#define LCD_CONTROLLER_KS0073 1 /**‹ Use 0 for HD44780 controller, 1 for KS0073 controller */

Где между прочем прописано, что используйте 0 для HD44780 контроллера, 1 для KS0073 контроллера.
У вас стоит 1, т.е. дальше система команд используется как для контроллера KS0073. Надо исправить на 0.
Изменял, результат отрицателен.

Цитата:
#define LCD_START_LINE1 0x00 /**‹ DDRAM адрес первого символа строки 1 !!! в моем дисплее был 0x80*/
#define LCD_START_LINE2 0x40 /**‹ DDRAM адрес первого символа строки 2 !!! в моем дисплее был 0xC0*/
Соответствует моему LCD.

Подсоединение дисплейя тоже соответственно lcd.h выполненно.

Контраст регулируется потенциометром.

На всякий случай прирепляю проект с исправлениями, а также инструкцию у дисплейю (у меня модель W162B-N3LW). Проект немного упрощен, вместо ожидания нажатия кнопок я установил задержку в 2 сек. (_delay_ms(2000)).

Код:
	lcd_init(LCD_DISP_ON);	/* initialize display, cursor off */
	lcd_clrscr();
	lcd_puts("01");
	_delay_ms(2000);
	lcd_clrscr();
	lcd_puts("02");
	_delay_ms(2000);
	lcd_clrscr();
	lcd_puts("03");
	_delay_ms(2000);
На дисплейе отображается только "01".
Вложения:
Тип файла: rar LCD9.1.rar (230.2 Кб, 50 просмотров)
Тип файла: pdf blueline-w.pdf (1.35 Мб, 83 просмотров)

Последний раз редактировалось Fogtech; 12.03.2013 в 13:37.
Fogtech вне форума  
Непрочитано 12.03.2013, 15:11  
shurenock
Частый гость
 
Регистрация: 01.04.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
shurenock на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Для начала можно немножко пошаманить

Был такой глюк с компилятором
замените
#include ‹util/delay.h›
на
#include ‹avr/delay.h›
У моей студии не нравилось это место почему-то из каталога Util заголовочный файл delay.h подключался а правильно работать не хотел.

Далее
Поменяйте очередность подключения заголовочных файлов:
#include ‹avr/io.h›
#include ‹avr/delay.h›
#include "lcd.h"
Был тоже один глюк. но это не факт что поможет.

Далее делаем простую вещь при инициализации дисплея
lcd_init(LCD_DISP_ON); //Инициализация LCD
lcd_clrscr(); //Очистка экрана
lcd_home(); //установка курсора на начало экрана

Если курсор на начало не устанавливать, то он может выводить в произвольную область данные.

Далее, очистка экрана не устанавливает курсор в начало строки и на 1 строку. Поэтому при каждом выводе данных необходимо делать

lcd_gotoxy(x,y); //x - позиция символа в строке (диапазон 0-15)
//y - позиция строки вывода (диапазон 0-1)
или
lcd_home(); //установка курсора на начало экрана

Далее используем более простую функцию
lcd_putc('1'); //Выводит просто символ

В итогу попробуем без пауз вывести последовательность

lcd_gotoxy(0,0);
lcd_putc('1'); //Выводит 1
lcd_putc('2'); //Выводит 2
lcd_gotoxy(0,1);
lcd_putc('3'); //Выводит 3
lcd_putc('4'); //Выводит 4
Должно получится:
12
34

Ежели получилось попробуем добавить паузу между символами
lcd_gotoxy(0,0);
lcd_putc('1'); //Выводит 1
_delay_ms(1000);
lcd_putc('2'); //Выводит 2
_delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putc('3'); //Выводит 3
_delay_ms(1000);
lcd_putc('4'); //Выводит 4

если не пошло - проблема с паузами

Еще все таки попробовать выставить значения
#define LCD_START_LINE1 0x80 /**‹ DDRAM address of first char of line 1 */
#define LCD_START_LINE2 0xC0 /**‹ DDRAM address of first char of line 2 */

связано с тем, что в библиотеке (моей версии) глюк был: команды контроллера требуют при записи в DDRAM соблюдать формат адреса: семь младших битов собственно адрес ячейки, а старший бит - признак записи в DDRAM.
т.е. 1 A6 A5 A4 A3 A2 A1 A0
Если первый бит 0 - то писаться будет в CGRAM.
В моей версии библиотеки эта 1 не была учтена в функциях записи.

Так что надо пробовать, если не получится будем копать дальше

P.S. Кстати надо именно последнее в первую очередь попробовать, я припоминаю, что у меня тоже в самом начале такой глюк был. Выводит только первые четыре символа правильно и дальше как в пропасть данные уходят.

Последний раз редактировалось shurenock; 12.03.2013 в 15:39. Причина: Дополнительная информация.
shurenock вне форума  
Сказали "Спасибо" shurenock
Fogtech (13.03.2013)
Непрочитано 13.03.2013, 20:10  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Здравствуйте! Провел все перечисленные выше манипуляции. Видимого результата пока нет.


Цитата:
Поменяйте очередность подключения заголовочных файлов:
#include ‹avr/io.h›
#include ‹avr/delay.h›
#include "lcd.h"
Был тоже один глюк. но это не факт что поможет.
Изменений в функциональности не наблюдал.

Цитата:
Далее делаем простую вещь при инициализации дисплея
lcd_init(LCD_DISP_ON); //Инициализация LCD
lcd_clrscr(); //Очистка экрана
lcd_home(); //установка курсора на начало экрана

Если курсор на начало не устанавливать, то он может выводить в произвольную область данные.

Далее, очистка экрана не устанавливает курсор в начало строки и на 1 строку. Поэтому при каждом выводе данных необходимо делать

lcd_gotoxy(x,y); //x - позиция символа в строке (диапазон 0-15)
//y - позиция строки вывода (диапазон 0-1)
или
lcd_home(); //установка курсора на начало экрана

Далее используем более простую функцию
lcd_putc('1'); //Выводит просто символ
Все работает как нужно - "1".

Цитата:
lcd_gotoxy(0,0);
lcd_putc('1'); //Выводит 1
lcd_putc('2'); //Выводит 2
lcd_gotoxy(0,1);
lcd_putc('3'); //Выводит 3
lcd_putc('4'); //Выводит 4
Должно получится:
12
34
Тоже получилось.

Затем, когда я сменил адреса строк на:
Цитата:
#define LCD_START_LINE1 0x80 /**‹ DDRAM address of first char of line 1
#define LCD_START_LINE2 0xC0 /**‹ DDRAM address of first char of line 2
у меня прекратила отображаться 2-я строка.

Код:
void main()
{
	lcd_init(LCD_DISP_ON);	/* initialize display, cursor off */

	lcd_clrscr(); //Очистка экрана
	lcd_home(); //установка курсора на начало экрана

	lcd_gotoxy(0,0);
	lcd_putc('1'); //Выводит 1
	_delay_ms(1000);
	lcd_putc('2'); //Выводит 2
	_delay_ms(1000);
	lcd_gotoxy(0,1);
	lcd_putc('3'); //Выводит 3
	_delay_ms(1000);
	lcd_putc('4'); //Выводит 4
}//main
В данном примере дисплей снова застывает на "1" (Адреса строк в библиотеки возвращены в первичное значение).

Так же я убрал дублированное значение частоты кварца #define F_CPU 2000000 с главного файла. Попробовал изменять значение #define lcd_e_delay() _delay_us(10). Ничего.

У меня складывается впечатление, что где-то внутри библиотеки во время портирования закралась ошибка. Увы автор порта не указал работает ли у него и с каким дисплейем данная библиотека. И что самое интересное, что это единственная библиотека из заявленных для Xmega, которая хоть что-то отображает .

Последний раз редактировалось Fogtech; 13.03.2013 в 20:17.
Fogtech вне форума  
Сказали "Спасибо" Fogtech
_Артём_ (13.03.2013)
Непрочитано 13.03.2013, 23:12  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Сообщение от Fogtech Посмотреть сообщение
И что самое интересное, что это единственная библиотека из заявленных для Xmega, которая хоть что-то отображает
Такую "библиотеку" за день-два написать можно...но нет - будем применять хрен знает что непонятно как работающее...
_Артём_ вне форума  
Непрочитано 14.03.2013, 10:28  
shurenock
Частый гость
 
Регистрация: 01.04.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
shurenock на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Да живая нормальная библиотека. У меня за пол дня пошла. Просто надо иметь определенный опыт в адаптации, настройке и тестировании таких вещей.
Тем более здесь похоже больше проблем не с библиотекой, а с функциями, реализующими паузу.
Просто надо сесть и разобраться, а на расстоянии трудно давать советы. Надо проект иметь на столе.
shurenock вне форума  
Непрочитано 14.03.2013, 18:37  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

в xmega + atmelstudio из коропки явно неправильно работают _delay_ , по крайней мере у меня
whoim вне форума  
Непрочитано 14.03.2013, 23:38  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Сообщение от whoim Посмотреть сообщение
в xmega + atmelstudio из коропки явно неправильно работают _delay_ , по крайней мере у меня
Напишите свою функцию delay, благо таймеров как грязи...
_Артём_ вне форума  
Непрочитано 15.03.2013, 00:34  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

_Артём_, так и делал))
whoim вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Библиотеки компонентов для KiCAD skywriter_ufa KiCAD 15 02.09.2020 16:39
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Linux-ваше мнение Tvenn Делимся опытом 6169 23.08.2015 08:57
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03
Библиотеки для термопринтера Zebra TLP 2824 Chudilo Производственное оборудование 1 24.11.2009 17:11


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


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