Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Определение скорости по дальномеру
igor27065 Дата: Ср, 21.12.2011, 20:56  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 9
Репутация: 0   ±
Замечания:   ±
На сайте с 06.12.2010

Статус: Offline

Мне необходимо определить скорость приближения предмета, причем , если она будет меняющаяся ,то желательно мах значение. В схеме я использую дальномер Sharp GP2D12, мк 16f877a, и вывод на дисплей работающий по протоколу Хитачи44780. Я написал программу которая в принципе работает.( В принципе ,потому что шкала у дальномера нелинейная и реальное расстояние определяется по формуле , которую в программе я опустил) . И вот самый главный вопрос как посчитать время выполнения цикла программы - по времени цикла у меня идет выборка расстояния, в программе я отметил его как T.Я знаю что каждая команда выполняется за определенное количество тактов, но где есть эти данные я не знаю. Время такта определяется как я понял по 1/f.

MAIN:
ADCIN 0, DALNOST ' считываем аналоговое значение и сохраняем в переменной дальность
read 1,DAL1 ' считываем значение из ячейки памяти 1 и называем дал1
SPEED=(DALNOST-DAL1)/T ' определяем скорость как разность расстояний деленная на время Т (количество тактов*на время такта)
write 1,DALNOST ' заносим значение дальность в ячейку 1

LCDOUT $FE,2,"S=",DEC4 DALNOST,"cm"' выводим расстояние на первую строку жки
pause 100
lcdout $FE,$C0, "V=", dec4 SPEED 'выводим скорость на вторую строку дисплея
goto main
end

вся программа находится во вложении, написана на микрокодстудио
Прикрепления: speedPAM.pbp (2.8 Kb)
ЯНДЕКС Дата: 21.12.2011
ADMIN Дата: Чт, 22.12.2011, 03:58  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Время такта определяется как 4/Fosc. Соответственно при частоте 4 МГц длительность одного такта будет равна 4/4000000 Гц = 0,000001 С = 1 мкС
Другой вопрос в том, что под командами понимаются не команды на языке Basic, а команды на ассемблере, из которых и состоят команды на языке Basic. Например, такое выражение:

Number = Num4*1000 + Num3*100 + Num2*10 + Num1
будет выполняться 668 мкС при частоте осциллятора 4 Мгц, при 20 МГц это же выражение будет выполняться в 5 раз быстрее.
Время выполнения команд можно отследить при отладке на симуляторе, например в MPlab. Или в протеусе.
Точное количество тактов удобней всего рассчитывать с помощью любого из встроенных таймеров, которые инкрементируются при каждом машинном цикле. Таким образом, при частоте 4 МГц и предделителе 1:1 таймер будет инкрементироваться каждую 1 мкС. Считав таймер, можно узнать количество тактов.
igor27065 Дата: Вс, 01.01.2012, 17:03  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 9
Репутация: 0   ±
Замечания:   ±
На сайте с 06.12.2010

Статус: Offline

Понятно,спасибо за ответ.Пытаюсь освоить протеус. Но вот хотелось бы знать существует ли такая таблица в которой определено время выполнения команд из Пикбейсека (команда пикбесика состоит из команд асемблера,которые в свою очередь длятся определенное количество тактов) . То есть просуммировал время всех команд ,и получил точное время выполнения всей программы.Ведь ,если я правильно понимаю , то время выполнения конкретной команды всегда постоянное и зависит только от длительности такта.
ADMIN Дата: Ср, 04.01.2012, 18:29  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Для этого используют отладку. Хотя бы на симуляторе. Лучше всего для этого подходит MPLab
  • Страница 1 из 1
  • 1
Поиск: