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

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

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

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

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

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


 
Опции темы
Непрочитано 28.07.2011, 09:26  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Добрый день всем! Помогите мне пожалуйста!
Хочу реализовать бегущую строку для ЛЕД индикатора. Впринципе я реализовал.
Но очень долго вбивать код и так как я теперь хочу у меня не получится...

Вот так я делал:

led_buff[0] = led_table[10]; // clear
led_buff[1] = led_table[10];
led_buff[2] = led_table[10];
led_buff[3] = led_table[10];
led_buff[4] = led_table[10];
led_buff[5] = led_table[10];

delay_ms(100);

led_buff[0] = led_table[10]; //
led_buff[1] = led_table[10];
led_buff[2] = led_table[10];
led_buff[3] = led_table[10];
led_buff[4] = led_table[10];
led_buff[5] = led_table[0];

delay_ms(100);

led_buff[0] = led_table[10]; //
led_buff[1] = led_table[10];
led_buff[2] = led_table[10];
led_buff[3] = led_table[10];
led_buff[4] = led_table[0];
led_buff[5] = led_table[1];

delay_ms(100);

led_buff[0] = led_table[10]; // clear
led_buff[1] = led_table[10];
led_buff[2] = led_table[10];
led_buff[3] = led_table[0];
led_buff[4] = led_table[1];
led_buff[5] = led_table[2];

// и так далее

// делал так же сдвиг и по таймеру

создавал переменную, инкриментировал
и задавал условие.

а теперь я хочу сделать так:

то что было раньше на индикаторе

сдвигать влево или вправо

а на индикатор выводить новое значение через один разряд или два разряда

пример:
было 012345
потом 12345
потом 2345 4
потом 345 43
потом 45 432
потом 5 4321
потом 43210
потом 43210

в общем так как то.
Долго думал над алгоритмом, и ничего путнего так и не придумал...

с ув. Артем
Реклама:
artyomugr вне форума  
Непрочитано 23.08.2011, 09:04  
Borbos969
Прохожий
 
Регистрация: 16.12.2010
Сообщений: 3
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Borbos969 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от IOPA4 Посмотреть сообщение
А с депозита мне капает небольшая копеечка на приобретение радиодеталей.
Пятый урок удалён с Deposit Files.
Такого файла не существует или он был удален из-за нарушения авторских прав.
Borbos969 вне форума  
Непрочитано 17.10.2011, 17:31  
anatoliyttt
Прохожий
 
Регистрация: 11.12.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
anatoliyttt на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Подскажите, пожалуйста, как вывести на lcd 16*2 число в формате float ?
кусочек рабочего кода:

Цитата:
unsigned int adc_data[5]; // массив результатов замера
char lcd_buffer[31];
adc_data[0]=ADCW;
sprintf(lcd_buffer,"V0=%3u",adc_data[0]); //вывод целого числа
lcd_puts(lcd_buffer);
Так всё работает как надо. Но мне нужно показать реальное значение напряжения.
Для этого, например, adc_data[0]=100 нужно разделить на 40 = 2,5 (в моем случае)

По идее, должен работать оператор
sprintf(lcd_buffer,"V0=%3f",adc_data[0]/40);

но он не работает... Чувствую дело в какой то мелочи, типа формата (пробовал 2.1f 2f1), но не проходит - пока новичек в Си..

Последний раз редактировалось anatoliyttt; 17.10.2011 в 17:37.
anatoliyttt вне форума  
Непрочитано 17.10.2011, 22:00  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от anatoliyttt Посмотреть сообщение
adc_data[0]/40
Результат - целая часть от деления.
Операции с плавающей точкой - весьма медленные и жрут много ресурсов. Часто, надо выставить определённые опции в компиляторе, чтобы printf поддерживал ...
SasaVitebsk вне форума  
Непрочитано 28.06.2012, 19:09  
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,312
Сказал спасибо: 464
Сказали Спасибо 549 раз(а) в 278 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от artyomugr Посмотреть сообщение
Добрый день всем! Помогите мне пожалуйста!
Хочу реализовать бегущую строку для ЛЕД индикатора. Впринципе я реализовал.
Но очень долго вбивать код и так как я теперь хочу у меня не получится...
Где-то так:
void shift_left(void)
{
unsigned char tmp;
tmp = led_buff[0];
led_buff[0] = led_buff[1];
led_buff[1] = led_buff[2];
led_buff[2] = led_buff[3];
led_buff[3] = led_buff[4];
led_buff[4] = led_buff[5];
led_buff[5] = tmp;
delay_ms(100);
}
IOPA4 вне форума  
Непрочитано 25.07.2012, 11:33  
papa_n
Временная регистрация
 
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
papa_n на пути к лучшему
Вопрос Re: Уроки СИ для AVR микроконроллеров

