28.07.2011, 09:26
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
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
в общем так как то.
Долго думал над алгоритмом, и ничего путнего так и не придумал...
с ув. Артем
|
|
|
|
23.08.2011, 09:04
|
|
Прохожий
Регистрация: 16.12.2010
Сообщений: 3
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от IOPA4
|
А с депозита мне капает небольшая копеечка на приобретение радиодеталей.
|
Пятый урок удалён с Deposit Files.
Такого файла не существует или он был удален из-за нарушения авторских прав.
|
|
|
|
17.10.2011, 17:31
|
|
Прохожий
Регистрация: 11.12.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
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.
|
|
|
|
17.10.2011, 22:00
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от anatoliyttt
|
adc_data[0]/40
|
Результат - целая часть от деления.
Операции с плавающей точкой - весьма медленные и жрут много ресурсов. Часто, надо выставить определённые опции в компиляторе, чтобы printf поддерживал ...
|
|
|
|
28.06.2012, 19:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
|
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);
}
|
|
|
|
25.07.2012, 11:33
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Доброго времени суток!
Уважаемые Камрады!
Помогите плиз..
Вроди все понятно мне с МК и с Си, Но вот незадача((
Разобрался с UART, но вот не задача при апаратном управлении потоком куда подключить все эти сигналы RTS ... DTR???
И как правильно организовать програмно апаратное управление потоком???
|
|
|
|
26.07.2012, 00:54
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
DTR/DSR - это общие готовности интерфейса. Обычно они подаются в момент подачи питания. Тоесть как правило ими не управляют. CTS/RTS - аппаратное управление потоком. Представь себе что интерфейс работает на частоте 115200. Тебе комп шлёт 11500 символов в секунду. А ты можешь обработать лишь 10000. Понятно, что ч/з какой-то промежуток времени буфер переполнится и устр-во захлебнётся. Поэтому применяют аппаратное управление потоком. То есть ты снимаешь сигнал CTS. Здесь важно иметь ввиду, что съём сигнала не приведёт к мгновенной остановке передачи. Тебе ещё придёт несколько символов. То есть ты должен снимать сигнал, при заплнении буфера до определённого объёма. RTS управляет комп в другую сторону. То есть если комп его снял, то ты должен остановить передачу.
Програмное управление потоком - примерно тоже, только вместо ножек применяется передача специальных символов XON/XOFF (17/19 как правило).
|
|
|
|
26.07.2012, 17:02
|
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
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
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
В таких случаях мейкфайл обычно прилагают. Ну и информацию о версиях софта. Какая студия, какой компилятор. Отчет странный - в нем вообще нет вызова компилятора или линкера.
mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char.... - это все параметры. Первым должно идти что то типа avr-elf-gcc. Это и есть вызов компилятора.
|
|
|
|
26.07.2012, 20:40
|
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
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 и вот так проект на Си собирается.
Последний раз редактировалось С.М.С; 26.07.2012 в 20:59.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:36.
|
|