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

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

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

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

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

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

Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков.

 
Опции темы

Быстродействие для Arduino

Непрочитано 20.05.2016, 13:21  
Wlad1453
Прописка
 
Регистрация: 03.06.2009
Адрес: С.-Петербург
Сообщений: 148
Сказал спасибо: 112
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Wlad1453 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Уважаемый ТС. Вы бы приотркрыли бы завесу тайны. Что за прибор? Предназначение? диапазон измеряемой величины? Как часто измерения должны происходить? куда информацию выводить? Если на дисплей, то как часто информация на дисплее должна обновляться? Какие критерии оптимизации, т.е. вес, стоимость и т.п.? А то сразу про нехватку быстродействия и RTOS.

Я бы сначала сделал подробное описание проекта/задачи, и только потом бы в частности вдавался.
Реклама:

Последний раз редактировалось Wlad1453; 20.05.2016 в 13:24.
Wlad1453 вне форума  
Непрочитано 20.05.2016, 13:59  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Вот мы и делаем подробное описание-техзадание. Задача - реализовать задачу реального времени на Ардуино. На ТС не надейтесь, допустим, он заказал дальномер а всё остальное уже наше дело. Диапазон измерения следует из описания датчика: при скорости звука в воздухе 340м/с и максимальной длительности измерения 38мс получаем, учитывая что сигнал отражённый (0.038с*340м/с)/2=6.46м. чтобы отличить отражение от отсутствия сигнала нужно из 38мс вычесть несколько дискретов отсчета времени. Величина дискрета будет также определять минимальное расстояние и разрешающую способность. Информацию будем выводить и на дисплей и в RS232. Оптимизировать будем по стоимости и простоте.
cogen вне форума  
Непрочитано 20.05.2016, 14:02  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Делал подобное еще на пике при живом Ильиче. Все работало по прерыванию таймера и INT0. Определял с точностью до 1см. При этом UART тоже работал. И экран.
Easyrider83 вне форума  
Непрочитано 20.05.2016, 14:18  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Как раз то что надо - алгоритм обработчика INT0. Как измерял длительность импульса? При какой частоте счёта получился 1см? UART и экран - по таймеру?
cogen вне форума  
Непрочитано 20.05.2016, 14:47  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Там все просто было - запускаем таймер и дергаем ногу запуска импульса. INT0 читает значение таймера.
Easyrider83 вне форума  
Непрочитано 20.05.2016, 14:53  
johanh
Почётный гражданин KAZUS.RUN
 
Регистрация: 28.03.2006
Сообщений: 3,609
Сказал спасибо: 141
Сказали Спасибо 427 раз(а) в 377 сообщении(ях)
johanh на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

cogen, Считывание отраженки идет одновременно с подачей сигнала.
Компенсация сигнала передачи.
johanh вне форума  
Непрочитано 20.05.2016, 15:50  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Сообщение от Easyrider83 Посмотреть сообщение
запускаем таймер и дергаем ногу запуска импульса. INT0 читает значение таймера.
ОК, спасибо. По шагам значит так:

Старт измерения
Запустить счет с 0 на таймере высокого разрешения
Выдать импульс TRIG

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

Обработка результата измерения
пересчитать измеренное таймером время в дистанцию
отобразить результат
разрешить старт нового измерения
cogen вне форума  
Непрочитано 20.05.2016, 15:54  
Wlad1453
Прописка
 
Регистрация: 03.06.2009
Адрес: С.-Петербург
Сообщений: 148
Сказал спасибо: 112
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Wlad1453 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Коллеги читайте Дата-шит, не побоюсь этого слова. Датчик сам формирует импульс длительности на ноге echo. Длительность импульса 150мкс-25мс. Т.е. максимальная дальность не более 400 см. Запускается процесс измерения импульсом 10 мкс на другой ноге. Условие отсутствия препятствия 38мс. Точность +-3 см на максимальной дальности.

Вопрос, RTOS зачем нужен? Тем более, что измерение, как я понимаю, запускается кнопкой вручную.

Вот один из примеров реализации. Причем без библиотек.
http://research.andbas.com/2011/12/hc-sr04.html

int ledPin = 9;
int trigPin = 10;
int echoPin = 11;

long distance;
int ledLevel;

void setup() {
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
}

void loop() {
distance = getDistance();
ledLevel = (int) (distance*10)‹=255?255-distance*10:0;
analogWrite(ledPin, ledLevel);
delay(50);
}

long getEchoTiming() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin,HIGH);
return duration;
}

long getDistance() {
long distacne_cm = getEchoTiming()/29/2;
return distacne_cm;
}


Определение длительности импульса производится встроенной функцией pulseIn(), а именно:

"duration = pulseIn(echoPin,HIGH);. Функция pulseIn(...) возвращает long значение в микросекундах через то время, когда на указанном входе появится логическая единица (в нашем случае это вход номер 11). Как только на входе 11 появляется логическая единица - этот метод возвращает количество микросекунд за которое сигнал вернулся."

Нужно только встроить опрос кнопки либо в цикле, либо по прерыванию по изменению состояния пина.
Управление диодом заменяется Serial.println(xxx) и LCD.print(xxx). Естественно после инициализации обоих устройств.

Последний раз редактировалось Wlad1453; 20.05.2016 в 23:42.
Wlad1453 вне форума  
Непрочитано 20.05.2016, 15:55  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Сообщение от johanh Посмотреть сообщение
Считывание отраженки идет одновременно с подачей сигнала.
Компенсация сигнала передачи.
Почему так? Проще? Или точнее, чем запуск счёта по переднему фронту ECHO и останов по заднему? И что такое компенсация сигнала передачи?
cogen вне форума  
Непрочитано 20.05.2016, 16:04  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Сообщение от cogen Посмотреть сообщение
По спаду фронта запускающего импульса датчик излучает пачку из восьми импульсов с периодом 25мкс. По окончании посылки датчик устанавливает высокий логический уровень на выводе ECHO и переходит в режим приёма отражённого эхо-сигнала. В случае детектирования эхо-сигнала или по прошествии 38 миллисекунд на выводе ECHO устанавливается низкий уровень.
Что тут непонятно и зачем изобретать что-то типа "старт таймера одновременно с импульсом запуска"? Чтобы потом героически преодолевать самодельные трудности?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
 

Метки
ардуино, система реального времени, циклы
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RFID на Arduino с использованием Parallax RFID reader/writer IvanPuzirev Микроконтроллеры, АЦП, память и т.д 13 22.04.2014 20:57
Проблема с Arduino Motor Shield domka Песочница (вопросы новичков) 6 29.07.2013 11:56


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.