ArDos / дозиметр, часть №1

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

Serhoo - заменить это:

switch (back_mode) {
          case 0: for (uint8_t i = 4; i < 80; i++) graf_lcd(map(rad_buff[(i >> 1) - 1], 0, maxLevel_back, 0, 15), i, 15, 2); break; //инициализируем график
          case 1: //максимальный и средний фон
            drawBitmap(0, 32, dose_min_img, 23, 8);       //строка 2 средн:
            drawBitmap(0, 40, dose_max_img, 23, 8);       //строка 3 макс:
            _init_rads_unit(0, rad_min, 1, 4, RIGHT, 32, 0, RIGHT, 32); //строка 2 минимальный
            setFont(RusFont); //установка шрифта
            if (accur_percent > RAD_ACCUR_START) print("----", 30, 32); //если недостаточно точности
            _init_rads_unit(0, rad_max, 1, 4, RIGHT, 40, 0, RIGHT, 40); //строка 3 максимальный
            break;
        }

На это:

switch (back_mode) {
          case 0: //максимальный и средний фон
            drawBitmap(0, 32, dose_min_img, 23, 8);       //строка 2 средн:
            drawBitmap(0, 40, dose_max_img, 23, 8);       //строка 3 макс:
            _init_rads_unit(0, rad_min, 1, 4, RIGHT, 32, 0, RIGHT, 32); //строка 2 минимальный
            setFont(RusFont); //установка шрифта
            if (accur_percent > RAD_ACCUR_START) print("----", 30, 32); //если недостаточно точности
            _init_rads_unit(0, rad_max, 1, 4, RIGHT, 40, 0, RIGHT, 40); //строка 3 максимальный
            break;
          case 1: for (uint8_t i = 4; i < 80; i++) graf_lcd(map(rad_buff[(i >> 1) - 1], 0, maxLevel_back, 0, 15), i, 15, 2); break; //инициализируем график
        }

ddr2 - Напряжение на счетчике должно быть фиксированное и в пределе допустимого рабочего диапазона. Собственный фон указывается в паспорте(примерный), более точно можно узнать поместив счетчик в толстый свинцовый домик чтоб по максимуму отсечь внешнее воздействие, все что останется - и есть собственный фон.

ddr2
Offline
Зарегистрирован: 27.12.2020

mambavamba14 пишет:
Напряжение на счетчике должно быть фиксированное и в пределе допустимого рабочего диапазона.

А зачем фиксировать например ровно 400 В если плато работы 100В ? Причём пишут что счёт начинается с 320 до 280 В.

mambavamba14 пишет:
Собственный фон указывается в паспорте(примерный), более точно можно узнать поместив счетчик в толстый свинцовый домик чтоб по максимуму отсечь внешнее воздействие, все что останется - и есть собственный фон.
Это понятно, но есть ли зависимость этого собственного фона от напряжения на лампе, например если снизить напряжение до 320 В, собственный фон снизится? 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Это не сайт глючит, это страницу после отправки комментария обновлять не недо.

"Плато" хоть таковым и называется, но тоже имеет наклон. Выше напряжение - выше показания при одном и том же фоне. Паспортные данные на счётчик сняты при 390-400 вольтах.

ddr2
Offline
Зарегистрирован: 27.12.2020

tekagi пишет:
"Плато" хоть таковым и называется, но тоже имеет наклон. Выше напряжение - выше показания при одном и том же фоне. Паспортные данные на счётчик сняты при 390-400 вольтах.
понятно, а никто не пробовал снизить напряжение до начала счёта, чтобы избавиться от фона или хотя бы снизить его ещё больше? 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Полностью избавиться от фона не выйдет. Это совокупный фактор, обусловленный конструкцией счётчика, используемыми при производстве материалами. Нестабильность газовой среды внутри счётчика, возможные микровкрапления изотопов, даже космическое излучение - всё это будет давать паразитный счёт. Возможно при снижении напряжения он немного уменьшится, но ради этого отходить от паспортных характеристик смысла не вижу. Да и не настолько он велик, чтобы обращать на него внимание, составляет от десятых долей до единиц CPM и хоть сколько-либо значимое влияние на результат будет оказывать только в местах, где ЕРФ крайне низок (подземка, чисто поле вдали от цивилизации и залежей разных минералов...). Пока попытки включить учёт собственного фона в прошивку ни к чему хорошему не приводили, при ЕРФ  начинаются глюки, когда заданная величина собственного фона превышает общую подсчитанную. Вреда больше, чем мифической пользы.

