Главная » Микроконтроллеры
Призовой фонд
на январь 2017 г.
1. 5000 руб.
Академия Благородных Металлов
2. 1000 руб.
Radio-Sale
3. Регулируемый паяльник 60 Вт
Паяльник
4. 600 руб.
От пользователей
5. Тестер компонентов LCR-T4
Паяльник

Аналоговый ввод с использованием линии ввода-вывода

Преобразователь сопротивления в цифровой код
Рис.1 Преобразователь сопротивления в цифровой код

Любая линия ввода-вывода у AVR может использоваться для аналогового ввода информации. На рис.1, например, показан преобразователь величины сопротивления в цифровой код. Для такого интерфейса потребуется всего один вывод (PD0) и три дополнительных элемента. Резистор R2 необходим для ограничения тока PD0 для тех случаев, когда движок R1 находится в верхнем по схеме положении. Работу преобразователя можно разбить на два этапа (см. рис.2). Сначала на линии PD0, предварительно настроенной на вывод, выставляется высокий логический уровень до тех пор, пока конденсатор C1 не зарядится до максимального напряжения VCC*R1/(R1+R2). Для этого понадобится временной интервал
τ1 ≥ 3*T1 = 3*R1R2C1/(R1+R2), где T1 = R1R2C1/(R1+R2)- постоянная времени зарядной цепи.

Зависимость напряжения на выводе PD0 от времени
Рис.2 Зависимость напряжения на выводе PD0 от времени

Далее линия переводится в высокоимпедансное состояние и начинается цикл разрядки продолжительностью τ2 ≈ 3*T2 = 3*R1C1, где T2 = R1C1 - постоянная времени цепи разрядки.

В течении промежутка времени τ напряжение на выводе PD0 снизится до уровня логического нуля, что у AVR составляет 0.2* VCC. Длительность этого интервала пропорциональна величине R1
τ = T2*|ln([VCC*R1/(R1+R2)]/0.2*VCC)| = R1C1*|ln(5*[R1/(R1+R2)])|.   

Опрашивая N раз с периодом ∆t состояние линии, получим зависимость числового кода от сопротивления
N = τ/∆t.

Для обозначенных на схеме номиналов R1,R2,C1 получим τ ≈ 2426 мкс. Для N = 100 (диапазон изменения величины 0…100 единиц), опрос необходимо будет производить через каждые ∆t = 24.26 мкс. Подпрограмма, реализующая необходимую последовательность действий, приведена ниже. В качестве параметра DELAY в нее необходимо передать значение ∆t выраженное в машинных циклах.

     .def code = R16   ;регистр с кодом положения движка
     .def temp = R17   ;регистр для промежуточных операций

     .equ DELAY = 24   ;задержка времени на частоте 1 МГЦ
     .equ RANGE = 100
     .equ DI    = PD0

     ldi   temp,high(RAMEND) ;инициализация стека 
     out   SPH,temp
     ldi   temp,low(RAMEND)
     out   SPL,temp
     .
     rcall res_code
     .

;  Подпрограмма преобразования сопротивления в цифровой код 
;          с использованием линии ввода-вывода
; R16 – регистр с кодом положения движка резистора 
;   на выходе из подпрограммы
; XH:XL – используется как 2-байтовый регистр для 
;   задержки времени 
; DELAY – задержка времени τ в машинных циклах (20…65535)                  
; RANGE – диапазон изменения N (2…255)
	
res_code:  
     clr   R16     ;обнуляем регистр с кодом  положения движка
     sbi   DDRD,DI ;настраиваем на вывод линию DI порта D
     sbi   PORTD,DI;и устанавливаем высокий логический уровень
     ldi   XH,high(DELAY*RANGE);формируем необходимую задержку 
     ldi   XL,low(DELAY*RANGE) ;времени для зарядки конденсатора
rc1: sbiw  XH:XL,1
	 brne  rc1
     cbi   DDRD,DI ;настраиваем на ввод линию DI порта D
	 cbi   PORTD,DI;и отключаем подтягивающее сопротивление
rc2: sbis  PIND,DI ;опрашиваем состояние линии DI и если на 
     ret           ;ней низкий уровень, то завершаем процедуру 
     ldi   XH,high(DELAY/4-4) ;формируем задержку времени ∆t
	 ldi   XL,low(DELAY/4-4)
rc3: sbiw  XH:XL,1
	 brne  rc3
     inc   R16       ;инкрементируем регистр R16 и если его
     cpi   R16,RANGE ;содержимое достигло максимального значения
     brne  rc2       ;RANGE, то досрочно завершаем процедуру    
     ret 

Из-за отклонения номиналов элементов R1,C1 а так же изменяющихся значениях логических уровней, возможно, потребуется корректировка параметр DELAY в небольших пределах.

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Набор для сборки - УНЧ 2х60 Вт на TDA7294 Raspberry Pi 2
вверх