ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
912760 Топик полностью
Гудвин, волшебник (27.03.2019 17:47 - 23:08, просмотров: 338) ответил Гудвин на Что то тихо тут совсем стало. Вбрасываю: К одному из входов компаратора MSP через резистор 20 кОм подключена емкость 2200 пФ на землю (так уж вышло неудачно. Изменить невозможно). Второй вход компаратора можно подключить внутри к встроенному
В общем, "высокоточный программно-емкостный реостат" тупо не уместился в отведенные на все-про все 2.5 кБ flash :) Посему применил способ для определения "конченности" батареи в пределах 2В (манипуляция с делителем 0.25Vcc и опорой. Зависит только от их точности). Ну и добавил довесок, позволяющий при тактовой 800 кГц на "излете экспоненты" таки замерить несколько градаций выше этих 2В. Уже трудится, если чО ;) На картинке внизу справа девайс 10-летней давности, залитый компаундом . Наконец удалось подлезть к нему и полностью диагностировать. Имхо, передатчик скопытился еще после заливки - ПАВ резонатор не силах "захватить" сильно ушедшую при этом вниз частоту трехточки. Кстати, частоту замеряю "анализатором спектра", етить. На плате ридера имеется радиомодуль CC1101 на 868 Мгц. Он прекрасно чувствует расположенный поблизости передатчик на 434 и с откушенной антенной(чтобы не лезли помехи). 40 каналов с шагом 25 кГц с центральной частотой 433.92. char tst_bat(unsigned char t) { char i; WDTCTL = WDT_ADLY_250; // отменим WDT прерывания на 250 мс CS_ON; // отключим выход DATA MCP2030A (порт 2.4 DATA) DATA_0; // разрядим емкость в RC цепочке, чтобы заряд происходил всегда от Vss DATA_OUT; // порт 2.4 DATA в 0 delay(40); // достаточное время разряда DATA_IN; // порт 2.4 DATA на вход CAPD=CAPD4; // вообще отключим "цифру" от порта 2.4 "DATA" CACTL2 = P2CA1; // P2.4 подцепим к CA1 CACTL1 = CAREF_1 + CAON + CARSEL; // подадим на P2.4 0.25*Vcc, включим компаратор delay(t); // заряжаем RC цепь от 0.25*Vcc в течении времени "t" CACTL1 = CAREF_2 + CAREF_1 + CAON; // подключим ref 0.5V к входу CA0, включим компаратор i = CACTL2 & CAOUT; // запомним состояние выхода компаратора CACTL1 = 0; // выключим компаратор CAPD=0; // вернем на родину "цифру" CS_OFF; // вернем на родину выход DATA MCP2030A (порт 2.4 DATA) return(i); // вернем результат замера } void check_batt(void) { if (tst_bat(150)) {Vbat=20; return;} // "Приплыли". Здесь самое точное измерение, зависящее только от точности REF и делителя 0.25Vcc MSP. if (tst_bat(40)) {Vbat=21; return;} // Здесь и ниже +- лапоть, но устраивает для диагноза if (tst_bat(35)) {Vbat=22; return;} if (tst_bat(30)) {Vbat=23; return;} if (tst_bat(27)) {Vbat=24; return;} if (tst_bat(23)) {Vbat=25; return;} Vbat=30; // напряжение в норме (выше 2.5В)... // RF_OFF; // выключим передатчик (нагрузка 2 мА), если он был включен для теста // с выключеним лопухнулся, посему закомментарил. ON/OFF изображу в main() // осталось еще пара десятков байтиков во flash ;) }
image