Единственное, ради чего я снижал рабочее напряжение на счётчике - чтобы продлить жизнь выработанным СГМ, в которых при паспортных 400 вольтах уже начинался спонтанный разряд. Но веры им уже нет, так, игрушка-трещалка.

ddr2
Offline
Зарегистрирован: 27.12.2020

понятно, спасибо.

 

sasa1958
Offline
Зарегистрирован: 21.07.2020

Приветствую всех на форуме,Уважаемый ddr2 я сколько ни пытался уменьшить собственный фон счётчика и пока результат 0 ,помещал в цоколь лампочки обычной диаметром 11 мм для фонарика ,чтобы сразу два отвода выходили никакого толку,ставишь компаратор ,он наоборот усиляет фон счётчика,единственно ,поставить шумодав от старого магнитофона чтобы отсечь частоты которые не требуются ,либо это делать на тини 25-85 где есть эть функции или пики .Чем дальше в лес тем больше проблем возникает

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

#ArDos_with_RADON_3.5.2 - Исправление учета собственного фона, новые русские шрифты, текст в картинках заменен на обычный текст, добавлен статус-бар на все экраны, добавлена возможность немного смещать текст вверх в пределах одной строки, сообщение об разряженной батареи добавлено на все экраны, добавлено мигание надписи "тревога", мелкие исправления, оптимизация кода.

Serhoo
Offline
Зарегистрирован: 02.10.2020

mambavamba14

спасибо, показание мин, макс, стало по умолчанию,  на при нажатии сброс , обнуляется только мин а макс нет.

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

Serhoo - Да забыл, ещё это:

switch (back_mode) {
                case 1: //сбрасываем максимальный фон и средний фон
                  rad_min = 0; //сбрасываем среднее значение фона
                  rad_max = 0; //сбрасываем максимальное значение фона
                  break;
              }

На это:

switch (back_mode) {
                case 0: //сбрасываем максимальный фон и средний фон
                  rad_min = 0; //сбрасываем среднее значение фона
                  rad_max = 0; //сбрасываем максимальное значение фона
                  break;
              }

 

ddr2
Offline
Зарегистрирован: 27.12.2020

sasa1958, я говорил про ложные срабатывания трубки СБМ-20 - которые происходят даже если трубка находится в "свинцовом домике", - это собственный фон трубки (см. выше mambavamba14). И как сказал выше tekagi, срабатывания возможно происходят из-за нестабильности газовой среды внутри трубки, возможных микро вкраплений изотопов(радиоактивности самой трубки), и даже потока космических мюонов. Поэтому избавиться от фона трубки полностью нельзя, хотя видимо можно его снизить, снизив напряжение на трубке, но при этом потеряв в чувствительности. 

С другой стороны изотопы есть везде(так как в грамме вещества содержится 10^23 частиц), пусть и в малых количествах, а значит трубка должна наблюдать наличие некоторого общего фона. 

sasa1958
Offline
Зарегистрирован: 21.07.2020

Вопрос ddr2 по шуму сложный и все счётчики шумят вне зависимости слюдяной,стеклянный ,металлический.Для компенсации шума во времена СССР к счётчику гейгера прицепляли как усилитель и шумодав ТХ-11Г это уже шло в 70 х годах прошлого века.Батарейные лампы тоже шумели ,как и транзисторы и всё оборудование имеет шум,от которого полностью не избавишься похоже

