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

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

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

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

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

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

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

 
Опции темы
Непрочитано 02.04.2010, 14:07  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Библиотеки для Xmega под WinAVR

Предлагаю выкладывать библиотеки под Xmega...кому не жалко

Библиотека для работы с символьными дисплеями на базе контроллеров HD44780 и KS0073, за основу была взята библиотека для atmega от Peter Fleury. Реализована поддержка контроллеров Xmega в 4-х битном режиме, добавлен символ уровня заряда батареи (lcd_putc(batn) n=0-5) и массив для автоматической перекодировки символов кириллицы.

Пример работы с библиотекой:

#include ‹avr/io.h›
#include ‹util/delay.h›
#include "clksys_driver.h"
#include "lcd.h"

int main(void)
{

CLKSYS_PLL_Config( OSC_PLLSRC_RC2M_gc, 16 );
CLKSYS_Enable( OSC_PLLEN_bm );
do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 ); /* Wait for PLL to be ready */
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc ); /* Switch main clock PLL */
CLKSYS_AutoCalibration_Disable( DFLLRC2M );

lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_puts("Привет мир");
lcd_putc(bat0);
lcd_putc(bat1);
lcd_putc(bat2);
lcd_putc(bat3);
lcd_putc(bat4);
lcd_putc(bat5);

PORTD.DIRSET=PIN2_bm;

while (1)
{
PORTD.OUTTGL=PIN2_bm;
_delay_ms(100);
}
}
Вложения:
Тип файла: zip hd44780 xmega lib.zip (6.1 Кб, 209 просмотров)
Реклама:

Последний раз редактировалось harchenko_pavel; 02.04.2010 в 14:12.
harchenko_pavel вне форума  
Эти 2 пользователя(ей) сказали Спасибо harchenko_pavel за это сообщение:
avr123-nm-ru (02.04.2010), Fogtech (27.02.2013)
Непрочитано 02.04.2010, 18:30  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Отличное начало, пора осваивать их.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 02.04.2010, 19:58  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Обнаружил ошибку в функцие static inline void lcd_newline(uint8_t pos) из за которой каретка переходила в неправильную позицию по \n
прошу поменять функцию на:

static inline void lcd_newline(uint8_t pos)
{
register uint8_t addressCounter;


#if LCD_LINES==1
addressCounter = 0;
#endif
#if LCD_LINES==2
if ( pos ‹ (LCD_START_LINE2) )
addressCounter = LCD_START_LINE2;
else
addressCounter = LCD_START_LINE1;
#endif
#if LCD_LINES==4
if ( pos ‹ LCD_START_LINE2 )
addressCounter = LCD_START_LINE2;
else if ( (pos ›= LCD_START_LINE2) && (pos ‹ LCD_START_LINE3) )
addressCounter = LCD_START_LINE3;
else if ( (pos ›= LCD_START_LINE3) && (pos ‹ LCD_START_LINE4) )
addressCounter = LCD_START_LINE4;
else
addressCounter = LCD_START_LINE1;
#endif
lcd_command((1‹‹LCD_DDRAM)+addressCounter);

}/* lcd_newline */
harchenko_pavel вне форума  
Непрочитано 04.03.2013, 22:50  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

С помощью выше указанной библиотеки хочу заставить LCD переодически изменять сообщения. Но комманда _delay_ms() почему-то вместо задержки оставналивает весь процесс. Если же _delay_ms() убрать, то все последующие сообщения быстро отображаются до последнего, после чего все останаливается. Хотя все процедуры находяться в бесконечном цикле.
Вот основной код, использующий библиотеку lcd.h:

Код:
#include ‹stdlib.h›
#include ‹avr/io.h›
#include ‹avr/pgmspace.h›
#include "lcd.h"
#include ‹util/delay.h›
#define F_CPU 20000000		// AVR clock frequency in Hz, used by util/delay.h

int main(void)
{
    char buffer[7];
    int  num=134;
    unsigned char i;

    /* initialize display, cursor off */
    lcd_init(LCD_DISP_ON);

    for (;;) {                           /* loop forever */

        lcd_clrscr();
        lcd_puts("LCD Test Line 1\n");
        lcd_puts("Line 2");
        lcd_gotoxy(7,1);  
        lcd_putc(':');
        
        _delay_ms(2000);

        lcd_clrscr();
        
        lcd_command(LCD_DISP_ON_CURSOR);
        lcd_puts("CurOn");
        
        _delay_ms(2000);

        lcd_clrscr();     /* clear display home cursor */

        /* put string from program memory to display */
        lcd_puts_P( "Line 1 longer than 14 characters\n" );
        lcd_puts_P( "Line 2 longer than 14 characters" );
        
        lcd_command(LCD_MOVE_DISP_LEFT);

        _delay_ms(2000);

	lcd_clrscr();
        /* turn off cursor */
        lcd_command(LCD_DISP_ON);

        _delay_ms(2000);
        
        lcd_clrscr();   /* clear display home cursor */
        
        /* convert interger into string */
        itoa( num , buffer, 10);
        
        /* put converted string to display */
        lcd_puts(buffer);
        
        _delay_ms(2000);
    }
}
Вопрос: каким образом можно выставить временные задержки в отображении новой информации на дисплейе и как зациклить процесс. Спасибо.
Fogtech вне форума  
Непрочитано 07.03.2013, 22:05  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

