Юрий Ревич - Занимательная микроэлектроника

Тут можно читать онлайн Юрий Ревич - Занимательная микроэлектроника - бесплатно ознакомительный отрывок. Жанр: sci_radio, издательство БХВ-Петербург, год 2007. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Занимательная микроэлектроника
  • Автор:
  • Жанр:
  • Издательство:
    БХВ-Петербург
  • Год:
    2007
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0080-7
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Юрий Ревич - Занимательная микроэлектроника краткое содержание

Занимательная микроэлектроника - описание и краткое содержание, автор Юрий Ревич, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Книга на практических примерах рассказывает о том как проектировать, отлаживать и изготавливать современные электронные устройства в домашних условиях. Теоретические основы, физические принципы работы электронных схем и различных типов радиоэлектронных компонентов иллюстрируются практическими примерами в виде законченных радиолюбительских конструкций и дополняются советами по технологии изготовления любительской аппаратуры. На доступном уровне излагаются теоретические основы цифровой техники — математическая логика и различные системы счисления. Вторая часть книги полностью посвящена программированию микроконтроллеров, как основы современной электроники. Особое внимание уделяется обмену данными микроэлектронных устройств с персональным компьютером, приводятся примеры программ на Delphi.
Для широкого круга радиолюбителей

Занимательная микроэлектроника - читать онлайн бесплатно ознакомительный отрывок

Занимательная микроэлектроника - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Юрий Ревич
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

ret

В листинге 15.4 приведено одно из решений обратной задачи — преобразования упакованного BCD (например, тех же значений часов, минут и секунд из RTC) в hex-число, после чего с ним можно производить арифметические действия. По сравнению с «фирменной» BCD2bin8 эта процедура хоть и немного длиннее, но понятнее и более предсказуема по времени выполнения («фирменная» может занимать от 3 до 48 тактов).

Листинг 15.4

;на входе в temp упакованное BCD-значение

;на выходе в temp hex-значение

;temp1 — вспомогательный регистр для промежуточного хранения temp

;действительна только для семейства Меgа

HEX_BCD:

mov temp1, temp

andi temp, 0b11110000 ; распаковываем — старший

swap temp ;старший в младшей тетраде

mul temp,mult10 ;умножаем на 10, в r0 результат умножения

mov temp,temp1 ;возвращаемся к исходному

andi temp,0b00001111 ;младший

add temp,r0 ;получили hex

ret

Более громоздкая задача — преобразование многоразрядных чисел. Преобразовывать BCD-числа, состоящие более чем из одного байта, обратно в НЕХ-формат приходится крайне редко, зато задача прямого преобразования возникает на каждом шагу. Я здесь приведу отсутствующую в «аппноте» 204 процедуру конвертации чисел, выходящих за рамки 16-разрядного диапазона. Например, такая задача может возникнуть при конструировании многоразрядных счетчиков. Ограничимся диапазоном в 7 десятичных знаков (9 999 999), тогда исходное число будет укладываться в 3 байта (24 разряда). В целях универсальности в процедуре, которая приводится далее в листинге 15.5, на выходе получается отдельно неупакованный (сразу для индикации) и упакованный десятичный формат. Сократить число необходимых регистров можно, если большую часть результатов сразу записывать в SRAM — в дальнейшем мы так и будем поступать, а здесь для наглядности работаем только с регистрами.

Отметим, что процедура bin2BCD24 сделана на основе «фирменной» bin2BCD16 и, как и последняя, использует хитрый прием с записью значений в регистры по адресам памяти: так можно производить над адресами разные манипуляции, меняя регистры (аналогично адресной арифметике в языке С). Как и в других случаях, сохранена часть оригинальных комментариев из исходной «фирменной» процедуры.

Листинг 15.5

;процедура преобразования 3-байтового hex в упакованный (4 регистра)

;и неупакованный (7 регистров) BCD

;исходное значение в регистрах

.def Count0 = r25

.def Count1 = r26

.def Count2 = r27

;на выходе упакованный BCD в регистрах

. def tBCD0 =r13 ;BCD value digits 1 and 0

.def tBCD1 =r14 ;BCD value digits 3 and 2

.def tBCD2 =r15 ;BCD value digit 4,5

.def tBCD3 =r16 ;BCD value digit 6

; на выходе неупакованный BCD в регистрах

.def N1 =r1 ;младший

. def N2 =r2

.def N3 =r3

.def N4 =r4

.def N5 =r5

.def N6 =r6

.def N7 =r7 ;старший

;вспомогательные регистры

.def cnt16a =r18 ;счетчик цикла

.def tmp16a =r19 ;временное значение

;адреса регистров в памяти

.equ AtBCD0 =13 ;address of tBCD0

.equ AtBCD3 =16 ;address of tBCD3

bin2BCD24:

