Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.10.2006, 21:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
Тест компиляторов
На форумах в Интернете часто встречаются обсуждения вопросов типа «Какой компилятор лучше», «Какая архитектура PIC/AVR/8051/68H08/прочее лучше», «Какой язык С/Ассемблер/Паскаль/Бейсик лучше подходит для написания программ для микроконтроллеров» и другие темы, приводящие к горячему обсуждению и спорам.
Эти вопросы и темы вечные и резюме подвести им очень трудно (даже невозможно).
Как вариант частичного удовлетворения в плане объективного сравнения компиляторов, языков и котроллеров есть такой вариант:
Решение несложной практической задачи (ДОСТУПНОЙ для периферии многих МК) разными компиляторами и разными контроллерами, с приведением здесь на форуме в этом топике примеров (с исходниками, комментариями и прошивками).
И пусть общественность сравнит эти результаты.
Такое умное хотел написать аж сам перестал понимать.
Если по сути: далее я привожу простенький пример на АТмега8 + бейсик (Баском) работы с АЦП и выводом результата на дисплей 16*2.
Кто работает на другом МК (PIC/8051/68H08 и др.) или на AVR (но на С/Ассемблер/Паскаль) выложит свой пример решения.
Когда будет с чем сравнить, тогда и сравнивание будет более корректным.
|
|
|
|
04.10.2006, 21:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
Пример №1.
АТмега8 + бейсик (Баском).
Использован индикатор 16*2 и переменный резистор.
Снимается уровень напряжения с движка резистора и выводится значение в вольтах на дисплей.
Размер кода – 1464 байта (732 слова, составляющих 18% от Flash памяти 8К).
В файле (51КБ) проект для протеуса, исходник и файл прошивки.
Исходник во вложенном файле с подробными комментариями.
Здесь для простоты только текст на бейсике:
--------------------
$regfile = "m8def.dat"
$crystal = 1000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Cursor Off
Dim Channel As Byte
Dim W As Word , Ww As Single
Dim S As String * 15
Channel = 1
Do
W = Getadc(Channel)
Ww = W / 204.4
S = Str(ww)
Locate 1 , 1
Lcd "U= " ; Left(s , 4 ) ; " V "
Waitms 100
Loop
End
--------------------
И это все.
Никаких больше внешних модулей не нужно. Все стандартные операторы и функции бейсика Баском.
Хотелось бы увидеть как эта задача будет решена другими средствами.
Схематехнически специально сделаны упрощения, отсутствующие в реальной жизни.
-- Прилагается рисунок: --
Прикрепленный файл: 4283269.rar
|
|
|
|
06.10.2006, 23:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
Н-да...
А с помощью "mikroBasic for AVR" не удалось решить пока так просто эту задачку.
Там 100% поддержку имеют только 128 и 16/32 меги.
Для остальных работают не все функции.
Попробовал отредактировать регфайл для меги8, компиляция кода есть, но не работает.
Да и размер кода уже более 3К.
А еще нужно добавить преобразование числа в символы для вывода на экран...
|
|
|
|
12.10.2006, 22:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
СРАВНЕНИЕ КОМПИЛЯТОРОВ C ДЛЯ AVR
Анализ эффективности и скорости кода, сгенерированного IAR, CodeVisionAVR, ICCAVR и AtmanAvr (AVR-GCC).
Вот прямая ссылка на ресурс:
http://avr.h15.ru/index.php?page=compilers_cmp
1. Сравнение эффективности кода
2. СРАВНЕНИЕ ВРЕМЕНИ ВЫПОЛНЕНИЯ КОДА ДЛЯ ПРОГРАММЫ С ПЛАВАЮЩЕЙ ТОЧКОЙ.
|
|
|
|
13.10.2006, 14:38
|
|
Временная регистрация
Регистрация: 17.05.2006
Сообщений: 72
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Вот, сбацал тут по-быстрому. Компилятор IAR 3.20.
Код:
|
#include ‹string.h›
#include ‹iom8.h›
void Out_LCD(unsigned char);
__flash unsigned char decode[10]="0123456789";
void main(void)
{
char Vr_level, i, V_string[15];
float Vr_level_f;
strcpy (V_string, "U= . V");
ADCSR=0x9f; // Инициализация АЦП (постоянное преобразование)
ADMUX=0x61;
SFIOR=0x00;
PORTB=0xff; // Инициализация порта B
DDRB=0xff;
PORTC=0x80; // Инициализация порта C
DDRC=0x80;
ADCSR|=(1‹‹ADSC); // Запуск преобразования
while (1)
{
while ((ADCSR & 0x10) == 0) // Ожидание окончания преобразования АЦП
Vr_level=ADCH; // Считывание значения АЦП
Vr_level_f=Vr_level/204.4; // Учёт коэффициента
// Перевод напряжения в двочно-десятичный вид
V_string[3]=decode[(unsigned char)(Vr_level_f -Vr_level_f/10*10)];
V_string[5]=decode[(unsigned char)(Vr_level_f/10 -Vr_level_f/100*10)];
V_string[6]=decode[(unsigned char)(Vr_level_f/100 -Vr_level_f/1000*10)];
PORTB&=~0x04; // Установка режима ввода команд в LCD
Out_LCD(0x24); // Вывод команды установки курсора
в позицию (1,1) (данные взяты
"от балды", т.к. кодов команд
не знаю)
Out_LCD(0x01);
Out_LCD(0x01);
// Вывод данных на LCD
PORTB|=0x04; // Установка режима ввода данных
i=0;
while (V_string[i] != 0)
{
Out_LCD(V_string[i]);
}
}
}
void Out_LCD(unsigned char data)
{
unsigned int k;
PORTB=data & 0x0f; // Младшая часть данных
PORTB|=0x08; // Запись данных
for (k=0; k‹1000; k++) {;}
PORTB&=~0x08; // Снятие сигнала записи данных
PORTB=(data››4) & 0x0f; // Старшая часть данных
PORTB|=0x08; // Запись данных
for (k=0; k‹1000; k++) {;}
PORTB&=~0x08; // Снятие сигнала записи данных
} |
Получилось 1480 байт кода. Делал не проверяя, чисто чтоб размер посмотреть и сравнить. Стандартных функций не использовал, поэтому текст получился большой.
__________________
"Имею честь иметь Вашу честь в своём доме..."
|
|
|
|
13.10.2006, 15:08
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,563 сообщении(ях)
|
Я так понял меряем 5в ?
Ок состряпую на пиках.Потсмотрим.
Микроконтроллер любой можно (из пиков)?
Библиотеки использовать стандартные из поставки
компиляторов ?
|
|
|
|
13.10.2006, 15:54
|
|
Временная регистрация
Регистрация: 29.05.2005
Адрес: где-то в 300км от Красноярска
Сообщений: 76
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
|
|
|
|
13.10.2006, 20:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
Сообщение от dosikus
|
Я так понял меряем 5в ?
Ок состряпую на пиках.Потсмотрим.
Микроконтроллер любой можно (из пиков)?
Библиотеки использовать стандартные из поставки
компиляторов ?
|
Чем больше вариантов будет для сравнения, тем лучше.
Схемка простая (даже черезчур).
Но для решения задачи используются и управление портами, и настройка периферии, и вывод на внешний дисплей, и работа с числами/строками.
Поэтому будет интересно как это делается на PIC.
|
|
|
|
13.10.2006, 20:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
Кроме компилятора многое зависит еще и от программиста (алгоритма).
А цифры наверное таки приведены в словах а не байтах.
Вот еще ссылочка на определение уровня производительности контроллеров и размер кода компиляторов: http://benchmarks.caxapa.ru
Для каждого бенчмарка используется сравнение единого алгоритма но под разные платформы и среды программирования.
|
|
|
|
14.10.2006, 12:01
|
|
Прохожий
Регистрация: 14.10.2006
Сообщений: 3
Сказал спасибо: 15
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от paha1956
|
Вот, сбацал тут по-быстрому. Компилятор IAR 3.20.
Получилось 1480 байт кода. Делал не проверяя, чисто чтоб размер посмотреть и сравнить. Стандартных функций не использовал, поэтому текст получился большой.
|
А можно НЕХ получить?
Попробовать его в ПРОТЕУСЕ.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:49.
|
|