Итак...начнем по порядку
1) Компилятор новый хрень полная...неудобный переделанный не в лучшую сторону...может они что с либами переделали но по коду - абсолютно идентичен...
2) Фокус с циферками....ну тут всё не так просто как хотелось бы... 1 что надо уяснить - МК штука 8-мибитная....потому всё в ней делается через циферку 8 и 2....флоат это попытка уйти от этих цифер но она есть гранулируемая...тоесть точность флоата не бесконечна...чем большее число вписывается в флоат тем меньше точность ...для числа 800000000 точность всего 0.5!!!
так вот...случилось так что у меня все коэффициенты совпали с делителем 8....тоесть 40 последовательных измерений 8 тактов экрана в секунду 8 мегагерц, 3600 тактов на импульс...они все кратны 8-ке...вот и вышла боком такая кратность ... погрешности флоатов при делениях и умножениях - складываются....получилось гранула флоата - 10.001 ) поправил коэффициенты 41 3599.9 и так далее - всё встало в естественное русло..но это всё виртуально...
3) скорость перерисовки - я применил 4 ступенчатую обработку -
1 ступень это наша первая часть - измеритель длительности и пересчет её в частоту и ватты...она очень хорошо отрабатывает длинные затяжные импульсы но и очень сильно реагирует на нестабильность этой длительности...
2 ступень это сглаживание вывода на экран ... тоесть есть FIFO буффер 40 флоатов в каждый по очереди записывается новое расчитанное значение ватт .. а на экран выводится их среднее арифметическое
3 ступень - это новшенство - замер количества импульсов за секунду, соответственно считается лонгинтами и есть целое значение частоты ... она сильно прыгала ибо на низцих частотах она себя не оправдывает - нормально начинает работать за 1 килогерцем...
4 ступень - это стек(FIFO) кол-ва импульсов - есть 40 ячеек лонгинтов в которые по очереди записываются количество импульсов за 1/8 секунды ... потом это всё дело суммируется , делится на 8 - получается частота уже дробная и очень стабильная....но не точная на низких частотах ( от 10 герц ) старые по времени значения заменяются новыми поэтому если выключателем лампы ШИМить 50% то и мощность на экране получится 50% от мощи лампы + стартовые токи
4) Дальше логика смотрит какой метод расчета наиболее точен для данного диапазона частоты (или комбинированный метод на частотах для 300...800 ватт) ну и дальше в выходной усредняющий буффер...
последствия данных преобразований - программа помнит историю длительностей импульсов за последние 10 секунд....поэтому при подаче стабильной частоты выше 5 герц - выход нарастает плавно и так же плавно спадает пока не опускается до момента включения замера длительности импульса......а дальше показания могут и застыть и ждать в таком состоянии уже истечение таймаута (60 секунд) и только тогда сброситься в полный ноль...
5) прерывания на частотах выше 10 герц отключаются и измерение ведется только количеством импульсов...как следствие - частоту можно поднимать хоть до 20 мегагерц(при 8-ми системных) и точность с увеличением частоты увеличивается(приближается к точности самого задающего кварца системы)
поэтому в готовом устройстве нужно поставить фузы на работы в полной амплитуде кварцевого резонатора, обеспечить стабильное питание и экранировку кварцевых дорожек...
6) Колличество данных сохраняемых в еепром увеличилось...следовательно возросло и время сохранения этих данных в еепром - она же очень медленная....потому теперь нужно или очень точно ловить момент пропадания питания или увеличивать ёмкость конденсатора резервного питания...естественно экран питать чем-то ДО конденсатора меги... Я применил резисторный делитель чтоб при питании 10 вольтами у меня на инт0 была лог 1 а при 9.9 уже ноль...ну и конечно же примених на высоковольтной части(до кренки) кандер - там он может быть меньшей ёмкости но не в ущерб длительности автономной работы....
впрочем у меня сейчас с кренки питается и ЖКИ и мега с одного и того же кандера...в 1000 микрофарад....и всё прекрасно успевает сохраняться...смотрите фузы....нужно поставить BOD включенным и на напряжение 2.7 вольт....тогда времени просто предостаточно будет....
7) Ввел два счетчика которые сохраняются при выключении питания, каждый работает асинхронно и каждый индивидуально можно сбросить....они выводатня на 3-й и 4-й строке экрана или в менюшке сброса...
Показания киловаттчасов текущие после пропадания питания не сохраняются...просто для удобства...обычно надо просто подкинуть девайс на час-другой...на нагрузку и посмотреть сколько нагорит за час...
9) Хочу применить часы реального времени....это избавит от необходимости калибровать встроенные часики и вообще позволит отказаться от кварца для меги - вместо этого точный сигнал секунд надо будет снять с ДС-ки..но так как дски у меня нет то будет это наверное не скоро...
10) со временем прилеплю внешнее еепром для ежесекундных и ежеминутных записей показаний мощности и киловаттчасов и сделаю опторазвязанный интерфейс COM порта для связи с компьютером....ну и на компьютер напишу програмульку чтоб в удобном виде этими данными управлять сохранять открывать и просматривать как в табличном виде так и на графике...екселе и т.д. там полёт фантазии совершенно отдельный...
П.С. девайс то у меня уже есть....нет только самого счетчика....точнее теперь и он тоже есть....сегодня приобрёл в электротоварах выключатель на 20 ампер корпус с крышечкой прозрачной откидной(под два пакетника на стенку) и тройник такой же длины как корпус - три розетки любого формата на 25 ампер...очень удачной конструкции и довольно плоский...сегодня если успею до вечера - уже всё будет собрано скомпоновано и смонтировано в корпус ну и конечно же подключено к холодильнику
потом будет электроплитка и бойлер
- Вложения
-
- 35_WattMeter.rar
- Новое обновлениеце
- (430.56 KiB) Скачиваний: 347