Доброго времени суток!
Уважаемые Камрады!
Помогите плиз..
Вроди все понятно мне с МК и с Си, Но вот незадача((
Разобрался с UART, но вот не задача при апаратном управлении потоком куда подключить все эти сигналы RTS ... DTR???
И как правильно организовать програмно апаратное управление потоком???
papa_n вне форума  
Непрочитано 26.07.2012, 00:54  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

DTR/DSR - это общие готовности интерфейса. Обычно они подаются в момент подачи питания. Тоесть как правило ими не управляют. CTS/RTS - аппаратное управление потоком. Представь себе что интерфейс работает на частоте 115200. Тебе комп шлёт 11500 символов в секунду. А ты можешь обработать лишь 10000. Понятно, что ч/з какой-то промежуток времени буфер переполнится и устр-во захлебнётся. Поэтому применяют аппаратное управление потоком. То есть ты снимаешь сигнал CTS. Здесь важно иметь ввиду, что съём сигнала не приведёт к мгновенной остановке передачи. Тебе ещё придёт несколько символов. То есть ты должен снимать сигнал, при заплнении буфера до определённого объёма. RTS управляет комп в другую сторону. То есть если комп его снял, то ты должен остановить передачу.

Програмное управление потоком - примерно тоже, только вместо ножек применяется передача специальных символов XON/XOFF (17/19 как правило).
SasaVitebsk вне форума  
Непрочитано 26.07.2012, 17:02  
С.М.С
Гражданин KAZUS.RU
 
Аватар для С.М.С
 
Регистрация: 03.07.2010
Сообщений: 970
Сказал спасибо: 158
Сказали Спасибо 371 раз(а) в 188 сообщении(ях)
С.М.С на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Завязался с Си для инициализации TFT. AVR Studio выдаёт вот такой отчёт:
Цитата:
rm -rf ATMega32_TFT_C.o ATMega32_TFT_C.elf dep/* ATMega32_TFT_C.hex ATMega32_TFT_C.eep ATMega32_TFT_C.lss ATMega32_TFT_C.map
Build succeeded with 0 Warnings...
mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT ATMega32_TFT_C.o -MF dep/ATMega32_TFT_C.o.d -c ../ATMega32_TFT_C.c
/usr/bin/sh: -Wall: command not found
make: [ATMega32_TFT_C.o] Error 127 (ignored)
mmcu=atmega32 -Wl,-Map=ATMega32_TFT_C.map ATMega32_TFT_C.o -o ATMega32_TFT_C.elf
/usr/bin/sh: -Wl,-Map=ATMega32_TFT_C.map: command not found
make: [ATMega32_TFT_C.elf] Error 127 (ignored)
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature ATMega32_TFT_C.elf ATMega32_TFT_C.hex
avr-objcopy: 'ATMega32_TFT_C.elf': No such file
make: *** [ATMega32_TFT_C.hex] Error 1
Build failed with 1 errors and 0 warnings...
Т.е. ругается на отсутствие файла .elf Собственно вопрос, откуда он формируется, потому как при создание проекта в папке появляется только .aps .aws .c
С.М.С вне форума  
Непрочитано 26.07.2012, 18:49  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

В таких случаях мейкфайл обычно прилагают. Ну и информацию о версиях софта. Какая студия, какой компилятор. Отчет странный - в нем вообще нет вызова компилятора или линкера.
mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char.... - это все параметры. Первым должно идти что то типа avr-elf-gcc. Это и есть вызов компилятора.
kison вне форума  
Непрочитано 26.07.2012, 20:40  
С.М.С
Гражданин KAZUS.RU
 
Аватар для С.М.С
 
Регистрация: 03.07.2010
Сообщений: 970
Сказал спасибо: 158
Сказали Спасибо 371 раз(а) в 188 сообщении(ях)
С.М.С на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Открываю проект с нуля, выбираю AVR GCC, далее симулятор 1, Mega32. Вписываю код, такого плана:
Код:
#include‹avr\io.h›

#include‹util\delay.h›


// control line pins
#define	LCD_PWM PD2
#define	LCD_RES	PD3
#define	LCD_RD  PD4
#define	LCD_WR  PD5
#define	LCD_CS	PD6
#define	LCD_RS  PD7

// macros for control lines

#define CLR_CS PORTD &= ~(1‹‹LCD_CS);
#define SET_CS PORTD |=  (1‹‹LCD_CS);

#define CLR_RESET PORTD &= ~(1‹‹LCD_RES);
#define SET_RESET PORTD |=  (1‹‹LCD_RES);

#define CLR_WR PORTD &= ~(1 ‹‹ LCD_WR);
#define SET_WR PORTD |=  (1 ‹‹ LCD_WR);
#define CLR_RD PORTD &= ~(1 ‹‹ LCD_RD);
#define SET_RD PORTD |=  (1 ‹‹ LCD_RD);

#define CLR_RS PORTD &= ~(1 ‹‹ LCD_RS);
#define SET_RS PORTD |=  (1 ‹‹ LCD_RS);


// color definitions
#define	BLACK	  0x0000
#define	BLUE	  0x001F
#define	RED 	  0xF800
#define	GREEN   0x07E0
#define CYAN	  0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE	  0xFFFF


/*************************************************/
void delay(unsigned int t)
{
	unsigned char t1;
	while(t--)
	for(t1=11;t1›0;t1--)
	{asm("nop");}
}


/*************************************************/
int main()
{



}
/*************************************************/
Нажимаю "Build and Run" и получаю, вот такой отчёт. Сначала поставил студию 4.19 чтобы работать под Windows 7, ассемблер работает и компилирует и прошивает. Затем поставил WinAVR 2008105 и вот так проект на Си собирается.
Вложения:
Тип файла: rar Makefile.rar (969 байт, 76 просмотров)

Последний раз редактировалось С.М.С; 26.07.2012 в 20:59.
С.М.С вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Видео уроки (flash) Proteus 7.1 fmssp Proteus 5 13.08.2007 03:56
AVR уроки Рюмика chipic128 Proteus, KiCAD и другие ECAD 9 07.03.2007 21:46
уроки от LABCENTRE(PIC12F675+C) dosikus Микроконтроллеры, АЦП, память и т.д 22 09.10.2006 10:16


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


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