ddr2
Offline
Зарегистрирован: 27.12.2020

sasa1958 пишет:
 Вопрос ddr2 по шуму сложный и все счётчики шумят вне зависимости слюдяной,стеклянный ,металлический.
тут на днях читал что полупроводниковые не шумят, т.е. у них нет фона в свинцовом домике. Получаются ПП-детекторы отрицают версию о мюонном вкладе в фон в Гейгерах.   

sasa1958
Offline
Зарегистрирован: 21.07.2020

А что-же тогда детекторные диоды и смесительные держат в свинцовых оболочках и арсенид-галиевые транзисторы тоже держат в свинцовой фольге

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Сборки из СГМ применяют в качестве детектора космического излучения. а в полупроводниковый, видимо, попасть не может, мелкий шибко)

Не попадалось информации о возможности детектирования космического излучения полупроводниковым детектором. Да и разные они, от простейшего PiN диода вроде BPW34 до кристаллического кремния. Причём могут применяться как самостоятельно, так и для снятия вспышек с сцинтиллятора.

К примеру СГМ сам по себе протонное излучение не видит, а в кадмиевом экране - вполне себе детектор.

ddr2
Offline
Зарегистрирован: 27.12.2020

sasa1958 пишет:
 А что-же тогда детекторные диоды и смесительные держат в свинцовых оболочках и арсенид-галиевые транзисторы тоже держат в свинцовой фольге

Полупроводниковые приборы на основе арсенида галлия имеют более высокую радиационную стойкость, чем кремниевые, что обусловливает их использование в условиях радиационного излучения (например, в солнечных батареях, работающих в космосе). 

думаю что СВЧ-структуры содержатся в свинцовых оболочках из-за их нежной внутренней структуры, которую внешние источники радиации могут ухудшить.  

sasa1958
Offline
Зарегистрирован: 21.07.2020

Я знал одного доцента который каким -то образом облучал радиоактивным веществом КУ202 и вместо положенных 10 ампер кристал нагружали до 1000 ампер,а детекторные диоды СВЧ Д-605 им подобные держат в свинцовых оболочках,а в литературе я встречал что они могут альфу и бетту видеть ,ещё может видеть радиацию фотодиод от ВМ-12 ,но он здоровый такой примерно 15 мм диаметром.Вообщем когда магнитофон работал и солнечный луч попадал на фотодиод ,то с магнитофоном творилось непонятное.У приятеля ВМ-12 стоял на окне.В интернете читал что на них делают дозиметры но чувствительность низка,хотя на ютубе счётчики на основе этих фотодиодов есть

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

#ArDos_with_RADON_3.5.3 - Исправление учета собственного фона, исправление расчета фона, обновление шрифта цифр, оптимизация кода.

Jonni333
Offline
Зарегистрирован: 04.07.2020

Приветствую форумчан. Сегодня попросили в ренген кабинете померить дозу...

Интересно вышло. Прибор поставил в режим дозы. При вкл ренгентрубки постоянный писк. Крупная цифра осталась на 0, а вот внизу... написал 16777мР. Кто нибудь может это объяснить? Сброс показаний я делал неделю назад. Мерил только фон. мР - это милиренген? тогда я получил дозу 16 ренген?  - бред. Набрать такую дозу нереально. Если микроРенген, то почему около больших цифр написано мкР? И почему большая цифра осталась на 0?

Гуру, прошу помощи в разъяснении. Или исправлении прошивки. Прошивка 3.3.1

ddr2
Offline
Зарегистрирован: 27.12.2020

tekagi пишет:

СГМ применяют в качестве детектора космического излучения. а в полупроводниковый, видимо, попасть не может, мелкий шибко) 

слышал наоборот, мол плотность ПП-детектора выше, чем у газа и ловить должен лучше, хотя как вы говорите пробой трубки дают вторичные электроны, а значит СГМ имеет большую площадь и приличную толщину относительно, фотодиода 

tekagi пишет:
К примеру СГМ сам по себе протонное излучение не видит, а в кадмиевом экране - вполне себе детектор.
СГМ вторичное излучение детектирует от протонов, а кадмий нужен для нейтронов.

 

sasa1958
Offline
Зарегистрирован: 21.07.2020

Приветствую Всех на форуме ,вот на эту ветку форума уважаемый ddr2 http://arduino.ru/forum/proekty/metron-dozimetr,напишите у товарища есть бариевые трубкии он владеет информацией по ним

sasa1958
Offline
Зарегистрирован: 21.07.2020

Jonni333 если Вы получили дозу 16 ренгент это ожог даже если там будут в равных степенях присутствовать альфа,бетта и гамма,во вторых для определения альфы и бетты надо ставить фильтр из тонкой целлулоидной плёнки с нанесённой с обоих сторон аллюминием,а для гаммы не обязательно свинец ,а тоже специфическая плёнка и не надо свинцовый домик

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

Jonni333 - Пробуйте последнюю версию, в старой могло быть что-то сломано, уже не помню делал ли что с дозой... У меня на тестовом устройстве с последней прошивкой считается правильно. 

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

mambavamba14 - Приветствую!!!  На экране доза надо поднять на один пиксель 00дн 00:00:00. т.к При срабатывании Опасность! строки сливаются.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

ddr2 пишет:
СГМ вторичное излучение детектирует от протонов, а кадмий нужен для нейтронов.

Таки да, ошибся. Из массовых радиометров такой функционал попадался только в ДКС-04.

Мюонные телескопы есть на газоразрядных СГМ-14. Но в них разряд немного отличается от привычных нам СГМ, он локальный в месте пробоя. По полупроводниковым информации не попадалось., может какие-то виды детекторов и существуют.

ddr2
Offline
Зарегистрирован: 27.12.2020

sasa1958 пишет:

СВЧ Д-605 им подобные держат в свинцовых оболочках,а в литературе я встречал что они могут альфу и бетту видеть ,ещё может видеть радиацию фотодиод от ВМ-12. Вообщем когда магнитофон работал и солнечный луч попадал на фотодиод ,то с магнитофоном творилось непонятное. В интернете читал что на них делают дозиметры но чувствительность низка,хотя на ютубе счётчики на основе этих фотодиодов есть

Да, впринципе любым полупроводником можно детектировать, но для настройки ПП-детектора требуются источники излучения, а для СГМ это не требуется. Получается проще создать высокое напряжение для СГМ, чем настроить ПП-детектор, хотя найти полупроводники проще, чем трубку СГМ. Хотя настройка каждого диода тоже кропотливая работа.

ddr2
Offline
Зарегистрирован: 27.12.2020

sasa1958 пишет:

Приветствую Всех на форуме ,вот на эту ветку форума уважаемый ddr2 http://arduino.ru/forum/proekty/metron-dozimetr ,напишите у товарища есть бариевые трубкии он владеет информацией по ним

ничего не знаю про бариевые трубки, вы имели ввиду захват барием нейтронов? 

С другой стороны, излучение нейтронов подразумевает ядерный распад, а значит должно сопровождаться излучением бетты или гаммы. 

 

sasa1958
Offline
Зарегистрирован: 21.07.2020

Короче на неделе у товарища скопирую ДП-5 сам выносной датчик,у другого товарища возьму кусочек фольги для альфы ,бетты и гаммы и жидкость чем мыть трубку счётчик гейгера.Для альфы и бетты замера можно взять д16 т трубку толщиной 1,5 мм с внутренним диаметром 11 мм под  СБМ-20 и поместить этот счётчик предварительно насверлив отверстий 1-2 мм рабочей площат=ью счётчика 8 см квадратных

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

alexadresat - Привет! Сделал! Больше никаких косяков не замечал?

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

mambavamba14 - Да пока все хорошо... Вопрос как написать max: и min:

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

#ArDos_with_RADON_3.5.4 - Добавлена возможность локализации прошивки, оптимизация кода.

