Цифровой измеритель...
 
Уведомления
Очистить все

Цифровой измеритель ёмкости elm-chan`а

154 Посты
25 Пользователи
0 Likes
178.4 Тыс. Просмотры
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

извините за столь нерациональное использование пространства...
в том и вся беда, что ето не какой не макрос (или, может, я чого то не понимаю...)
просто перед тем как вызвать задержку, в AL заносится число, потом в процедуре задержки копируеться в _Stm1 - таемер. и тут то чудеса: _Stm1 сравнивается с 0 (хотя никак не меняется в цикле) и каким то странным образом програма из него выходит. никаких переполнений счетчика или сигнала от компаратора я не наблюдал. мне кажеться, их бить то и не может.
чето я не понимаю...


ОтветитьЦитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 15 лет назад
Сообщения: 144
 

Здравствуйте.
Загнал исходник в студию и выполнил подпрограмму dly. Перед в входом в нее запускается таймер Т0, который через каждые 9985 тиков кварца вызывает прерывание и, в итоге, после вывода на индикатор и обслуживания клавиатуры уменьшает содержимое R14=_Stm1.


ОтветитьЦитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 15 лет назад
Сообщения: 144
 

Может, кто просветит, как она работает...

Идею работы осветил Деда, а вот аппаратную реализацию для AT90S2313 попробую я. Если еще актуально. Работа схемы основана на приятной возможности таймеров современных микроконтроллеров, а именно, режимом захвата текущего состояния таймера специальным регистром ICR1 в момент прихода активного фронта команды, в качестве которой в данном контроллере может выступать PD6/ICP или выход аналогового компаратора (в данном случае).

Итак после всех предустановок измеряемый конденсатор разряжен лапой PB0, настроенной на вывод 0. Таймер Т1 остановлен. Далее
-лапа PB0 переводится в Z-состояние, запускается таймер и начинается заряд конденсатора
-в момент сравнения напряжения на конденсаторе с напряжением 0.17Uпит, аналоговый компаратор вызывает прерывание tc1_cap и значение таймера переписывается в ICR1 и запоминается
- на инвертирующем входе компаратора (отключение резистора R1 от делителя переводом PB2 в Z-состояние) устанавливается напряжение 0.5Uпит и ожидается еще одно прерывание tc1_cap, но уже для момента сравнения с новым порогом. Это значение также запоминается вместе со старшей частью значения, в качестве которого выступает накопленное число переполнений Т1.
Далее из конечного значения вычитается начальное, проводится расчет емкости, вывод на индикацию.
Здесь просили оттранслированные файлы


ОтветитьЦитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 15 лет назад
Сообщения: 144
 

Продолжаем...
Преобразуем базовую формулу для получения более подходящего выражения.
C=t*K, где K- коэффициент пропорциональности
После калибровки по конденсатору 10Е-7 получаем окончательное выражение
Cx=tx*Co/to или в тиках кварца nx*Co/no

Числовой пример
1. Калибровка
Fclk=10МГц
Ro=3.3МОм
Co=10E-7
n(0.17)=613'800
n(0.5)=2'287'380
n(0.5)-n(0.17)=1'673'580
это число записывается в EEPROM
2. Измерение емкости конденсатора 68Е-9
Fclk=10МГц
Ro=3.3МОм
n(0.17)=417'384
n(0.5)=1'555'422
n(0.5)-n(0.17)=1'138'038
Cx=1'138'038*1/1'673'580=0,68000*10Е-7=68Е-9=68nF


ОтветитьЦитата
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

ОГРОМНОЕ спасибо
Здравствуйте.
Загнал исходник в студию и выполнил подпрограмму dly. Перед в входом в нее запускается таймер Т0, который через каждые 9985 тиков кварца вызывает прерывание и, в итоге, после вывода на индикатор и обслуживания клавиатуры уменьшает содержимое R14=_Stm1.

еще раз извините, но не пойму, как AL связано с Т0, как именно тут запускается Т0 (чето не пойму)


ОтветитьЦитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 15 лет назад
Сообщения: 144
 

Здравствуйте.
Таймер Т0 запускается макросом outi, объявленном в avr.inc
outi TCCR0, 0b100 ;TC0.ck = 39kHz
и более нигде не останавливается.

Если посмотреть на выделенное красным в картинке CMC_1(AVR STUDIO 3.21), видно, что Т0 запущен и прерывания по его переполнению разрешены.
На картинке CMC_2 показан переход на пп dli и перенос содержимого AL(R16) в _Stm1(R14)
На картинке CMC_3 показан переход на обработчик прерывания переполнения Т0 в точке перехода на сканирование клавиатуры, где идет собственно уменьшение содержимого _Stm1(R14)


ОтветитьЦитата
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

Спасибо ОГРОМНОЕ!!! Понемногу догоняю.


ОтветитьЦитата
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

Вот мой вариант с некоторыми изменениями


ОтветитьЦитата
fox
 fox
(@fox)
Active Member
Присоединился: 14 лет назад
Сообщения: 12
 

Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.


ОтветитьЦитата
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.

PSt600C - не ставил, обошелся внутренним BOD и задержкой (на глаз), с фьюзами поигрался, RESET на Vcc через резюк

cn6box - програмировал МК отдельно

rn2205 - не нашел, взял наши КТ3107Г с резюками (типа аналог rn2205, как на ориг. схеме)

A1048 - тот же КТ3107Г

МК ATTINY2313

И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...


ОтветитьЦитата
fox
 fox
(@fox)
Active Member
Присоединился: 14 лет назад
Сообщения: 12
 

Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.

PSt600C - не ставил, обошелся внутренним BOD и задержкой (на глаз), с фьюзами поигрался, RESET на Vcc через резюк

cn6box - програмировал МК отдельно

rn2205 - не нашел, взял наши КТ3107Г с резюками (типа аналог rn2205, как на ориг. схеме)

A1048 - тот же КТ3107Г

МК ATTINY2313

И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...

Тоесть вы в прошивку основного МК залили дополнение, или установили отдельный Attinyб и пример прошивки тогда можно?


ОтветитьЦитата
fox
 fox
(@fox)
Active Member
Присоединился: 14 лет назад
Сообщения: 12
 

Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.

PSt600C - не ставил, обошелся внутренним BOD и задержкой (на глаз), с фьюзами поигрался, RESET на Vcc через резюк

cn6box - програмировал МК отдельно

rn2205 - не нашел, взял наши КТ3107Г с резюками (типа аналог rn2205, как на ориг. схеме)

A1048 - тот же КТ3107Г

МК ATTINY2313

И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...

ок спасибо, все понял...


ОтветитьЦитата
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

Перекомпилировал для Attiny2313.


ОтветитьЦитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 15 лет назад
Сообщения: 144
 

И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...
Здравствуйте. Очень правильный вопрос.
Частота тактирования в этом приборе на точность измерений не влияет и может быть любая и определяется, в основном, выполнением требования отсутствия стробоскопических эффектов динамической индикации.
Если посмотреть на выражение, согласно которому в приборе вычисляется емкость
Cx=(nx/no)*Co, видно, что на отношение (nx/no) особых ограничений не накладывается . Поэтому прибор может после калибровки измерять емкости как больше, так и меньше Со.


ОтветитьЦитата
maxim
(@maxim)
Eminent Member
Присоединился: 14 лет назад
Сообщения: 38
 

Спасибо, понятно. А как же с номиналами калибровочних конденсаторов? Почему именно такие номиналы?


ОтветитьЦитата
Страница 2 / 11