Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ:

Отправлено Юрий_СВ (91.214.248.66) 24 марта 2010, г. 01:52
В ответ на: Вы вчера обещали мне помочь с ADC у Меги88, так вот "прыгают" полученные значения ёли-пали:( отправлено Двоешник 23 марта 2010, г. 18:13

1) ADCSRA |= (1<<ADEN); /*Разрешаем работу ADC */
Переносим в void ADC_Init(void)
2) ADCSRA &= ~(1<<ADEN); /*Запрещаем работу ADC*/
Убираем вообще
3) float Measured_U=0;
Меняем тип на unsigned long Measured_U=0;
4) temp_ADC=ADC; и саму переменную temp_ADC
Убираем вообще
5) Measured_U += (temp_ADC/1024.0)*5.0 ;
Заменяем на Measured_U +=ADC;
6) return (Measured_U/250);
Заменяем на return( ((float)Measured_U) * ( 5.0/(1024.0*250.0)) )

Т.о. ( 5.0/(1024.0*250.0)) - будет вычислен препроцессором 1 раз ещё ПЕРЕД (!) компиляцией.

Такие изменения позволят уменьшить ресурсоёмкость ADC_Measured_Voltage в несколько ТЫСЯЧ (!) раз.
Пока так.
Но в дальнейшем в этом месте и в функциях вывода на ЖКИ плавающую точку желательно заменить на фиксированную.

Всегда имейте в виду : этот контроллер (да и ARM тоже) не имеет операции деления. Она заменяется большушими подпрограммами. Как и работа с плавающей точкой.


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru