Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 1 б. Некоторые Агdиiпо-задачи на ассемблере 409 ($04 5А) на величину микросекунд и возьмем из 32-разрядного результата два стар ших байта (см. главу 8). Максимальное измеряемое расстояние при такой методике лимитируется числом м ну и кросекунд 65 535 , что равносильно длине 1 1 м, а датчик HC-SR04 на такую дли и не работает. Более того, при испытаниях этой программы вы увидите, что дат чик HC-SR04 более или менее уверенно работает только примерно до метра, пото му мы могли бы облегчить себе жизнь, ограничив число сантиметров одним байтом (тогда и умножение, и преобразования для вывода на дисплей упростились бы) и, соответственно, максимальной измеряемой дистанцией 2, 55 м. Но ведь моделью HC-SR04 ассортимент подобных датчиков не ограничивается, потому не будем заранее отрубать потенциальные возможности, коли нам это ничего не стоит, - ограничим только отображаемое значение сантиметров числом 999, так будет про ще производить ВСD-преобразование. Поработав с этой программой, вы убедитесь, что показания ультразвукового датчи ка очень сильно «дребезжат», поэтому их необходимо усреднять . Программу с ус реднением показаний вы также найдете в архиве по адресу, указанному во введении (файл HC-SR04_disp4digi_avr.asm ) . Необходимость усреднения заставляет провести дополнительные предварительные расчеты, чтобы не выйти за диапазоны приме няемых чисел . Измерение на максимальной дистанции 1 О м занимает -60 мс, т. е. за секунду мы можем провести примерно 1 6 измерений. Мы ограничимся 8-ю изме рениями в секунду (для этого надо частоту на входе TimerO сделать в восемь раз быстрее, т. е. коэффициент деления установить 1 : 8 вместо 1 : 64 ) . Суммировать бу дем рассчитанное число сантиметров, которое в каждом измерении может состав лять, как мы говорили, не более 999 см ( $ О ЗЕ7) . За восемь измерений мы накопим максимум 999 х 8 = 7992 ( $ 1 FЗ 8), т. е . за пределы двух байтов не вылезем. Полу ченное после суммирования двухбайтовое число мы каждое восьмое измерение три раза сдвигаем вправо (перенос из старшего разряда только для младшего байта! ), т. е. делим его на 2 3 = 8, и уже этот результат выводим на индикацию. В зависимости от назначения дальномера, время измерения, равное здесь примерно секунде, может быть скорректировано, - например, для ориентации робота в пространстве время реакции продолжительностью в целую секунду слишком велико. Но вы, наверное, из предыдущего подробного изложения уже и сами сообразили, какие методы тут можно применить, так что не будем больше на этом останавливаться . Термометр на дисплее ТМ1 637 Для термометра на датчике ТМР36 (рис. 1 6 . 5) тактирование от внешнего кварца 4 МГц необязательно, но программа почти столь же сложная, как и в случае даль номера, потому точная частота может понадобиться для отладки с помощью UART. Контроллер с отлаженной программой можно потом переключить на тактирование от внутреннего генератора. Как и в случае дисплея МТ- 1 ОП 1 , программа (ее файл 4-digit_display_TMP36.asm вы найдете в архиве по адресу, указанному во введении) создана под АTmega8, и переносить ее на другие контроллеры можно с оглядкой на величину внутреннего опорного напряжения, которая в АTmega8 составляет 2,56 вольта (а у других контроллеров может отличаться - подробно об этом рас-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==