извините за столь нерациональное использование пространства...
в том и вся беда, что ето не какой не макрос (или, может, я чого то не понимаю...)
просто перед тем как вызвать задержку, в AL заносится число, потом в процедуре задержки копируеться в _Stm1 - таемер. и тут то чудеса: _Stm1 сравнивается с 0 (хотя никак не меняется в цикле) и каким то странным образом програма из него выходит. никаких переполнений счетчика или сигнала от компаратора я не наблюдал. мне кажеться, их бить то и не может.
чето я не понимаю...
Здравствуйте.
Загнал исходник в студию и выполнил подпрограмму dly. Перед в входом в нее запускается таймер Т0, который через каждые 9985 тиков кварца вызывает прерывание и, в итоге, после вывода на индикатор и обслуживания клавиатуры уменьшает содержимое R14=_Stm1.
Может, кто просветит, как она работает...
Идею работы осветил Деда, а вот аппаратную реализацию для AT90S2313 попробую я. Если еще актуально. Работа схемы основана на приятной возможности таймеров современных микроконтроллеров, а именно, режимом захвата текущего состояния таймера специальным регистром ICR1 в момент прихода активного фронта команды, в качестве которой в данном контроллере может выступать PD6/ICP или выход аналогового компаратора (в данном случае).
Итак после всех предустановок измеряемый конденсатор разряжен лапой PB0, настроенной на вывод 0. Таймер Т1 остановлен. Далее
-лапа PB0 переводится в Z-состояние, запускается таймер и начинается заряд конденсатора
-в момент сравнения напряжения на конденсаторе с напряжением 0.17Uпит, аналоговый компаратор вызывает прерывание tc1_cap и значение таймера переписывается в ICR1 и запоминается
- на инвертирующем входе компаратора (отключение резистора R1 от делителя переводом PB2 в Z-состояние) устанавливается напряжение 0.5Uпит и ожидается еще одно прерывание tc1_cap, но уже для момента сравнения с новым порогом. Это значение также запоминается вместе со старшей частью значения, в качестве которого выступает накопленное число переполнений Т1.
Далее из конечного значения вычитается начальное, проводится расчет емкости, вывод на индикацию.
Здесь просили оттранслированные файлы
Продолжаем...
Преобразуем базовую формулу для получения более подходящего выражения.
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
ОГРОМНОЕ спасибо
Здравствуйте.
Загнал исходник в студию и выполнил подпрограмму dly. Перед в входом в нее запускается таймер Т0, который через каждые 9985 тиков кварца вызывает прерывание и, в итоге, после вывода на индикатор и обслуживания клавиатуры уменьшает содержимое R14=_Stm1.
еще раз извините, но не пойму, как AL связано с Т0, как именно тут запускается Т0 (чето не пойму)
Здравствуйте.
Таймер Т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)
Спасибо ОГРОМНОЕ!!! Понемногу догоняю.
Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.
Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.
PSt600C - не ставил, обошелся внутренним BOD и задержкой (на глаз), с фьюзами поигрался, RESET на Vcc через резюк
cn6box - програмировал МК отдельно
rn2205 - не нашел, взял наши КТ3107Г с резюками (типа аналог rn2205, как на ориг. схеме)
A1048 - тот же КТ3107Г
МК ATTINY2313
И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...
Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.
PSt600C - не ставил, обошелся внутренним BOD и задержкой (на глаз), с фьюзами поигрался, RESET на Vcc через резюк
cn6box - програмировал МК отдельно
rn2205 - не нашел, взял наши КТ3107Г с резюками (типа аналог rn2205, как на ориг. схеме)
A1048 - тот же КТ3107Г
МК ATTINY2313
И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...
Тоесть вы в прошивку основного МК залили дополнение, или установили отдельный Attinyб и пример прошивки тогда можно?
Вопрос такого рода, чем вы заменили PSt600C, cn6box rn2205 и A1048? вот этих зверей ниге не смог найти.
PSt600C - не ставил, обошелся внутренним BOD и задержкой (на глаз), с фьюзами поигрался, RESET на Vcc через резюк
cn6box - програмировал МК отдельно
rn2205 - не нашел, взял наши КТ3107Г с резюками (типа аналог rn2205, как на ориг. схеме)
A1048 - тот же КТ3107Г
МК ATTINY2313
И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...
ок спасибо, все понял...
И вопросик, зачем такая большая частота и почему 1 и 100 nF при калибровке. Эот как то относится к диапазону? Но ведь прибор меряет и меньше 1, и больше 100 nF...
Здравствуйте. Очень правильный вопрос.
Частота тактирования в этом приборе на точность измерений не влияет и может быть любая и определяется, в основном, выполнением требования отсутствия стробоскопических эффектов динамической индикации.
Если посмотреть на выражение, согласно которому в приборе вычисляется емкость
Cx=(nx/no)*Co, видно, что на отношение (nx/no) особых ограничений не накладывается . Поэтому прибор может после калибровки измерять емкости как больше, так и меньше Со.
Спасибо, понятно. А как же с номиналами калибровочних конденсаторов? Почему именно такие номиналы?