В файле "languages" хранится весь текст прошивки, пока доступен только русский язык, английский будет чуть позже, также вы сами можете переводить на любой язык добавляя новый паттерн в "languages" и соответственно шрифт к нему в "DefaultFonts".

alexadresat - Только заменив вывод текста обратно на картинки, по другому никак..

Заменив:

print(MAIN_SCREEN_BACK_MIN, 0, 32); //строка 2 мин:
print(MAIN_SCREEN_BACK_MAX, 0, 40); //строка 3 макс:

На:

drawBitmap(0, 32, dose_min_img, 23, 8);       //строка 2 мин:
drawBitmap(0, 40, dose_max_img, 23, 8);       //строка 3 макс:

И добавив обратно ресурсы:

const uint8_t dose_max_img[] PROGMEM = { //MAX:
  0xFE, 0xFE, 0x0C, 0x18, 0x0C, 0xFE, 0xFE, 0x00, 0xFC, 0xFE, 0x12, 0xFE,
  0xFC, 0x00, 0xC6, 0xEE, 0x38, 0xEE, 0xC6, 0x00, 0x00, 0x6C, 0x6C, 0x00,
  0x00, 0x00
};
const uint8_t dose_min_img[] PROGMEM = { //MIN:
  0x7F, 0x7F, 0x06, 0x0C, 0x06, 0x7F, 0x7F, 0x00, 0x41, 0x7F, 0x7F, 0x41,
  0x00, 0x7F, 0x7F, 0x06, 0x18, 0x7F, 0x7F, 0x00, 0x00, 0x36, 0x36, 0x00,
  0x00, 0x00
};

 

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

#ArDos_with_RADON_3.5.5 - Исправление отображения шкалы фона, устранено наложение мелодий, ограничение количества воспроизводимых щелчков, оптимизация кода.

SoftFelix
Offline
Зарегистрирован: 12.01.2020

Интересно, а почему при компиляции под AMEGA 2560 появляется ошибка "ArDos_with_RADON:249:25: error: 'PRR' was not declared in this scope"? p.s. Под Pro Mini с Optiboot всё нормально.

 

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

SoftFelix - Потому что код написан под 328-й камень, а с 2560 они имеют мало общего..
PRR - регистр питания периферии, на 328-й меге он 8-ми битный, а на 2560 он 16-ти битный и имеет вид - PRR0 и PRR1.

Serhoo
Offline
Зарегистрирован: 02.10.2020

mambavamba14 

прошивка 3,5,5 не принимает  ваши рекомендации 6686 по изменениям чтобы при замере бета показывал количество импульсов фона и образца, помогите плиз? 

Serhoo
Offline
Зарегистрирован: 02.10.2020

mambavamba14

ArDos_with_RADON:1343:24: error: 'mesur_img' was not declared in this scope

 
       drawBitmap(0, 0, mesur_img, 84, 8); //устанавлваем фон
 
   
exit status 1
'mesur_img' was not declared in this scope
 
 

 

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

Serhoo - Держите!