ldi cnt16a,24 ;Init loop counter clr tBCD3

clr tBCD2 ;clear result (4 bytes)

clr tBCD1

clr tBCD0

clr ZH ;clear ZH (not needed for AT90Sxx0x)

bBCDx_1: lsl Count0 ;shift input value

rol Count1 ;through all bytes

rol Count2 ;through all bytes

rol tBCD0

rol tBCD1

rol tBCD2

rol tBCD3

dec cnt16a ;decrement loop counter

brne bBCDx_2 ;if counter not zero

;распаковка

ldi temp,0b00001111

mov N1,tBCD0

and N1,temp

mov N2,tBCD0

swap N2

and N2,temp

mov N3,tBCD1

and N3,temp

mov N4,tBCD1

swap N4

and N4,temp

mov N5,tBCD2

and N5,temp

mov N6,tBCD2

swap N6

and N6,temp

mov N7,tBCD3

ret; return

bBCDx_2:ldi r30;AtBCD3+1 ;Z points to result MSB + 1

bBCDx_3:

ld tmp16a, — Z ;get (Z) with pre-decrement

subi tmp16a, — $03 ;add 0x03

sbrc tmp16a,3 ;if bit 3 not clear

st Z,tmp16a ;store back

ld tmp16a,Z ;get (Z)

subi tmp16a, — $30 ;add 0x30

sbrc tmp16a,7 ;if bit 7 not clear

st Z,tmp16a ;store back

cpi ZL,AtBCD0 ;done all three?

brne bBCDx_3 ;loop again if not

rjmp bBCDx_1

Использование встроенного АЦП

Встроенный АЦП последовательного приближения входит в состав почти всех МК семейства Mega и большинства МК семейства Tuny, кроме простейших младших моделей. В семействе Classic был только один тип МК со встроенным АЦП — AT90S8535 — несколько доработанный вариант популярного AT90S8515. На примере его Mega-версии под названием ATmega8535 мы в дальнейшем и разберем работу встроенного АЦП, но сначала стоит сделать несколько общих замечаний.

Все встроенные АЦП многоканальные и 10-разрядные (за небольшим исключением — например, в ATmega8 из 6 каналов только четыре имеют разрешение 10 разрядов, а оставшиеся два — 8). Многоканальность означает, что имеется только одно ядро преобразователя, которое по желанию программиста может подключаться к одному из входов через аналоговый мультиплексор, наподобие разобранного в главе 8 561КП2. Если вы, как чаще всего и бывает, задействуете лишь часть входов, то остальные могут использоваться как обычные порты ввода/вывода. В разных моделях число каналов колеблется от 4 до 16, причем в некоторых из них выводы АЦП можно коммутировать попарно так, чтобы получить АЦП с дифференциальным входом (тогда измеряется разность напряжений между этими входами, а не абсолютное значение относительно «земли»). Добавим еще, что в некоторых моделях все или часть входов в дифференциальном режиме могут иметь добавочный коэффициент усиления (10, 20 или 200).

Все эти «примочки» дополнительно снижают и без того не слишком высокую точность АЦП, которая номинально составляет для несимметричного (недифференциального) входа ±2 LSB, плюс еще 0,5 LSB за счет нелинейности по всей шкале. Фактически такой АЦП с точки зрения абсолютной точности соответствует 8-разрядному. При соблюдении всех условий эту точность, впрочем, можно повысить, правда, условия довольно жесткие и включают в себя как «правильную» разводку выводов АЦП, так и, например, требование остановки цифровых узлов на время измерения, чтобы исключить наводки (специальный режим ADC Noise Reduction). В дифференциальном режиме есть свои специальные приемы повышения точности. В общем, как и всегда в таких случаях, для получения хорошего результата аналого-цифрового преобразования требуются определенные усилия и некоторый опыт.

Чтобы не углубляться в детали этого процесса и не загромождать программу, мы в дальнейшем поступим проще — предпримем ряд мер, чтобы обеспечить стабильность результата, а абсолютную ошибку скомпенсируем за счет калибровки, которая все равно потребуется. Для начала давайте посчитаем, какие, собственно, ошибки нас могут устроить. Максимально достижимая точность с помощью 10-разрядного преобразователя составляет 0,1 % (1/1024, или ±0,5 LSB) приведенной погрешности (т. е. погрешности от всей шкалы измерения). Для бытовых измерений это достаточно высокая величина, например, большинство портативных мультиметров имеют точность раз в пять хуже, обладая погрешностью порядка 0,5 %. АЦП в 10 разрядов может, например, обеспечить точность измерения температуры 0,1° для стоградусной шкалы (от -50 до +50°).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Юрий Ревич читать все книги автора по порядку

Юрий Ревич - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Занимательная микроэлектроника отзывы


Отзывы читателей о книге Занимательная микроэлектроника, автор: Юрий Ревич. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x