Определение скорости по дальномеру
|
|
igor27065 |
Дата: Ср, 21.12.2011, 20:56 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 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
вся программа находится во вложении, написана на микрокодстудио
|
|
|
|
ADMIN |
Дата: Чт, 22.12.2011, 03:58 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 06.12.2010
Статус:
Offline
|
Понятно,спасибо за ответ.Пытаюсь освоить протеус. Но вот хотелось бы знать существует ли такая таблица в которой определено время выполнения команд из Пикбейсека (команда пикбесика состоит из команд асемблера,которые в свою очередь длятся определенное количество тактов) . То есть просуммировал время всех команд ,и получил точное время выполнения всей программы.Ведь ,если я правильно понимаю , то время выполнения конкретной команды всегда постоянное и зависит только от длительности такта.
|
|
|
|
ADMIN |
Дата: Ср, 04.01.2012, 18:29 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Для этого используют отладку. Хотя бы на симуляторе. Лучше всего для этого подходит MPLab
|
|
|
|