//-------------------------------Режим замера----------------------------------------------------------
void measur_menu(void) //режим замера
{
  uint32_t buff = 0;
  boolean n = 0; //анимация окончания замера

  alarm_measur = 1; //запрещаем оповещение окончания замера
  next_measur = 1; //поднимаем флаг продолжения замера

  scr = 0; //разрешаем обновления экрана

  while (1) {
    data_convert(); //преобразование данных
    bat_massege(); //обновление состояния батареи
    error_messege(); //обработка ошибок
    measur_massege(); //оповещение об окончании замера

    if (!scr) {
      scr = 1; //устанавливаем флаг

      clrScr(); //очистка экрана
      task_bar(M_MEASUR_BETA); //отрисовываем фон

      switch (measur) {
        case 0: //результат
          buff = (first_froze < second_froze) ? second_froze - first_froze : 0; //рассчитываем результат замера

          if (next_measur) {
            switch (n) {
              case 0:
                print(M_RESULT, CENTER, 24); //результат
                _init_couts_per_cm2((float)buff / pgm_read_byte(&diff_measuring[measur_pos])); //результат ч/см2*м
                n = 1;
                break;
              case 1:
                print(M_BACK_OK, CENTER, 24); //ок - замер фона
                _init_rads_unit(1, buff * ((float)GEIGER_TIME / (pgm_read_byte(&diff_measuring[measur_pos]) * 60)), 1, 4, 1, 8, 0, 54, 16); //результат мкр/ч
                n = 0;
                break;
            }
          }
          else print(M_RESULT, CENTER, 24); //результат

          _init_accur_percent(_init_accur(buff)); //отрисовка точности

          print(M_BACK_I, LEFT, 32); //строка 1 фон
          print("bvg", 66, 32);          //строка 1 имп
#if (TYPE_CHAR_FILL > 44)
          printNumI(first_froze, 28, 32, 6, TYPE_CHAR_FILL); //строка 1
#else
          printNumI(first_froze, 28, 32, 6, 32); //строка 1
#endif

          print(M_SAMP_I, LEFT, 40); //строка 2 обр
          print("bvg", 66, 40);          //строка 2 имп
#if (TYPE_CHAR_FILL > 44)
          printNumI(second_froze, 28, 40, 6, TYPE_CHAR_FILL); //строка 2
#else
          printNumI(second_froze, 28, 40, 6, 32); //строка 2
#endif
          break;

        case 1: //1-й замер
          if (next_measur) {
            switch (n) {
              case 0: print(M_BACK, CENTER, 24); n = 1; break; //замер фона
              case 1: print(M_SAMP_OK, CENTER, 24); n = 0; break; //ок - зам. образца
            }
          }
          else print(M_BACK, CENTER, 24); //замер фона
          setFont(MediumNumbers); //установка шрифта
          printNumI(first_froze, 5, 8, 5, TYPE_CHAR_FILL); //строка 1
          break;

        case 2: //2-й замер
          setFont(MediumNumbers); //установка шрифта
          printNumI(second_froze, 5, 8, 5, TYPE_CHAR_FILL); //строка 1
          print(M_SAMP, CENTER, 24); //замер образца
          break;
      }

      if (measur) { //если идет замер
        print("bvg", 66, 16);          //строка 1 имп
        printNumI(pgm_read_byte(&diff_measuring[measur_pos]), 50, 40, 2, 32); //минут всего
        print(M_MIN, RIGHT, 40);            //строка 1 мин
#if (TYPE_CHAR_FILL > 44)
        printNumI(((pgm_read_byte(&diff_measuring[measur_pos]) * 60 - time_switch) / 60), 0, 40, 2, TYPE_CHAR_FILL); //минут
#else
        printNumI(((pgm_read_byte(&diff_measuring[measur_pos]) * 60 - time_switch) / 60), 0, 40, 2, 32); //минут
#endif
        print(M_TIME, 12, 40);            //строка 2
        printNumI((pgm_read_byte(&diff_measuring[measur_pos]) * 60 - time_switch) % 60, 18, 40, 2, 48); //секунд

        _screen_line(0, map(time_switch, 0, pgm_read_byte(&diff_measuring[measur_pos]) * 60, 5, 82), 1, 1, 32); //шкала пройденого времени
      }
    }
    //+++++++++++++++++++++  опрос кнопок  +++++++++++++++++++++++++++
    switch (check_keys())
    {
      case 1: //Down key hold
        fast_light(); //быстрое включение подсветки
        break;

      case 2: //Down key
        if (measur) measur_stop(); //если идет замер, спрашиваем нужно ли остановить замер
        else {
          measur = 0; //выключаем замер
          time_switch = 0; //сбрасываем таймер
          next_measur = 1; //сбрасываем флаг следующего замера
          alarm_measur = 1; //разрешаем оповещение оканчания замера
          first_froze = 0; //сбрасываем счетчик 1-го замера
          second_froze = 0; //сбрасываем счетчик 2-го замера
          scan_buff = rad_buff[0] = 0; //очищаем 0-й и 1-й элемент буфера
        }
        scr = 0; //разрешаем обновления экрана
        break;

      case 3: //Up key
        if (measur) measur_stop(); //если идет замер, спрашиваем нужно ли остановить замер
        scr = 0; //разрешаем обновления экрана
        break;

      case 4: //Up key hold
        fast_flash(); //быстрое включение фонарика
        break;

      case 5: //select key
        if (!measur) {
          measur = 1; //включаем замер
          next_measur = 0; //сбрасываем флаг следующего замера
          alarm_measur = 0; //разрешаем оповещение оканчания замера
          first_froze = 0; //сбрасываем счетчик 1-го замера
          second_froze = 0; //сбрасываем счетчик 2-го замера
          scan_buff = 0; //очищаем 0-й элемент буфера
        }
        else if (next_measur && measur == 1) {
          measur = 2;
          next_measur = 0;
          time_switch = 0;
          alarm_measur = 0;
          scan_buff = 0; //очищаем 0-й элемент буфера
          n = 0;
        }
        scr = 0; //разрешаем обновления экрана
        break;

      case 6: //hold select key
        if (measur) measur_stop(); //если идет замер, спрашиваем нужно ли остановить замер
        switch (measur) {
          case 0: return; //выходим в меню
          case 1: scr = 0; break; //разрешаем обновления экрана
        }
        break;
    }
  }
}

 

Serhoo
Offline
Зарегистрирован: 02.10.2020

mambavamba14

Спасибо.

BolshoyK
Offline
Зарегистрирован: 05.12.2020

Добрый день, mambavamba14!

Есть предложение, в процедуре накачки высокого заменить хардкоденные пины на дефайны из конфига.

 

BolshoyK
Offline
Зарегистрирован: 05.12.2020

del

 

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

BolshoyK - Да, хорошая мысль, сделаю!

UPD. Готово!

alexadresat
alexadresat аватар
Offline
Зарегистрирован: 22.02.2017

mambavamba14 - Здорово! Есть идея, при замере бета если экран стоит на автовыключении, по окончании замеров (замер фона и замер образца) и результата, надо чтоб подсветка включалась.

 Все заработало... Спасибо!!!

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

alexadresat - Привет! Да кстати, странно что там не было включения подсветки... В общем сделал))

BolshoyK
Offline
Зарегистрирован: 05.12.2020

mambavamba14, проблема с настройкой контрастности. изменяешь, сохраняешь. все ок. Передергиваешь питание - в дело идет настройка из скетча, а не из еепром.

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

BolshoyK - Очень странно, а другие настройки так не сбрасываются? Как будет возможность, проверю на своем.

BolshoyK
Offline
Зарегистрирован: 05.12.2020

Тут убираем очистку экрана:



  //+++++++++++++++++++   вывод информации на экран  +++++++++++++++++++++++++
  if (!scr) { //обновление дисплея
    scr = 1; //сброс флага

//    clrScr(); //очистка экрана

Тут добавляем очистку экрана:

1)

    case 5: //Select key //выбор режима
      switch (alarm_switch) { //режим тревоги
        case 0: scr_mode = (scr_mode) ? 0 : 1; clrScr(); break; //переключение фон/доза

 

2)
             break;

            case 1: data_reset(dose_mode); clrScr(); break; //сбрасываем дозу и время
          }
          break;

3)

        case 0:
          switch (scr_mode) { //основные экраны
            case 0: back_mode = (back_mode) ? 0 : 1; clrScr(); break; //переключаем экраны фона
            case 1: dose_mode = (dose_mode) ? 0 : 1; clrScr(); break; //переключаем экраны дозы
          }

4)

     case 5: //select key //выбор
        switch (n) {
          case 0:
            sleep_disable = 0; //разрешаем сон
            scr = 0; //разрешаем обновления экрана
            clrScr();
            return;

5)

#endif
    scr = 0; //разрешаем обновления экрана
    clrScr();
  }
}
//------------------------------------Чтение настроек----------------------------------------------
void setings_read(void) //чтение настроек

 

В результате экран перестает мигать каждую секунду. 
Проверьте, какие минусы вылезут от такого улучшения.
BolshoyK
Offline
Зарегистрирован: 05.12.2020

mambavamba14 пишет:

BolshoyK - Очень странно, а другие настройки так не сбрасываются? Как будет возможность, проверю на своем.

Инициализация дисплея и установка контраста идет задолго до чтения данных из еепром.

В первой строке инициализация, а в последней - чтение еепром

  InitLCD(contrast); //инициализируем дисплей
  _LIGHT_ON(); // включаем подсветку, если была включена настройками
  _init_logo(); //вывод логотипа

  if (!OK_OUT) { //если зажата кнопка ок при запуске
#if DEBUG_RETURN
    if (!UP_OUT) eeprom_update_byte((uint8_t*)101, 0); //если зажата кнопка вверх при запуске, сбрасываем настройки преобразователя
#endif
    eeprom_update_byte((uint8_t*)100, 0); //сбрасываем настройки
  }

  if (eeprom_read_byte((uint8_t*)100) != 100) { //если настройки были сброшены, восстанавливаем из переменных
    print(PLEASE, CENTER, 32); //Пожалуйста
    print(WAINT, CENTER, 40); //подождите...

    _delay_ms(START_TIME); //ждем
    setings_update(); //обновляем настройки
    eeprom_update_byte((uint8_t*)100, 100); //делаем метку

    clrRow(4); //очистка строки 4
    clrRow(5); //очистка строки 5
  }
  else setings_read(); //иначе загружаем настройки из памяти

 

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

BolshoyK - Вообще очистка экрана тянется ещё с прошлых версий, когда ещё всё было разбросано и не приведено к общему шаблону.. В принципе то оно не сильно мешает, но наверное в ближайшее время займусь этим вопросом. Единственное что, проверьте не остаются ли артефакты при переключении подрежимов фона и дозы, тогда туда тоже придется добавить очистку.

 

Всё я вспомнил про контраст, видимо так про него и забыл когда инициализацию переделывал... На днях тогда поправлю.

Можете пока после чтения еепром поставить setContrast(contrast);

BolshoyK
Offline
Зарегистрирован: 05.12.2020

mambavamba14 пишет:

BolshoyK - Вообще очистка экрана тянется ещё с прошлых версий, когда ещё всё было разбросано и не приведено к общему шаблону.. В принципе то оно не сильно мешает, но наверное в ближайшее время займусь этим вопросом. Единственное что, проверьте не остаются ли артефакты при переключении подрежимов фона и дозы, тогда туда тоже придется добавить очистку.

 

Всё я вспомнил про контраст, видимо так про него и забыл когда инициализацию переделывал... На днях тогда поправлю.

Можете пока после чтения еепром поставить setContrast(contrast);

Пока не увидел артефактов. Но лучше это протестировать еще на ком то. Очистку экрана как раз и предлагаю поставить на момент смены режима, а внутри режима уже не чистить.

UPD: вру. есть еще подрежимы отображения по другим кнопкам. надо в них тоже очистку вставлять. Постепенно найду их....

UPD2: добавил еще 2 места очистки.
С контрастом пока не горит - в коде поставил нужную цифру.

mambavamba14
mambavamba14 аватар
Offline
Зарегистрирован: 25.12.2019

BolshoyK - Помимо того всего что вы написали выше, нужно ещё очищать единицы измерения, тк например при смене с мкР/ч на мР/ч останется артефакт. Или как вариант в языковом пакете после мР/ч | мР | мЗ/ч | мЗ поставить пробел.
А и ещё линейки заполненности буфера нужно очищать, хотя-бы при сбросе, как авто так и ручном.