В процессе поиска решения проблемы, пришел к мысли, что проблема может крыться где-то в районе Busy Flag. Если программа без остановчно только отправляет сообщения, то все работает. Если же есть задержка или ожидание нажатия кнопки, то отправка сообщений на LCD останавливается.

В прикрепленном архиве - проект с прораммой. При включении платы отображается сразу "0". При нажатии кнопок LCD больше никак не реагирует.

Прошу натолкнуть на свежие мысли... Как-то долго уже мучаюсь все с тем же. Спасибо.
Вложения:
Тип файла: rar LCD9.rar (223.7 Кб, 75 просмотров)
Fogtech вне форума  
Непрочитано 08.03.2013, 02:50  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Fogtech,
Цитата:
PORTD.DIR = (0 ‹‹ 0); // D0 as KEY SW0, input.
PORTD.DIR = (0 ‹‹ 1); // D1 as KEY SW1, input.
PORTD.DIR = (0 ‹‹ 2); // D2 as KEY SW2, input.
PORTD.DIR = (0 ‹‹ 3); // D3 as KEY SW3, input.
нет ли тут ошибки?
whoim вне форума  
Непрочитано 08.03.2013, 10:37  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

Сообщение от whoim Посмотреть сообщение
нет ли тут ошибки?
Нет, кнопки работают, о чем свидетельствуют светящиеся диоды, которые зажигаются соответственно нажатым копкам. И даже если выбросить копки, а поставить временную задержку, проблема остается.

У автора оригинальной библиотеки для атмеги, Петера Флойри, есть пример с функцией void wait_until_key_pressed(void) Пытался адптировать (закоментированная часть кода в main.c) - также напрасно.

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

Для Xmegа необходимо сконфигурировать программно источник тактовой частоты процессора и периферии. Т.е. схему PLL и собственно источник частоты (внешний кварц, внутренняя RC цепочка и пр.)

Если брать выставленные значения производителем по умолчанию, то там вроде как не 20 Мгц будет, а меньше.
Соответственно, директива #define F_CPU 20000000, которая определяет тактовую частоту для всех временных процессов, указана не верно. Как следствие, _delay_ms(2000); будет отрабатывать тоже не правильно, т.к. эта функция повязана и рассчитывается исходя из F_CPU.

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

И вот там если неправильно выставлен F_CPU, программа может подвисать, т.к. в этой библиотеке используется кусок, где осуществляется чтение из LCD.

Это просто мысли, из опыта, с которым столкнулся сам, когда с Xmega возился.

А вообще ели нет отладчика, чтобы посмотреть состояние контроллера в точке останова, хороший способ вычислить, на какой точке программы контроллер виснет - это просто сконфигурировать одну ногу на выход и навесить на нее светодиод. В итоге: светодиод не горит, когда прошла программа точку - зажечь светодиод. Вот и все. Ищем точку в программе, после которой светодиод перестает загораться. Значит там ошибка.
shurenock вне форума  
Сказали "Спасибо" shurenock
Fogtech (09.03.2013)
Непрочитано 09.03.2013, 17:06  
Fogtech
Частый гость
 
Регистрация: 29.01.2013
Сообщений: 31
Сказал спасибо: 13
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Fogtech на пути к лучшему
По умолчанию Re: Библиотеки для Xmega под WinAVR

@shurenock

F_CPU 20000000, это верно. После публикации тоже заметил, тем не менее с F_CPU 2000000 (2МГц) работает точно также... К тому же если инициализация и первое сообщение проходит успешно, могу сделать вывод что со временем на этом этапе все работает нормально (?)

На счет программы, то используя выше прикрепленный пример, программа работает по циклу. То есть светодиоды всегда зажигаются соответственно нажатым кнопкам. А вот HD44780 виснит сразу после первой же остановки отправки на него комманд.

Спасибо за ответ!

З.Ы. Работая с Xmega, Вы не сталкивались члучайно с LCD HD44780? Если да, то хотелось бы перенять Ваш драгоценный опыт.

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

HD44780 - это не LCD, это контроллер с системой управляющих команд на основе которого строятся море LCD.

Кстати одна из возможных проблем может быть связана с питанием LCD. Контроллер HD44780 имеет 5 вольтовое питание, а интерфейс может поддерживаться 3-х вольтовый.

XMega же имеет 3.3 вольта питание. Поэтому LCD надо запитывать от отдельного 5-ти вольтового источника. У меня такие проблемы были.

Кроме того XMega требовательна к многим мелким вещам. Например после конфигурации источника тактовой частоты необходимо выставить паузу на время переходных процессов.

Далее С библиотека LCD в отличие от прочих языков (например Бейсика) не знаю почему, но содержит команды как записи данных, так и для чтения. Причем при инициализации LCD как раз и используется сначала запись команд, а потом чтение для проверки конфигурации LCD.

Поэтому если не подключен и не сконфигурирован вывод LCD R/W ваша схема будет виснуть при инициализации.

Да там еще много мелких мелочей может быть.
shurenock вне форума  
Сказали "Спасибо" shurenock
Fogtech (09.03.2013)
 

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

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

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, время: 10:00.


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