![]() | |
|
Главная Радио и связь Замечание. Для точного определения интервала в обработчик прерывания таймера (или АЦП) можно дополнительно вводить пустые команды пор. Однако частота, обозначенная на корпусе кварцевого резонатора, не точно соответствует тактовой частоте микроконтроллера, погрешность частоты определяется как допустимым разбросом характеристик кварцевого резонатора, так и схемой его включения. Возможны и ошибки в расчетах. Для «подстройки» длительности цикла программы можно вывести на какую-либо свободную линию одного из портов ввода/вывода чередующиеся от цикла к циклу значения О и 1, вставив необходимую последовательность команд в начале обработчика прерывания таймера. Сигнал на линии контролируется частотомером. Период сигнала, индицируемый частотомером, будет вдвое больше интервала работы таймера, так как период измеряется частотомером не от появления нуля до л оявления единицы, а между появлением двух единиц. Вернемся к программе. В обработчике прерывания таймера ТО после сброса сторожевого таймера производится инициализация АЦП 6: • в регистр выбора канала ADMUX выводится номер линии, подключаемой к АЦП; Что из этого следует и зачем нужен такой расчет? 1. Это значит, что обновление индикации 8 символов будет происходить за 8.664 мс, а частота мелькания составит 1000/8.664, более 100 Гц, поэтому мелькание цифр не будет влиять на восприятие человеческим глазом. 2. Время преобразования АЦП составляет 112 мкс, сигнал может значительно измениться за это время, именно этим обусловлено наличие встроенного в микроконтроллер устройства выборки/хранения, которое запоминает сигнал (выполняет выборку сигнала) в момент начала преобразования и удерживает его неизменным в течение всего времени преобразования. 3. Можно ли запустить выполнение преобразования АЦП без выключения таймера с тем, чтобы интервал определялся лишь таймером? Это возможно, но таймер, работающий в непосредственной близости от АЦП, создает импульсные помехи, поэтому корпорация «Atmel» ре-комендуетвыключать таймер навремя преобразования для получения более точного результата. В этой программе остановки таймера нет, ее можно ввести, однако введенное в программу усреднение результатов по множеству циклов обеспечивает достаточное подавление помех. В прикладных программах часто требуется достаточно точно приблизить интервал, обеспечиваемый таймером к заданному, поэтому приведенная методика определения интервала может оказаться полезной. • разрешаются все прерывания; • врегистреуправленияАВСЗКАустанавливаются следующие разряды: a) ADEN - работа АЦП разрешена, b) ADSC - режим однократного преобразования, c) ADIE -прерывание АДП разрешено, d) ADPS2 и ADPSO - определяют коэффициент предварительного деления, равный 32. Теперь преобразование АЦП запущено, остается ждать его завершения, для этого микроконтроллер переводится в знакомый нам режим Idle командой sleep. Как уже было замечено, «разбудить» микроконтроллер, находящийся в режиме Idle, может не только прерывание таймера, но и другие прерывания, в том числе и прерывание АЦП. Через 112 мкс после начала преобразования произойдет прерывание АЦП, после команды sleep выполнится команда г/тр ADC, находящаяся в блоке векторов прерываний (смотрите БЛОК 1 программы), далее будет выполнен обработчик прерывания АЦП, начинающийся меткой ADC:, после завершения которого выполнятся команды intmp,ADCL и in store,ADCH, следующие за командой sleep. Важно! Последовательность доступа к результату преобразования нарушать нельзя: сначала считывается младший байт результата (ADCL), затем старший (ADCH). В противном случае результат может оказаться ошибочным. Затем в регистр Y заносится адрес AD6 для хранения результата преобразования АЦП 6, и в пару соседних ячеек записывается результат. Те же действия повторяются для АЦП 7, только к АЦП подключается линия РА7, а результаты преобразования записываются в пару соседних ячеек, адрес первой из них - AD7. Далее вновь инициализируется таймер, что обеспечивает отсчет нового интервала времени до следующего прерывания таймера в 832мкс. В обработчике прерывания АЦП в очередной раз сбрасывается сторожевой таймер, а также очищается содержимое регистра управления АЦП, это вызывает прекращение работы АЦП и запрет прерываний АЦП. Клок 4. Подпрограммы определения кода символа mdgt0...mdgt7 »изменения режима mkey Определение 7-сегментного кода и проверка нажатия кнопок WgtO: Idd cod,Y + 7 "dOend: ret Idd cod,Y + 6 mdlend: mdgt 2: md2end: mdgt3: md3end: mdgt 4: md4end: mdgtS: mdSend: mdgt6: md6end: mdgt?: md7end:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [ 39 ] 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 0.0062 |