Вы находитесь на странице: 1из 9

7/5. Использование модуля 10-разрядного АЦП при измерении тока.

Работа с
внешним источником опорного напряжения. Измеритель тока (от 0 до 999 ма.,
разрешающая способность 1 ма., с возможностью изменения этих параметров).

Теперь, "на повестке дня", вопрос о принципе измерения тока и его практической
реализации.
Этот принцип очень прост: ток переводится в напряжение.
Уровень этого напряжения и измеряется.
Значит, в разрыв цепи соединяющей блок питания с нагрузкой, нужно включить
резистор, причем, низкоомный.
Чем меньше напряжения на нем "падает", тем лучше.
А раз это так, то и уровень того напряжения, которое нужно измерить, будет низок.
Следовательно, "квантовка" от GND до U источника питания ПИКа не подойдет.
Нужно перейти на более "узкий" диапазон квантования.
От какого уровня?
От нуля, так как нижний "предел" значения тока = 0.
До какого уровня?
А вот тут нужно подумать.
Во-первых, нужно определиться с номиналом измерительного резистора (Rизм.).
Обычно, его номинал либо 0,1 ом, либо 1 ом, либо 10 ом.
При прочих, равных условиях, Rизм.= 0,1 ом, конечно же, гораздо лучше, чем
Rизм.= 1 ом, а тем более Rизм.= 10 ом, но уровень падения напряжения на нем
маловат.
Это вовсе "не смертельно", но достаточно специфично.
Для начала, с целью "въезда в механику действа", лучше "привязаться" к одному ому,
а там, глядишь, и "до специфики рукой подать" (опыт в этом деле "на дороге не
валяется").
Так и сделаю.
С учетом того, что имеется 3 десятичных разряда, максимальная величина показаний
составляет 999.
Для разнообразия, "убью" десятичную запятую (надоела).
"Привяжусь" к разрешающей способности 1 ма., что, с учетом номинала Rизм. = 1 ом.,
соответствует "шагу" квантования 1 мв.
Уровней квантования 1024 штуки (10-разрядное АЦП), следовательно, с учетом того,
что замер происходит от нуля, верхняя "граница" диапазона квантования по уровню
должна быть равна 1 мв. х 1024 = 1,024 вольта.
Это значительно меньше чем Uпит. ПИКа.
Значит, хочешь – не хочешь, а на внешний источник опорного напряжения перейти
придется.
Вывод: внешний источник опорного напряжения должен "выдавать" напряжение = 1,024 в.
и это напряжение должно быть подано на вывод RA3.
Соответственно, выбираю настройку строки №6 (см. таблицу подраздела 7/1) - 0101.
Примечание: в данном случае, можно выбрать или настройку строки №6, или
настройку строки №2.
Так как верхняя "граница" диапазона квантования определяется не значением
напряжения источника питания, а тем, что "выдает" источник опорного напряжения, то
Uпит. ПИКа вовсе не обязательно делать равным 5,12 в. (как в предыдущих
случаях/подразделах).
В простейшем и самом распространенном случае, источник опорного напряжения есть
обычный, резисторный делитель напряжения, вход которого подключен к Uпит. ПИКа.
На вывод RA3 подается напряжение с его нижнего плеча.
Это напряжение и есть опорное напряжение, значение которого можно точно задать.
Если напряжение источника питания ПИКа стабильно, то, наряду с возможностью
точного задания значения опорного напряжения, имеет место быть и вполне
приемлемая стабильность его уровня.
Если делитель напряжения состоит из однотипных, постоянных резисторов с
одинаковыми температурными коэффициентами сопротивления, то, в идеале, при

1
изменении температуры, номиналы резисторов будут "синхронно" увеличиваться или
уменьшаться, а коэффициент деления (Uвых. делителя) останется неизменным.
Реально же, зависимость Uвых делителя от температуры имеется, но, с учетом
сказанного, ее можно минимизировать.
Можно сформировать опорное напряжение с помощью стабилитрона, но в этом случае,
трудно точно подобрать нужное значение опорного напряжения, да и стабилитрон на
такое низкое напряжение, как 1 вольт, найти сложновато.
Естественно, имеются и другие, более сложные, источники опорного напряжения (в том
числе и на м/схемах), которые вполне можно применить, но, на мой взгляд, в данном,
"первородном" случае, усложнять устройство не стоит.
Идеальный источник опорного напряжения имеет выходное сопротивление стремящееся
к нулю.
Естественно, что "в жизни такого не бывает", но к этому нужно стремиться (в
разумных пределах).
В связи с этим, резисторный делитель напряжения, формирующий опорное напряжение,
должен состоять из резисторов с относительно малыми номиналами.
Дело в том, что при старте преобразования (при поднятии флага статуса модуля
АЦП), потребление тока от источника опорного напряжения возрастает до 1 ма.
за 8 … 20 нс.
Источник опорного напряжения должен "выдерживать" такую нагрузку в том смысле,
чтобы эта "бяка" не приводила к сколь либо существенному уменьшению заданной
величины опорного напряжения.
По этой причине, нужно ориентироваться на значение тока, протекающего через
делитель, равное 8 … 10 ма., плюс, подключить к выводу RA3 конденсатор
"вольтдобавки" с малым током утечки (он же - блокировочный для помех).
С учетом сказанного, "родилось сие творение":

В случае использования этого устройства в качестве встроенного, в блок питания,


модуля индикации потребляемого тока, лучше запитать этот модуль от отдельной
обмотки силового трансформатора этого блока питания или от отдельного ("своего")
трансформатора ("развязка" по питанию).
Резистор R1 - МЛТ-2. Можно другого типа, мощностью не менее 2 вт.
А можно и намотать.
Резистор R2 нужен для обеспечения Rвых. источника сигнала, обеспечивающего
заданное значение Tacq (20 мкс.).
2
Если, после окончания перезаряда конденсатора Hold, на R2 и "падает" какое-то
напряжение, то оно мизерное (можно пренебречь), так как в этом состоянии (Hold
перезарядился), входное сопротивление вывода RA0 очень высоко.
Вот, собственно говоря, и все "премудрости".
Программа под это "сооружение" называется Analog_4.asm (прилагается):

;********************************************************************************
; Analog_4.asm 3-разрядный измеритель тока
; (с гашением незначащих нулей в двух левых индикаторах).
;--------------------------------------------------------------------------------
; Задействуется модуль АЦП.
; Для индикации показаний применена линейка из трех 7-сегментных индикаторов
; (общий катод).
; Индикация - динамическая.
; Диапазон измерения от 0 мА. до 999 мА.
; Разрешающая способность 1 мА., поэтому десятичная запятая не выставляется.
; Номинал измерительного R = 1 ом.
; Uref = 1,024 вольта.
;********************************************************************************
; "Практикум по конструированию устройств на PIC контроллерах"
; (http://ikarab.narod.ru)
; Корабельников Евгений Александрович karabea@Lipetsk.ru
;********************************************************************************
; Функции выводов порта А:
; RA0 - активный входной канал АЦП,
; RA3 - вход Uref (на него подается опорное напряжение).
; остальные выводы порта А не задействованы.
; Функции выводов порта В:
; RB0...RB7 - управление секторами A,B,C,D,E,F,H,G.
; Функции выводов порта С:
; RC0...RC2 - выходы дешифратора,
; остальные выводы порта C не задействованы.
; Кварц 4000 Кгц (1 м.ц.= 1 мкс.).
; Используется PIC16F873A.
;----------------------------------------------
; Объем программы: 120 слов в памяти программ.
;================================================================================
LIST p=16F873A ; Задание типа микроконтроллера.
__CONFIG 3F31H ; XT-генератор, PWRT вкл., защита выкл., сброс
; BOR запрещен, LVP выкл., DEBUG выкл.
;================================================================================
; Регистры специального назначения.
;================================================================================
IndF equ 00h ; Доступ к памяти через FSR.
PCL equ 02h ; Счетчик команд.
Status equ 03h ; Регистр Status.
FSR equ 04h ; Регистр косвенной адресации.
PortB equ 06h ; Регистр защелок порта B.
PortC equ 07h ; ----------"---------- C.
TrisB equ 06h ; Регистр выбора направлений работы
; выводов порта В (банк 1).
TrisC equ 07h ; ----------"---------- C (банк 1).
AdresH equ 1Eh ; Регистр старшего байта результата АЦП.
AdresL equ 1Eh ; Регистр младшего байта результата АЦП
; (банк 1).
Adcon0 equ 1Fh ; Регистр настройки модуля АЦП.
Adcon1 equ 1Fh ; Регистр настройки модуля АЦП (банк 1).
;================================================================================
; Регистры общего назачения.
;================================================================================
LED0 equ 20h ; Регистр хранения результатов преобразований
; 1-го двоично-десятичного разряда.
LED1 equ 21h ; ------- 2-го -------------------------
LED2 equ 22h ; ------- 3-го -------------------------
Index equ 24h ; Счетчик количества малых колец индикации.
3
Count equ 25h ; Счетчик количества больших колец индикации.
Temp equ 26h ; Регистр временного хранения данных.
Mem equ 27h ; Регистр оперативной памяти.
Temp_L equ 28h ; Регистр младшего разряда 2-байтного
; двоичного числа.
Temp_H equ 29h ; Регистр старшего разряда 2-байтного
; двоичного числа.
;================================================================================
; Определение места размещения результатов операций.
;================================================================================
W equ 0 ; Результат направить в аккумулятор.
F equ 1 ; Результат направить в регистр.
;================================================================================
; Присвоение битам названий.
;================================================================================
C equ 0 ; Флаг переноса-заема.
Z equ 2 ; Флаг нулевого результата.
RP0 equ 5 ; Бит выбора банка.
GO equ 2 ; Бит статуса модуля АЦП.
;================================================================================
org 0 ; Начать выполнение программы
; с 0-го адреса PC.
;********************************************************************************

;********************************************************************************
; НАЧАЛО ПРОГРАММЫ.
;********************************************************************************
; Подготовительные операции.
;================================================================================
; Перевод в пассивное состояние всех выходов дешифратора
; (для исключения "мелькания" при включении питания).
;-------------------------------------------------------
movlw b'11111111' ; Предустановка состояний выходов дешифратора
movwf PortC ; RC2...RC0 (RC7..3 устанавливаются в 1
; "за компанию").
;-------------------------------------------
; Настройка направлений работы.
;-------------------------------------------
bsf Status,RP0 ; Переход в 1-й банк.
clrf TrisB ; Все выводы порта В работают на выход.
clrf TrisC ; Все выводы порта С работают на выход.
;-------------------------------------------
; Работа с регистром Adcon1.
;-------------------------------------------
movlw b'10000101' ; Диапазон квантования напряжения от GND до
movwf Adcon1 ; +Uref, AN0,AN1-аналоговые входы, AN2,AN4-
; цифровые каналы ввода/вывода, AN3-вход Uref,
; правое выравнивание.
bcf Status,RP0 ; Переход в 0-й банк.
;================================================================================
; Циклическая подпрограмма измерения уровня аналогового сигнала, присутствующего
; на выводе RA0, обработки результата измерения и его вывода на индикацию.
;================================================================================
; Работа с регистром Adcon0.
;-------------------------------------------
SNOVA movlw b'01000001' ; Включение модуля АЦП, выбор канала AN0
movwf Adcon0 ; (RA0), источник тактового сигнала Fosc/8,
; состояние ожидания, конденсатор подключен к
; выбранному аналоговому входу и начал
; перезаряжаться.
;------------------------------------------------
; Задержка для перезаряда конденсатора.
;------------------------------------------------
movlw .6 ; Стандартный,
4
movwf Count ; вычитающий,
decfsz Count,F ; однобайтный
goto $-1 ; счетчик.
;-------------------------------------------
; Начало аналого-цифрового преобразования.
;-------------------------------------------
bsf Adcon0,GO ; Включение преобразования. Конденсатор
; отключается от аналогового входа на время
; преобразования.
;-------------------------------------------
; Ожидание окончания АЦП ("плавающая" задержка).
;-------------------------------------------
btfsc Adcon0,GO ; Ожидание окончания аналого-цифрового
goto $-1 ; преобразования.
;-------------------------------------------
; АЦП закончено. Результат - в AdresH/AdresL.
; Копирование результата в Temp_H/Temp_L.
;-------------------------------------------
bsf Status,RP0 ; Переход в 1-й банк.
movf AdresL,W ; AdresL --> W.
bcf Status,RP0 ; Переход в 0-й банк.
movwf Temp_L ; W --> Temp_L.

movf AdresH,W ; AdresH --> W.


movwf Temp_H ; W --> Temp_H.
;-------------------------------------------
; В Temp_H/Temp_L "лежит" результат АЦП.
;-------------------------------------------
; Теперь модуль АЦП можно выключить.
;-------------------------------------------
clrf Adcon0 ; Для снижения потребляемого устройством тока,
; модуль АЦП выключается до конца отработки
; текущего полного цикла программы.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ГРУППА ПОДПРОГРАММ ПРЕОБРАЗОВАНИЯ 2-БАЙТНЫХ ДВОИЧНЫХ ЧИСЕЛ В 3-РАЗРЯДНЫЕ
; ДЕСЯТИЧНЫЕ ЧИСЛА (разрядность двоичного числа - 10).
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Подготовка к преобразованию.
;================================================================================
Bin2_10 bcf Status,C ; Сброс флага переноса-заема.
movlw .16 ; "Закладка" в регистр Count1 числа
movwf Count ; проходов преобразования.

clrf LED0 ; Сброс регистра LED0.


clrf LED1 ; -------"------ LED1.
;================================================================================
; Циклический сдвиг влево.
;================================================================================
Loop16 rlf Temp_L,F ; Побитная
rlf Temp_H,F ; "переправка"
rlf LED0,F ; содержимого
rlf LED1,F ; Temp_H/Temp_L
; в LED1/LED0.
decfsz Count,F ; Анализ числа проходов
goto adjDEC ; преобразования.
;================================================================================
; Поразрядное распределение полубайтов регистров LED1 и LED0
; по младшим полубайтам регистров LED2, LED1, LED0.
;================================================================================
movfw LED1 ; Запись младшего полубайта LED1
andlw 0Fh ; в младший полубайт LED2.
movwf LED2 ; --------------------------------

swapf LED0,W ; Запись старшего полубайта LED0


andlw 0Fh ; в младший полубайт LED1.
movwf LED1 ; --------------------------------
5
movfw LED0 ; Запись младшего полубайта LED0
andlw 0Fh ; в младший полубайт LED0.
movwf LED0 ; --------------------------------

goto GASH ; Переход в ПП гашения незначащих нулей.

;================================================================================
; Запись в регистр FSR адресов регистров LED0...1 для дальнейшей косвенной
; адресации к ним в ПП adjBCD.
; Переход к обработке следующего LED - после возврата по стеку.
;================================================================================
adjDEC movlw LED0 ; Запись в регистр FSR, через регистр W,
movwf FSR ; адреса регистра LED0 с дальнейшим переходом
call adjBCD ; в ПП adjBCD (адрес следующей команды
; закладывается в стек).
;---> Возврат по стеку из ПП adjBCD.
movlw LED1 ; -----------------------------
movwf FSR ; То же самое для регистра LED1.
call adjBCD ; -----------------------------
;---> Возврат по стеку из ПП adjBCD.

goto Loop16 ; Переход в ПП Loop16, то есть, на


; следующее кольцо числовых преобразований.
;--------------------------------------------------------------------------------
; Основные операции преобразования двоичных чисел в двоично-десятичные.
;--------------------------------------------------------------------------------
adjBCD movlw 3 ; Суммирование содержимого текущего LED с
addwf 0,W ; числом 03h, с записью результата операции,
movwf Mem ; через регистр W, в регистр Mem.

btfsc Mem,3 ; Анализ состояния бита №3 регистра Mem.


movwf 0 ; Если бит №3 = 1, то содержимое регистра Mem
; копируется в текущий LED.
movlw 30 ; Если бит №3 = 0, то содержимое текущего LED
addwf 0,W ; складывается с константой 30h, с записью
movwf Mem ; результата операции, через регистр W,
; в регистр Mem.
btfsc Mem,7 ; Анализ состояние бита №7 регистра Mem.
movwf 0 ; Если бит №7 = 1, то содержимое регистра Mem
; копируется в текущий LED.
retlw 0 ; Если бит №7 = 0, то регистр W очищается и
; происходит возврат по стеку в ПП adjDEC.
;================================================================================

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ГРУППА КОМАНД ПРЕОБРАЗОВАНИЯ ДВОИЧНО-ДЕСЯТИЧНОГО КОДА
; В КОД 7-СЕГМЕНТНОГО ИНДИКАТОРА.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TABLE addwf PCL,F ; Содержимое счетчика команд PC увеличивается
; на величину содержимого W.
retlw b'00111111' ; ..FEDCBA = 0
retlw b'00000110' ; .....CB. = 1
retlw b'01011011' ; .G.ED.BA = 2
retlw b'01001111' ; .G..DCBA = 3
retlw b'01100110' ; .GF..CB. = 4
retlw b'01101101' ; .GF.DC.A = 5
retlw b'01111101' ; .GFEDC.A = 6
retlw b'00000111' ; .....CBA = 7
retlw b'01111111' ; .GFEDCBA = 8
retlw b'01101111' ; .GF.DCBA = 9
retlw 0 ; ........ = гашение всех сегментов.
;================================================================================
; Подпрограмма гашения незначащих нулей (в LED0, ноль не гасится).
;================================================================================
GASH movf LED2,W ; Если содержимое LED2=0, то в него
6
movlw .10 ; записывается число.10
btfss Status,Z ; (сценарий гашения всех сегментов).
goto DINAM ; Если оно не=0, то рабочая точка программы
movwf LED2 ; "улетает" в ПП динамической индикации.

movf LED1,W ;
movlw .10 ; То же самое,
btfss Status,Z ; только для
goto DINAM ; LED1.
movwf LED1 ;

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ПОДПРОГРАММА ДИНАМИЧЕСКОЙ ИНДИКАЦИИ
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Подготовка счетчика количества малых колец индикации
; Index к началу полного цикла динамической индикации.
;------------------------------------------------------
DINAM clrf Index ; Сброс в 0 содержимого счетчика малых колец
; индикации Index.
;--------------------------------------------------------------------------------
; Запись в регистр Count количества больших колец индикации, которые
; должны быть отработаны за один полный цикл динамической индикации.
;--------------------------------------------------------------------------------
movlw .60 ; .60 --> W.
movwf Count ; W --> Count.

CYCLE movlw b'11111111' ; Предустановка состояний выходов дешифратора


movwf PortC ; RC2...RC0 (RC7..3 устанавливаются в 1
; "за компанию").
;--------------------------------------------------------------------------------
; Подготовка к косвенной адресации: запись в регистр W адреса регистра младшего
; разряда (LED0).
; ("привязка" к 7-сегментному индикатору, с активации которого начинается полный
; цикл 1-го большого кольца индикации).
;--------------------------------------------------------------------------------
movlw LED0 ; Запись в регистр W адреса регистра LED0.
addwf Index,W ; Увеличение адреса регистра LED0 на величину
; числа, записанного в регистре счетчика
; количества малых колец индикации Index,
; c сохранением результата в регистре W.
;--------------------------------------------------------------------------------
; Косвенная адресация.
;--------------------------------------------------------------------------------
movwf FSR ; Копирование содержимого регистра W
; в регистр FSR.
movf IndF,W ; Копирование содержимого регистра с адресом,
; записанным в регистре FSR, в регистр W.
call TABLE ; Условный переход в ПП TABLE.
;---> Возврат по стеку из ПП TABLE.

; Примечание: так как в данном случае, запятая не выставляется, то группа команд


; установки запятой удалена.
;--------------------------------------------------------------------------------
; Вывод десятичной цифры на индикацию.
;--------------------------------------------------------------------------------
movwf PortB ; Вывод содержимого регистра W в порт В.
;================================================================================
; ДЕШИФРАТОР: программная реализация аналога 555ИД7 (для количества выходов = 3).
;================================================================================
movf Index,W ; Index --> W.
;-------------------------------------
; 3-сценарный вычисляемый переход.
;-------------------------------------
addwf PCL,F ; Содержимое счетчика команд PC увеличивается
; на величину содержимого W.
goto D_0 ; Сценарий №1.
7
goto D_1 ; Сценарий №2.
bcf PortC,2 ; Сценарий №3. На выводе RC2 выставляется 0.
goto $+4 ; Завершение дешифровки.
D_0 bcf PortC,0 ; На выводе RC0 выставляется 0.
goto $+2 ; Завершение дешифровки.
D_1 bcf PortC,1 ; На выводе RC1 выставляется 0.
;--------------------------------------------------------------------------------
; Группа команд задержки, определяющей время нахождения одного 7-сегментного
; индикатора в активном состоянии (определяющей время прохождения малого
; кольца индикации).
;--------------------------------------------------------------------------------
movlw .67 ; Запись в регистр Temp
movwf Temp ; времязадающей константы.

decfsz Temp,F ; 1-байтный, вычитающий


goto $-1 ; счетчик (задержка).
;--------------------------------------------------------------------------------
; Увеличение на 1 содержимого счетчика количества малых колец индикации Index
; с последующей проверкой результата инкремента на равенство (или нет) числу .3.
;--------------------------------------------------------------------------------
incf Index,F ; Увеличение на 1 содержимого регистра Index
; с сохранением результата в нем же.
movlw 3 ; Запись в регистр W константы .3.
bcf Status,Z ; Сброс флага нулевого результата Z.
subwf Index,W ; Index - W = ... (результат --> W).
btfss Status,Z ; Результат операции вычитания равен
; или нет нулю?
goto CYCLE ; Если не =0 (в регистре Index - число не
; равное 3), то переход на новое малое
; кольцо индикации.
; Если =0 (в регистре Index - число равное
; 3), то программа исполняется далее.
;--------------------------------------------------------------------------------
; После того, как последовательно активизируются все 3 7-сегментных индикатора
; линейки, - подготовка к переходу на новое большое кольцо индикации.
;--------------------------------------------------------------------------------
clrf Index ; Сброс в 0 содержимого регистра Index.
;--------------------------------------------------------------------------------
; Уменьшение на 1 содержимого счетчика количества больших колец индикации Count.
;--------------------------------------------------------------------------------
decfsz Count,F ; Декремент содержимого счетчика количества
; больших колец индикации Count с сохранением
; результата в нем же.
goto CYCLE ; Если результат декремента не=0, то переход
; на новое большое кольцо индикации.
; Если результат декремента =0, то программа
; исполняется далее (переход на новый полный
; цикл динамической индикации).
;--------------------------------------------------------------------------------
; Выход из ПП динамической индикации.
;--------------------------------------------------------------------------------
clrf PortB ; "Гашение" всех сегментов.
goto SNOVA ; Переход на следующий цикл программы.
;********************************************************************************
end ; Конец программы.

Программа Analog_4.asm отличается от программы Analog_3.asm:


- числовым значением байта регистра Adcon1 (в соответствии с требуемой настройкой
модуля АЦП),
- отсутствием группы команд формирования десятичной запятой.

Для калибровки измерителя тока, нужно обеспечить "протаскивание" замеряемого тока


через "эталонный" амперметр.

8
Калибровка очень проста: изменяя величину напряжения внешнего блока питания (или
значение сопротивления нагрузки), нужно добиться того, чтобы "эталонный" амперметр
показал 500 ма. (середина диапазона измерения).
Затем, вращая движок резистора R4, нужно добиться точно такого же показания в
линейке 7-сегментных индикаторов.
После этого, сопротивление переменного резистора R4 замеряется, и вместо него
устанавливается постоянный резистор соответствующего номинала.
Естественно, что номинал резистора R1 должен как можно точнее соответствовать
одному ому.
Устройство имеет хорошую линейность, в наличии которой можно убедиться,
сверившись с показаниями "эталонного" амперметра в различных точках диапазона
измерения тока.
Можно также убедиться в том, что, после проведения калибровки, на выводе RA3
будет присутствовать напряжение 1,024 вольта или близкое к этому значению (степень
расхождения зависит от степени соответствия номинала резистора R1 одному ому, с
учетом шунтирования нижнего плеча делителя напряжения входным сопротивлением
измерительного прибора).
Изменив номинал резистора R1 на 0,1 ом или 10 ом, можно сузить или расширить
диапазон измерения токов (увеличить или уменьшить разрешающую способность).
В этих случаях, нужно выставить десятичную запятую.

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru