Ревич, Ю.В. Программирование микроконтроллеров 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 вольта (а у других контроллеров может отличаться - подробно об этом рас-

RkJQdWJsaXNoZXIy MTExODQxMg==