Делаем дозиметр!

Shodan
Offline
Зарегистрирован: 07.03.2017

Правила хорошего тона, гласят, что так надо делать всегда, кроме случаев, когда импеданс АЦП многократно выше делителя.

Что касается 1Г, можно не только теоретически, но и практически. Только не забывайте слоты в плате резать и хорошие ноу-клин флюсы применять.

Argentum174
Offline
Зарегистрирован: 08.06.2017

Друзья, посмотрите пожалуйста, все ли на схеме правильно? Может где уже подобрали другие значения элементов, более оптимальные для работы прибора?

https://yadi.sk/i/q7IfCR_I3LmpwP

Пины к микроконтроллеру подключил по своему т.к. вроде в прошивке поменять их можно.

P1  и L1 - трансформатор самодельный

P3 и Р4 - контакты к счетчику СБМ

Р2 - Олед дисплей I2C

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Argentum174 пишет:

Друзья, посмотрите пожалуйста, все ли на схеме правильно? Может где уже подобрали другие значения элементов, более оптимальные для работы прибора?

https://yadi.sk/i/q7IfCR_I3LmpwP

Пины к микроконтроллеру подключил по своему т.к. вроде в прошивке поменять их можно.

P1  и L1 - трансформатор самодельный

P3 и Р4 - контакты к счетчику СБМ

Р2 - Олед дисплей I2C

Всю схему не смотрел, но вход сигнала с датчика должен идти только на пин с прерыванием.

Да и чтоб кнопки менять нужно регистры переписывать вы это делали?

Argentum174
Offline
Зарегистрирован: 08.06.2017

bodriy2014 пишет:

Всю схему не смотрел, но вход сигнала с датчика должен идти только на пин с прерыванием.

Да и чтоб кнопки менять нужно регистры переписывать вы это делали?

 

Регистры находятся в этой части кода, я правильно понял?

void setup() {
  Serial.begin(57600);
  ACSR |= 1 << ACD; //отключаем компаратор
  ADCSRA &= ~(1 << ADEN);  // отключаем АЦП,
  pinMode(3, INPUT_PULLUP); //кнопка
  pinMode(4, INPUT_PULLUP); //кнопка
  pinMode(7, INPUT_PULLUP); //кнопка
  DDRB |= (0 << 0); PORTB &= ~(1 << 0); //пин пустой 8
  DDRC |= (0 << 4); PORTC &= ~(1 << 4); //пин пустой А4
  DDRC |= (0 << 5); PORTC &= ~(1 << 5); //пин пустой А5
  DDRB |= (1 << 1);//пин фонаря
  DDRC |= (1 << 3);//A3 дисплей GND
  DDRC |= (1 << 2);//A2 дисплей Light
  PORTC &= ~(1 << 3); //A3 дисплей GND
  PORTC  |= (1 << 2); //A2 дисплей Light
  eeprom_readS ();
  eeprom_readD ();
  lcd_init();
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
  DDRB |= (1 << 5); //пины на выход
  DDRD |= (1 << 5);
  DDRD |= (1 << 6);
  DDRD |= (1 << 6);//пин бузера
  nakachka();
}
//---

Пин 5 - выход с PWM, накачивает импульсами трансформатор

Пин 2- с делителя идет для анализа состояния батареи

Пин А6 - аналоговый вход для мониторинга сигналов со счетчика

Я верно понял пины?

У меня есть друг, заядлый программист, кодит на многих разноуровневых языках, вот с ним потом буду прошивку ковырять.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Argentum174 пишет:

bodriy2014 пишет:

Всю схему не смотрел, но вход сигнала с датчика должен идти только на пин с прерыванием.

Да и чтоб кнопки менять нужно регистры переписывать вы это делали?

 

Регистры находятся в этой части кода, я правильно понял?

void setup() {
  Serial.begin(57600);
  ACSR |= 1 << ACD; //отключаем компаратор
  ADCSRA &= ~(1 << ADEN);  // отключаем АЦП,
  pinMode(3, INPUT_PULLUP); //кнопка
  pinMode(4, INPUT_PULLUP); //кнопка
  pinMode(7, INPUT_PULLUP); //кнопка
  DDRB |= (0 << 0); PORTB &= ~(1 << 0); //пин пустой 8
  DDRC |= (0 << 4); PORTC &= ~(1 << 4); //пин пустой А4
  DDRC |= (0 << 5); PORTC &= ~(1 << 5); //пин пустой А5
  DDRB |= (1 << 1);//пин фонаря
  DDRC |= (1 << 3);//A3 дисплей GND
  DDRC |= (1 << 2);//A2 дисплей Light
  PORTC &= ~(1 << 3); //A3 дисплей GND
  PORTC  |= (1 << 2); //A2 дисплей Light
  eeprom_readS ();
  eeprom_readD ();
  lcd_init();
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
  DDRB |= (1 << 5); //пины на выход
  DDRD |= (1 << 5);
  DDRD |= (1 << 6);
  DDRD |= (1 << 6);//пин бузера
  nakachka();
}
//---

Пин 5 - выход с PWM, накачивает импульсами трансформатор

Пин 2- с делителя идет для анализа состояния батареи

Пин А6 - аналоговый вход для мониторинга сигналов со счетчика

Я верно понял пины?

У меня есть друг, заядлый программист, кодит на многих разноуровневых языках, вот с ним потом буду прошивку ковырять.

В этом архиве схема которая вам полностью подходит по пинам.

http://srukami.inf.ua/rar/elat_sim3.rar

Не вижу смысла смотреть правильность измененных вами пинов в скетче.

Chichikoff
Offline
Зарегистрирован: 09.08.2017

Здраствуйте всем. Решил делать такой дозиметр на 5110. Я прочитал почти все сообщения и так не понял, какое напряжение должно быть на выходе трансформатора и какая индуктивность первички, если делать по 2ой схеме? Да и ещё тоже не особо понятно: какое сопротивление брать для мультиметра, что бы замерять напряжение на вторичке.

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

Chichikoff, напряжение на выходе трансформатора всё равно померить не выйдет, там не синусоида, а пачки импульсов. Лучше сначала собрать навесным монтажом или на макетке (только не на беспаечной!), и подобрать нужное количество каскадов умножителя (или используемый дроссель). Когда всё заработает как надо перенести на печатку / в корпус. 

Индуктивность весьма условный показатель, за основу её можно брать только для сердечников сопоставимого размера. К примеру на гантельке с диаметром шляпок 6мм, стержня 3мм, общей высотой 8мм индуктивность вторички получилась около 9.5mH, а на трансе от китайской зарядки (в посте 741 видно, от какой) при том же количестве витков уже 56mH. (Это для уже перемотанных на 600 витков, для первой схемы).

Первичка 3-5 витков поверх существующей обмотки дросселя.

Нормально замерить выходное напряжение с помошью делителя мне так и не удалось. Лучше откалибровать встроенный вольтметр АрДоса с помощью мультиметра с входным сопротивлением 10МОм и в дальнейшем ориентироваться на показания в системном меню. Приблизительная методика описана в посте 729. Счётчик СБМ-20 расчитан на 400В.

Chichikoff
Offline
Зарегистрирован: 09.08.2017

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

Chichikoff
Offline
Зарегистрирован: 09.08.2017

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

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

Много-Мегомные резючки с почты забрал)

Хочу попробовать 500МОм поставить в цепь контроля питания, нижнее плечо как в оригинальной схеме (220кОм). Кто подскажет про коэфициенты делителя?)

Поставил: 

#define k_delitel 2270

500МОм/0,22МОм

вроде так)

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

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

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

tekagi пишет:
Пятисотка без буферного ОУ вероятнее всего будет показывать среднюю температуру по больнице...

Средняя температура: 13-15 мкР/ч

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

Не думал, что потянет) Какие показания накачки и напряжения? Показания встроенного вольтметра с внешним сравнивали? Сколько преобразоввтель потребляет?

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

tekagi пишет:
Не думал, что потянет) Какие показания накачки и напряжения? Показания встроенного вольтметра с внешним сравнивали? Сколько преобразоввтель потребляет?

Преобразователь кушает 1,5 - 1,9 мА.

Нечем померять резюк на полГигаома.. Но если по теории - то на нижнем плече делителя (R41 - 220к) 0,187 Вольта, что даёт примерно 425 вольт (это только в теории) Ардуина пишет около 350 Вольт..

Питание измеренное тестером 3,98 Вольта.

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

Medvedik пишет:

Преобразователь кушает 1,5 - 1,9 мА.

Многовато. Может сказывается габарит применённого трансформатора, может применённый транзистор полностью не успевает открыться от ардуинки без драйвера. Теряется вся выгода от применения высокоомного делителя.

Medvedik пишет:

Питание измеренное тестером 3,98 Вольта.

Нужно поставить в строчку OPORN системного меню курсор и кнопками влево-вправо добиться отображения этого напряжения возле VCC. bodriy2014 специально добавил корректировку показаний при разбросе внутреннего ИОН ардуины.

Medvedik пишет:

Но если по теории - то на нижнем плече делителя (R41 - 220к) 0,187 Вольта, что даёт примерно 425 вольт (это только в теории) Ардуина пишет около 350 Вольт..

Слишком большое сопротивление, АЦП ардуинки и при 100МОм уже работает за пределами рекомендуемых параметров. Если у Вас есть мультиметр с входным сопротивлением 10МОм - подключите его параллельно высоковольтному конденсатору и сравните его показания с отображаемыми в этот момент в системном меню. Напряжения должны совпадать.

Скетч последний из темы? Если да - то накачка уже работает на частоте, близкой к предельной (около 500), и запаса на стабилизацию при увеличении нагрузки не остаётся.

Я бы всё же рекомендовал использовать 100МОм и сердечник поменьше, при этом вполне реально получить менее миллиампера на преобразователь при ЕРФ.

Shodan
Offline
Зарегистрирован: 07.03.2017

tekagi пишет:

Многовато. Может сказывается габарит применённого трансформатора, может применённый транзистор полностью не успевает открыться от ардуинки без драйвера. Теряется вся выгода от применения высокоомного делителя.

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

Я даже резюк в затвор ставлю, чтоб ограничить ток затвора, чтоб ровнее открывался от МК. При этом не брезгаю одной ножной МК управлять сразу двумя полевиками. Которые качают транс величной со спичечную головку.

Или авторов не устроила серия IRLML от ИР (ныне Инфинеон), созданная конкретно для этих задач?

Joiner
Offline
Зарегистрирован: 04.09.2014

Shodan пишет:

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

Я даже резюк в затвор ставлю, чтоб ограничить ток затвора, чтоб ровнее открывался от МК. При этом не брезгаю одной ножной МК управлять сразу двумя полевиками. Которые качают транс величной со спичечную головку.

Или авторов не устроила серия IRML от ИР (ныне Инфинеон), созданная конкретно для этих задач?

А можно фотку готового преобразователя с трансом со спичечную головку и его параметры? В настоящее время занимаюсь экспериментами с ключами и импульсными трансформаторами. Было бы интересно посмотреть.

Shodan
Offline
Зарегистрирован: 07.03.2017

Гугли: дозиметр Ультра-Микрон

Найдешь там транс, заслужишь пирожок с полки :)

 

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

Shodan, на фото монтажки Medvedik полевик в DPAC. Может он и logic level, но на бОльшие токи, соответственно ёмкость затвора будет поболе. Некоторые форумчане из темы экспериментировали с IRLZ34, там тоже кпд пониже чем при irlml6346.

Shodan
Offline
Зарегистрирован: 07.03.2017

tekagi - Ну я и говорю, плохо учили домашнее задание. А достаточно-то всего-лишь расчитать параметры транса под требуемую индукцию, ток в пике, мотануть как расчитано, и поставить простую IRLML-ку, с нужным пиковым током. Как правило, легко получается менее ампера.

Shodan
Offline
Зарегистрирован: 07.03.2017

Я вообще с трудом понимаю, почему все идут от обратного, т.е. от эксперемента....

Разработка начинается с расчета, продолжается подбором деталей по каталогами, и только потом, на конечном этапе завершается прототипом. Метод работает безотказно. Я поэтому с легкостью заказываю платы на заводе, и жду по 1-2 месяца доставок плат и деталек, поскольку знаю что оно "стартанет", а дальше остается только переделывать под разные хотелки. Ну изредка легкие косячки, которые не учел по причине больших проектов.

Joiner
Offline
Зарегистрирован: 04.09.2014

Shodan пишет:

tekagi - Ну я и говорю, плохо учили домашнее задание. А достаточно-то всего-лишь расчитать параметры транса под требуемую индукцию, ток в пике, мотануть как расчитано, и поставить простую IRLML-ку, с нужным пиковым током. Как правило, легко получается менее ампера.

Жалко, что я не умею рассчитывать....... Беру какое-то кольцо, могу измерить размеры....больше о кольце у меня ни чего нет, а ведь подозреваю, что нужно знать и еще кое-какие параметры. Не представляю как это рассчитать. Подскажите где можно помотреть пример расчета..

Shodan
Offline
Зарегистрирован: 07.03.2017

Joiner - Что значит "не умею рассчитывать"? У меня нет ученой степени по педагогике. По сему подитожу на том что все формулы гуглятся. Даже кажется давал их на коте.

Вообщем я не думаю что это вам поможет, т.к. вы опять-же поступаете от обратного, цитирую "Беру какое-то кольцо". Я попробую пояснить иначе... если вы возьмете какой-то двигатель, и попробуете его поставить в Бентли, вероятность того что Бентли будет работать так как задумал производитель, не велика.

Для себя давно уже сделал вывод, что давать информацию в массы, вещь не благодарная. Вон сколько ее в темах про Гамму-3 и Микрон дал. А воз и ныне там, 2017 год скоро кончится, а вы еще мечтаете изобрести что-то подобное. И не просто, а проходя по тем-же граблям. Читать сейчас ни у кого желания нет, как я вижу. А таких разработок есть еще одна, пимимо Ультра-Микрона, Нанит.

По сему сейчас ограничиваюсь сугубо узким кругом, менее 10 человек, которым даю информацию в своем закрытом блоге. Это намного более продуктивно.

Joiner
Offline
Зарегистрирован: 04.09.2014

Shodan пишет:

Joiner - ........................Вообщем я не думаю что это вам поможет, ......................

По сему сейчас ограничиваюсь сугубо узким кругом, менее 10 человек, которым даю информацию в своем закрытом блоге. Это намного более продуктивно.

Понял, спасибо.

Shodan
Offline
Зарегистрирован: 07.03.2017

Joiner пишет:

Понял, спасибо.

Пожалуйста.

Всегда рад помочь, пишите еще. Направление я задал, реализацию показал. К сожалению учить считать и повторять одно и то-же по несколько раз, не буду.

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

IRLML-ки сегодня получил, а также AD8541 для повторителя 500 МОм-ного делителя.

Joiner
Offline
Зарегистрирован: 04.09.2014

Shodan пишет:

Joiner пишет:

Понял, спасибо.

Пожалуйста.

Всегда рад помочь, пишите еще. Направление я задал, реализацию показал. К сожалению учить считать и повторять одно и то-же по несколько раз, не буду.

Правильно, незачем метать бисер перед свиньями :)

Shodan
Offline
Зарегистрирован: 07.03.2017

Заметь, ты это сам сказал, не я.

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

А все по тому, что я их давно приучил делать все правильно, по науке.

PS. 30 CPS на ЕРФ. https://www.youtube.com/watch?v=u1ztoHb-t6I (видео не мое)

 

Joiner
Offline
Зарегистрирован: 04.09.2014

Shodan пишет:

Заметь, ты это сам сказал, не я.

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

А все по тому, что я их давно приучил делать все правильно, по науке.

PS. 30 CPS на ЕРФ. https://www.youtube.com/watch?v=u1ztoHb-t6I (видео не мое)

 

Что могу сказать? Молодцы! Желаю дальнейших успехов.

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

Последний, наверно, макет перед печатной платой)

Ключ IRLML2502, Выпрямитель US1M, Фильтр 0,1*630V

Преобразователь кушает 0,5 - 0,9мА

lomaster911
Offline
Зарегистрирован: 24.08.2017

Добрый вечер.

Подскажите пожалуйста что делать дальше,не могу компилировать.Где здесь задержка?

В программировании не силен.(lomaster911@ukr.net)

Зарание спасибо.

/sites/default/files/u31205/normalnyy_bolshoy.jpg

 

 

 

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

Слишком маленькая картинка, не видать ничего...

Скопируй строчку с ошибкой

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

lomaster911, в версии ArduinoIDE 1.6.5 не скомпиллируется, это связано с изменениями в встроенной в ИДЕ библиотеке задержек. bodriy2014 указывет в начале скетча версию ИДЕ, в которой производилась компилляция, для последних версий  использовалась 1.8.2. Можно попробовать и последнюю официальную, на данный момент 1.8.4. Не забывайте про необходимые для сборки библиотеки (есть в архивах со скетчем на авторском сайте), а также внести свои значения параметров #define  ADC  и #define k_delitel.

lomaster911
Offline
Зарегистрирован: 24.08.2017

 ардуина иде 1.6.3 была без установки.

lomaster911
Offline
Зарегистрирован: 24.08.2017

С картинками тут как то не получается(их уменьшает).

Могу выслать нормальные картинки на емеил.

что за параметры  #define  ADC  и #define k_delitel.

И куда их вставлять в скетч?

Ардуина иде 1.8.3 с установкой. ошибки C:\Users\потом непонятная папка.Я ее не нашёл,у меня виндовс 8.1

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

lomaster911 пишет:

что за параметры  #define  ADC  и #define k_delitel.

И куда их вставлять в скетч?

В строчках

#define  ADC 230  //значение АЦП при котором 400В с учетом вашего делителя напряжения (0..255)
#define k_delitel 420 //коефициент делителя напряжения, зависит от вашего делителя.

нужно проставить свои значения.

Для указанных на сайте номиналов 126,6МОм и 220КОм соответственно ADC 163 и k_delitel 576. Если применяете резисторы других номиналов - считайте по формулам из этого поста.

 

/* ArDOs   v1062 без режима сна
***Дозиметр на Ардуино
***IDE Arduino 1.8.2
  ветка форума http://arduino.ru/forum/proekty/delaem-dozimetr
  http://arduino.ru/forum/proekty/delaem-dozimetr
  сайт http://srukami.inf.ua/ardos.html
*/
#include <util/delay.h> //уже есть
#include <EEPROM.h>//уже есть
#include <LCD5110_Graph.h>//нужно установить

//настройки /////////////начало
LCD5110 myGLCD(A1, A0, 12, 10, 11); //подключение дисплея
//LCD5110 myGLCD(12, 11, 10, A4, A5); //подключение дисплея
#define contrast 60 //контрастность дисплея
byte treviga_1 = 30; //первая ступень тревоги
byte treviga_2 = 60; //вторая ступень тревоги
byte ton_BUZZ = 70; //тональность буззера
#define  ADC 163  //значение АЦП при котором 400В с учетом вашего делителя напряжения (0..255)
#define k_delitel 576 //коефициент дельтеля напряжения, зависит от вашего делителя.
byte puls = 2; //тонкая настройка длинны импульса высоковольтного транса
byte scrin_GRAF = 1; //скорость построения графика в секундах
bool buzz_ON = 1;  //включить индикацию бузером (1)
bool podsvetka = 0; //подсветка
bool son_OK = 0; //разрешение или запрет сна
float opornoe = 1.10; //делить на opornoe/10
#define son_t 40 //время засыпания в секундах
#define save_DOZ 20 //как часто сохранять накопленную доху например каждые 20мкР
byte beta_time = 1; //время замера бета излучения
//настройки //////////////конец
//служебные переменные
extern uint8_t SmallFont[], MediumNumbers[], TinyFont[];
extern uint8_t logo_bat[], logo_rag[], logo_tr[], gif_chast_1[], gif_chast_2[];
volatile int shet = 0;
unsigned long t_milis = 0, gr_milis = 0, lcd_milis = 0, toch_milis = 0, timer_mil = 0;
unsigned long spNAK_milis = 0, time_doza = 0, bat_mill = 0;
int hv_adc, hv_400, shet_s = 0, fon = 0, shet_gr = 0, shet_n = 0;
int speed_nakT = 0, speed_nak = 0, time_sh_l = 0, MIN, HOUR, result;
int doza_vr = 0, val_dr_pr = 0, val_dr_OK = 0;
byte mass_p[84], mass_toch[201], m = 0, n_menu = 0, sys_menu = 0, mass_36[41];
byte val_kl = 0, val_ok = 0, menu = 0, zam_180p = 0, zam_36p = 0, gif_x = 0;
byte sek = 0, minute = 0, bet_z = 0, gotovo = 0;
int  bet_z0 = 0, bet_z1 = 0, bet_r = 0;
float VCC = 0.0, doz_v = 0.0, stat_percent = 99.0;
bool tr = 0, poisk = 1, fonarik = 0, g_fl = 0, toch;
//-------------------------------------------------------------
void setup() {
  //Serial.begin(19200);
  ACSR |= 1 << ACD; //отключаем компаратор
  //ADCSRA &= ~(1 << ADEN);  // отключаем АЦП,
  pinMode(3, INPUT_PULLUP); //кнопка
  pinMode(4, INPUT_PULLUP); //кнопка
  pinMode(7, INPUT_PULLUP); //кнопка
  DDRB |= (0 << 0); PORTB &= ~(1 << 0); //пин пустой 8
  DDRC |= (0 << 4); PORTC &= ~(1 << 4); //пин пустой А4
  DDRC |= (0 << 5); PORTC &= ~(1 << 5); //пин пустой А5
  DDRB |= (1 << 1);//пин фонаря
  DDRC |= (1 << 3);//A3 дисплей GND
  DDRC |= (1 << 2);//A2 дисплей Light
  PORTC &= ~(1 << 3); //A3 дисплей GND
  PORTC  |= (1 << 2); //A2 дисплей Light
  eeprom_readS ();
  eeprom_readD ();
  lcd_init();
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
  DDRB |= (1 << 5); //пины на выход
  DDRD |= (1 << 5);
  DDRD |= (1 << 6);
  DDRD |= (1 << 6);//пин бузера
  nakachka();
}
//-------------------------------------------------------------
void loop() {
  if (menu == 0) {
    if (!(PIND & (1 << PIND7))) { //нажатие <<<
      _delay_ms(500);//антидребезг
      menu = 3;
      shet = 0; zam_180p = 0; fon = 0;
      stat_percent = 99.0;
      if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик
        val_kl++;
        if (val_kl == 6) {
          val_kl = 0;
          fonarik = !fonarik;
        }
      }
    }
    if (!(PIND & (1 << PIND4))) { //нажатие >>>
      _delay_ms(500);//антидребезг
      menu = 4;
      shet = 0;
      bet_z0 = 0;
      bet_z1 = 0;
      bet_r = 0;
      bet_z = 0;
      gotovo = 0;
      sek = 0;
      minute = 0;
      if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик
        val_kl++;
        if (val_kl == 6) {
          val_kl = 0;
          fonarik = !fonarik;
        }
      }
    }
  }
  if (menu == 4) {
    if (!(PIND & (1 << PIND4))) { //нажатие >>>
      _delay_ms(500);//антидребезг
      menu = 0;
      shet = 0;
      stat_percent = 99.0;
      if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик
        val_kl++;
        if (val_kl == 6) {
          val_kl = 0;
          fonarik = !fonarik;
        }
      }
    }
  }
  if (fonarik == 0) { //фонарик
    PORTB &= ~(1 << 1);//пин фонаря
  } else if (fonarik == 1) {
    PORTB |= (1 << 1);//пин фонаря
  }
  if (podsvetka == 1) {
    PORTC &= ~(1 << 2); //A2 дисплей Light
  }
  if (podsvetka == 0) {
    PORTC |= (1 << 2); //A2 дисплей Light
  }
  if (millis() - lcd_milis >= 300) { //скорость отрисоаки дисплея
    lcd_milis = millis();
    if (menu == 0) {
      lcd_poisk();//вывод на дисплей режима поиск
      poisk_f();
    }
    if (menu == 1) {
      lcd_menu();//вывод на дисплей меню
    }
    if (menu == 2) {
      lcd_sys();//вывод на дисплей системного меню
    }
    if (menu == 3) {
      zamer_200s();//вывод на дисплей замер 180сек
    }
    if (menu == 4) {
      zamer_beta();
    }
  }
  generator();//накачка по обратной связи с АЦП
  if (shet_s != shet) {
    signa ();//подача сигнала о частичке
  }
  if (!(PIND & (1 << PIND3))) { //нажатие ок
    _delay_ms(500);//антидребезг
    OK();
  }
  if (menu == 1) {
    if (!(PIND & (1 << PIND4))) { //нажатие >>>
      _delay_ms(500);//антидребезг
      if (n_menu == 0) {
        treviga_1++;
      }
      if (n_menu == 1) {
        treviga_2++;
      }
      if (n_menu == 2) {
        podsvetka = !podsvetka;
      }
      if (n_menu == 3) {
        son_OK = !son_OK;
      }
      if (n_menu == 4) {
        scrin_GRAF++;
        if (scrin_GRAF > 10) {
          scrin_GRAF = 1;
        }
      }
      if (n_menu == 5) {
        buzz_ON = !buzz_ON;
      }
      if (n_menu == 6) {
        menu = 0;
      }
      if (n_menu == 7) {
        eeprom_wrS ();
        menu = 0;
      }
    }
  }
  if (menu == 2) {
    if (!(PIND & (1 << PIND4))) { //нажатие >>>
      _delay_ms(500);//антидребезг
      if (sys_menu == 0) {
        opornoe = opornoe + 0.01;
        if (opornoe < 0.98) {
          opornoe = 1.20;
        }
        if (opornoe > 1.20) {
          opornoe = 0.98;
        }
      }
      if (sys_menu == 1) {
        puls++;
        if (puls < 1) {
          puls = 200;
        }
        if (puls > 200) {
          puls = 1;
        }
      }
      if (sys_menu == 2) {
        time_doza = 0;//сброс накопленной дозы
        doz_v = 0;//сброс накопленной дозы
        eeprom_wrD ();
        myGLCD.clrScr();
        myGLCD.setFont(SmallFont);
        myGLCD.print("SBROS OK", CENTER, 24);
        myGLCD.update();
        _delay_ms(1000);
      }
      if (sys_menu == 3) {
        menu = 0;
      }
      if (sys_menu == 4) {
        eeprom_wrS ();
        menu = 0;
      }
      if (sys_menu == 5) {
        beta_time++;
      }
    }
  }
  if (menu == 1) {
    if (!(PIND & (1 << PIND7))) { //нажатие <<<
      _delay_ms(500);//антидребезг
      if (n_menu == 0) {
        treviga_1--;
      }
      if (n_menu == 1) {
        treviga_2--;
      }
      if (n_menu == 2) {
        podsvetka = !podsvetka;
      }
      if (n_menu == 3) {
        son_OK = !son_OK;
      }
      if (n_menu == 4) {
        scrin_GRAF--;
        if (scrin_GRAF < 1) {
          scrin_GRAF = 10;
        }
      }
      if (n_menu == 5) {
        buzz_ON = !buzz_ON;
      }
      if (n_menu == 6) {
        menu = 0;
      }
      if (n_menu == 7) {
        eeprom_wrS ();
        menu = 0;
      }
    }
  }
  if (menu == 2) {
    if (!(PIND & (1 << PIND7))) { //нажатие <<<
      _delay_ms(500);//антидребезг
      if (sys_menu == 0) {
        opornoe = opornoe - 0.01;
        if (opornoe < 0.98) {
          opornoe = 1.20;
        }
        if (opornoe > 1.20) {
          opornoe = 0.98;
        }
      }
      if (sys_menu == 1) {
        puls--;
        if (puls < 1) {
          puls = 200;
        }
        if (puls > 200) {
          puls = 1;
        }
      }
      if (sys_menu == 2) {
        time_doza = 0;//сброс накопленной дозы
        doz_v = 0;//сброс накопленной дозы
        eeprom_wrD ();
        myGLCD.clrScr();
        myGLCD.setFont(SmallFont);
        myGLCD.print("SBROS OK", CENTER, 24);
        myGLCD.update();
        _delay_ms(1000);
      }
      if (sys_menu == 3) {
        menu = 0;
      }
      if (sys_menu == 4) {
        eeprom_wrS ();
        menu = 0;
      }
      if (sys_menu == 5) {
        beta_time--;
      }
    }
  }
}
//-------------------------------------------------------------
void OK () { //нажатие ОК
  if (!(PIND & (1 << PIND3))) { //удержаиние OK
    val_ok++;
    if (val_ok == 10) {
      val_ok = 0;
      menu = 2;
    }
  }
  if (menu == 2) {
    sys_menu++;
    if (sys_menu > 5) {
      sys_menu = 0;
    }
  }
  if (menu == 1) {
    n_menu++;
    if (n_menu > 7) {
      n_menu = 0;
    }
  }
  if (menu == 0) {
    menu = 1;
  }
  if (menu == 3) {
    menu = 1;
  }
}
//--------------------------------------------------------------
void gif_nabor() {
  myGLCD.drawLine(0, 24, 84, 24); myGLCD.drawLine(0, 38, 84, 38);
  for (int i = 83 - zam_180p * 0.47; i < 84; i++) {
    myGLCD.drawLine(i, 24, i, 38);
  }
  g_fl = !g_fl;
  if (g_fl == 0) {
    myGLCD.drawBitmap(gif_x, 27, gif_chast_1, 8, 8);
  } else {
    myGLCD.drawBitmap(gif_x, 27, gif_chast_2, 8, 8);
  }
  if (zam_180p < 200) {
    gif_x = gif_x + 1;
    if (gif_x >= 83 - zam_180p * 0.47) {
      gif_x = 0;
    }
    myGLCD.print("ANALIZ", CENTER, 40);
  }

  if (zam_180p >= 200) {
    myGLCD.print("OBNOVLENIE", CENTER, 40);
  }
}
//--------------------------------------------------------------
void zamer_200s() {
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.print("%", 20, 0); myGLCD.printNumF(stat_percent, 1, 26, 0);
  myGLCD.setFont(MediumNumbers);
  if (fon > 0) {
    if (fon >= 1000) {
      myGLCD.printNumI(fon, LEFT, 7);
    }
    if (fon < 1000) {
      myGLCD.printNumI(fon, CENTER, 7);
    }
  }
  myGLCD.setFont(SmallFont); myGLCD.print("uR/h", RIGHT, 12);
  gif_nabor();
  battery();
  myGLCD.update();
  if (millis() - toch_milis >= 1000) {
    toch_milis = millis();
    for (int i = 0; i < 200; i++) { //сдвигаем
      mass_toch[i] = mass_toch[i + 1];
    }
    mass_toch[199] = shet;
    shet = 0;
    if (zam_180p < 200) { //первый набор массива
      zam_180p++;
      int fon_vr1 = 0;
      for (int i = 200 - zam_180p; i < 200; i++) {
        fon_vr1 = fon_vr1 + mass_toch[i];
      }
      fon = fon_vr1 * (40.0 / zam_180p);
    }
    if (zam_180p >= 200) { //набор массива
      int fon_vr1 = 0;
      for (int i = 0; i < 200; i++) {
        fon_vr1 = fon_vr1 + mass_toch[i];
      }
      fon = fon_vr1 / 5;
    }
    if (zam_180p <= 36) {
      stat_percent = stat_percent - 2.0;
    }
    if (zam_180p > 36 && zam_180p <= 72) {
      stat_percent = stat_percent - 0.3;
    }
    if (zam_180p > 72 && zam_180p <= 100) {
      stat_percent = stat_percent - 0.2;
    }
    if (zam_180p > 100 && zam_180p <= 200) {
      stat_percent = stat_percent - 0.1;
    }
    if (stat_percent < 5) {
      stat_percent = 5.0;
    }
  }
  if (!(PIND & (1 << PIND7))) { //нажатие <<<
    _delay_ms(500);//антидребезг
    menu = 0;
    shet = 0; fon = 0; zam_36p = 0;
    for (int i = 0; i < 18; i++) { //чистим
      mass_36[i] = 0;
    }
    if (!(PIND & (1 << PIND7))) {//нажатие <<< фонарик
      val_kl++;
      if (val_kl == 6) {
        val_kl = 0;
        fonarik = !fonarik;
      }
    }
  }
}
//--------------------------------------------------------------
void lcd_poisk() {//вывод на дисплей режима поиск
  if (shet < treviga_1 && fon < treviga_1) {//проверяем тревогу
    tr = 0;
  }
  if (shet > treviga_1 || fon > treviga_1) {//проверяем тревогу
    tr = 1;
  }
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  if (tr == 1) { //опасно
    myGLCD.drawBitmap(0, 0, logo_tr, 24, 8);
  }
  myGLCD.print("%", 20, 0); myGLCD.printNumF(100 - (zam_36p * 2.0), 1, 26, 0);
  myGLCD.setFont(MediumNumbers);
  if (fon > 0) {
    if (fon >= 1000) {
      myGLCD.printNumI(fon, LEFT, 7);
    }
    if (fon < 1000) {
      myGLCD.printNumI(fon, CENTER, 7);
    }
  }
  myGLCD.setFont(SmallFont); myGLCD.print("uR/h", RIGHT, 12);
  time_d ();
  myGLCD.setFont(TinyFont);
  myGLCD.printNumI(HOUR, 0, 26);
  if (HOUR >= 9) {
    myGLCD.print("h", 13, 26);
  }
  if (HOUR < 9) {
    myGLCD.print("h", 5, 26);
  }
  myGLCD.printNumI(MIN, 18, 26);
  if (MIN >= 9) {
    myGLCD.print("m", 26, 26);
  }
  if (MIN < 9) {
    myGLCD.print("m", 23, 26);
  }
  myGLCD.setFont(SmallFont);
  if (doz_v < 1000) {
    myGLCD.printNumF(doz_v, 1, 41, 24); myGLCD.print("uR", RIGHT, 24);
  }
  if (doz_v >= 1000) {
    myGLCD.printNumF(doz_v / 1000.0, 2, 41, 24); myGLCD.print("mR", RIGHT, 24);
  }
  myGLCD.drawLine(0, 32, 83, 32);//верхняя
  battery();
  for (int i = 0; i < 82; i ++) { //печатаем график
    if (mass_p[i] > 0) {
      if (mass_p[i] <= 15) {
        myGLCD.drawLine(i + 1, 47, i + 1, 47 - mass_p[i]);
      }
      if (mass_p[i] > 15) {
        myGLCD.drawLine(i + 1, 47, i + 1, 47 - 15);
      }
    }
  }
  myGLCD.update();
}
//-------------------------------------------------------------
void lcd_menu() { //вывод на дисплей меню
  myGLCD.clrScr();
  myGLCD.setFont(TinyFont);
  myGLCD.print("OPASN.1", 0, 0); myGLCD.printNumI(treviga_1, CENTER, 0); myGLCD.print("uR/h", RIGHT, 0);
  myGLCD.print("OPASN.2", 0, 6); myGLCD.printNumI(treviga_2, CENTER, 6); myGLCD.print("uR/h", RIGHT, 6);
  myGLCD.print("PODSV.", 0, 12); myGLCD.printNumI(podsvetka, CENTER, 12);
  myGLCD.print("------", 0, 18); myGLCD.printNumI(son_OK, CENTER, 18); myGLCD.print("on/off", RIGHT, 18);//usr
  myGLCD.print("POISK.", 0, 24); myGLCD.printNumI(scrin_GRAF, CENTER, 24); myGLCD.print("SEK", RIGHT, 24);
  myGLCD.print("ZVUK", 0, 30); myGLCD.printNumI(buzz_ON, CENTER, 30);
  myGLCD.print("OUT", 0, 36);
  myGLCD.print("SAVE", 0, 42);
  myGLCD.print(">", 30, n_menu * 6);
  myGLCD.update();
}
//-------------------------------------------------------------
void lcd_sys() { //вывод на дисплей меню
  VCC_read();
  speed_nakachka ();//скорость накачки имлульсы/сек
  myGLCD.clrScr();
  myGLCD.setFont(TinyFont);
  myGLCD.print("OPORN", 0, 0); myGLCD.printNumF(opornoe, 2, CENTER, 0); myGLCD.print("VCC", 55, 0); myGLCD.printNumF(VCC, 2, RIGHT, 0);
  hv_400 = hv_adc * opornoe * k_delitel / 255; //считем высокео перед выводом
  myGLCD.print("NAKAH", 0, 6); myGLCD.printNumI(puls, CENTER, 6); myGLCD.printNumI(hv_400, RIGHT, 6);
  myGLCD.print("DOZA", 0, 12); myGLCD.print(">>", CENTER, 12); myGLCD.print("SBROS", RIGHT, 12);
  myGLCD.print("OUT", 0, 18);
  myGLCD.print("SAVE", 0, 24);
  myGLCD.print("BETA", 0, 30); myGLCD.printNumI(beta_time, CENTER, 30); myGLCD.print("MIN", RIGHT, 30);
  myGLCD.print(">", 30, sys_menu * 6);
  myGLCD.print("SPEED N", 0, 40); myGLCD.printNumI(speed_nak, CENTER, 40); /*myGLCD.print("imp/sek", RIGHT, 40);*/ 
  myGLCD.printNumI(hv_adc, RIGHT, 40);
  myGLCD.update();
}
//-------------------------------------------------------------
void zamer_beta() {// замер бета или продуктов
  if (gotovo == 0) {
    if (!(PIND & (1 << PIND3))) { //нажатие OK
      gotovo = 1;
    }
    myGLCD.clrScr();
    myGLCD.setFont(SmallFont);
    myGLCD.print("Zamer ", 20, 10); myGLCD.printNumI(bet_z, 55, 10);
    myGLCD.print("nagmi OK", CENTER, 20);
    myGLCD.update();
  }
  if (gotovo == 1) {
    timer_soft();
    byte otsup = 0;
    if (minute > 9) {
      otsup = 5;
    }
    myGLCD.clrScr();
    battery();
    myGLCD.setFont(TinyFont);
    myGLCD.printNumI(minute, LEFT, 0);
    if (toch == 0) {
      myGLCD.print(":", 5 + otsup, 0);
    } else {
      myGLCD.print(" ", 5 + otsup, 0);
    }
    myGLCD.printNumI(sek, 10 + otsup, 0); myGLCD.print("time", 23 + otsup, 0);
    myGLCD.drawLine(0, 8, 83, 8);
    myGLCD.setFont(SmallFont);
    myGLCD.drawLine(40, 8, 40, 28);
    myGLCD.print("Zamer0", LEFT, 10); myGLCD.print("Zamer1", RIGHT, 10);
    myGLCD.printNumI(bet_z0, LEFT, 20); myGLCD.printNumI(bet_z1, RIGHT, 20);
    myGLCD.drawLine(0, 28, 83, 28);
    if (bet_z < 2) {
      myGLCD.print("Idet zamer", CENTER, 30); myGLCD.printNumI(bet_z, RIGHT, 30);
      myGLCD.printNumI(bet_r, CENTER, 38);
    }
    if (bet_z == 2) {
      myGLCD.print("Rezultat", CENTER, 30);
      myGLCD.printNumI(bet_r, CENTER, 38); myGLCD.print("mkR/h", RIGHT, 38);
    }
    myGLCD.update();
    if (bet_z == 0) { //первый замер
      bet_z0 = bet_z0 + shet;
      shet = 0;
      if (minute >= beta_time) {
        bet_z = 1;
        sek = 0;
        minute = 0;
        gotovo = 0;
      }
    }
    if (bet_z == 1) { //второй замер
      bet_z1 = bet_z1 + shet;
      shet = 0;
      if (minute >= beta_time) {
        bet_z = 2;
        sek = 0;
        minute = 0;
      }
    }
    if (bet_z == 2) { //результат
      bet_r = bet_z1 - bet_z0;
      bet_r = bet_r / (1.5 * beta_time);
    }
  }
  if (!(PIND & (1 << PIND4))) { //нажатие >>>
    _delay_ms(500);//антидребезг
    menu = 0;
    shet = 0; fon = 0; zam_36p = 0;
    for (int i = 0; i < 18; i++) { //чистим
      mass_36[i] = 0;
    }
  }
}
//-------------------------------------------------------------
void poisk_f() {//режим поиска
  if (poisk == 1) {
    if (millis() - gr_milis >= scrin_GRAF * 1000) { //счет для графика
      gr_milis = millis();
      val_ok = 0;//сброс удержания системного меню
      shet_gr = shet - shet_n;
      if (shet_gr < 0) {
        shet_gr = 1;
      }
      mass_p[m] = shet_gr ;
      shet_n = shet;
      if (m < 82) {
        m++;
      }
      if (m == 82) {
        for (int i = 0; i < 83; i++) {
          mass_p[i] = mass_p[i + 1];
        }
        mass_p[82] = shet_gr;
      }
    }
    if (millis() - toch_milis >= 1000) {
      toch_milis = millis();
      for (int i = 0; i < 40; i++) { //сдвигаем
        mass_36[i] = mass_36[i + 1];
      }
      mass_36[40] = shet;
      if (zam_36p < 40) { //первый набор массива
        zam_36p++;
        fon = fon + shet;
      }
      if (zam_36p >= 40) { //набор массива
        int fon_vr1 = 0;
        for (int i = 0; i < 40; i++) {
          fon_vr1 = fon_vr1 + mass_36[i];
        }
        fon = fon_vr1;
      }
      shet = 0;
      doz_v = doz_v + fon / 100.0 / 40.0;
      time_doza = time_doza + 1;
      if (doz_v - doza_vr >= save_DOZ) { //а не пора ли сохранить дозу ?)
        eeprom_wrD ();
        doza_vr = doz_v;
      }
    }
  }
}
//-------------------------------------------------------------
void signa () { //индикация каждой частички звуком светом
  shet_s = shet;
  if (buzz_ON == 1) {//включаем бузер
    PORTB |= (1 << 5); //светодиод
    int d = 30;
    while (d > 0) {
      PORTD |= (1 << 6);
      _delay_us(ton_BUZZ);
      PORTD &= ~(1 << 6);
      _delay_us(ton_BUZZ);
      d--;
    }
    PORTB &= ~(1 << 5);//светодиод
  }
  //generator();//накачка по обратной связи с АЦП
}
//-------------------------------------------------------------
void Schet() { //прерывание от счетчика на пин 2
  shet++;
}
//-------------------------------------------------------------
void generator() {//накачка по обратной связи с АЦП
  hv_adc  = Read_HV();
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    int c = puls;
    PORTD |= (1 << 5); //пин накачки
    while (c > 0) {
      asm("nop");
      c--;
    }
    PORTD &= ~(1 << 5);//пин накачки
    speed_nakT++;
  }
}
//-------------------------------------------------------------
byte Read_HV () {
  ADCSRA = 0b11100111;
  ADMUX = 0b11100110;//выбор внутреннего опорного 1,1В и А6
  for (int i = 0; i < 10; i++) {
    while ((ADCSRA & 0x10) == 0);
    ADCSRA |= 0x10;
  }
  result = 0;
  for (int i = 0; i < 10; i++) {
    while ((ADCSRA & 0x10) == 0);
    ADCSRA |= 0x10;
    result += ADCH;
  }
  result /= 10;
  return result;
}
//-------------------------------------------------------------
void battery() { //батарейка
  if (bat_mill - millis() > 2000) {
    bat_mill = millis();
    VCC_read();
  }
  myGLCD.drawBitmap(59, 0, logo_bat, 24, 8);
  myGLCD.setFont(TinyFont);
  myGLCD.printNumF(VCC, 2, 63, 2);
}
//-------------------------------------------------------------
void VCC_read() { // Чтение напряжения батареи
  ADCSRA = 0b11100111;
  ADMUX = 0b01101110;//Выбор внешнего опорного+BG
  _delay_ms(5);
  while ((ADCSRA & 0x10) == 0);
  ADCSRA |= 0x10;
  byte resu = ADCH;
  //ADCSRA &= ~(1 << ADEN);  // отключаем АЦП,
  VCC = (opornoe * 255.0) / resu;
}
//-------------------------------------------------------------
void lcd_init() {
  myGLCD.InitLCD();
  myGLCD.setContrast(contrast);
  myGLCD.clrScr();
  myGLCD.drawBitmap(0, 0, logo_rag, 84, 48);
  myGLCD.setFont(SmallFont);
  myGLCD.print("Arduino+", CENTER, 32);
  myGLCD.print("Dosimetr v1.06", CENTER, 40);
  myGLCD.update();
  _delay_ms(1000);
}
//-------------------------------------------------------------
void eeprom_wrS () { //запись настроек в память
  EEPROM.write(0, 222);
  EEPROM.write(1, treviga_1);
  EEPROM.write(2, podsvetka);
  EEPROM.write(3, son_OK);
  EEPROM.write(4, scrin_GRAF);
  EEPROM.write(5, buzz_ON);
  EEPROM.write(6, puls);
  EEPROM.write(7, opornoe * 100);
  EEPROM.write(8, treviga_2);
  EEPROM.write(13, beta_time);
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.print("Save OK", CENTER, 24);
  myGLCD.update();
  _delay_ms(1000);
}
//-------------------------------------------------------------
void eeprom_wrD () { //запись настроек в память время накопления дозы
  byte hi = time_doza >> 8;
  byte low = time_doza;
  EEPROM.write(9, hi);
  EEPROM.write(10, low);
  hi = int(doz_v) >> 8;
  low = int(doz_v);
  EEPROM.write(11, hi);
  EEPROM.write(12, low);
}
//-------------------------------------------------------------
void eeprom_readD () { //чтание настроек из памяти время накопления дозы
  byte hi  = EEPROM.read(9);
  byte low  = EEPROM.read(10);
  time_doza = (hi << 8) | low;
  hi  = EEPROM.read(11);
  low  = EEPROM.read(12);
  doz_v = (hi << 8) | low;
}
//-------------------------------------------------------------
void eeprom_readS () { //чтание настроек из памяти
  if (EEPROM.read(0) == 222) {
    treviga_1 = EEPROM.read(1);
    podsvetka = EEPROM.read(2);
    son_OK = EEPROM.read(3);
    scrin_GRAF = EEPROM.read(4);
    buzz_ON = EEPROM.read(5);
    puls = EEPROM.read(6);
    opornoe = EEPROM.read(7) / 100.0;
    treviga_2 = EEPROM.read(8);
    beta_time = EEPROM.read(13);
  }
  _delay_ms(10);
}
//-------------------------------------------------------------
void nakachka() {//первая накачка
  byte n = 0;
  while (n < 30) {
    PORTD |= (1 << 5);//дергаем пин
    int c = puls;
    while (c > 0) {
      asm("nop");
      c--;
    }
    PORTD &= ~(1 << 5);//дергаем пин
    n++;
    _delay_us(100);
  }
}
//-------------------------------------------------------------
void speed_nakachka () { //скорость накачки имлульсы/сек
  if (millis() - spNAK_milis >= 1000) {
    spNAK_milis = millis();
    speed_nak = speed_nakT;
    speed_nakT = 0;
  }
}
//-------------------------------------------------------------
void time_d() {
  HOUR = time_doza / 3600;
  MIN = (time_doza / 60) % 60;
}
//-------------------------------------------------------------
void timer_soft() {
  if (millis() - timer_mil >= 1000) {
    timer_mil = millis();
    sek++;
    toch = !toch;
    if (sek > 60) {
      sek = 0;
      minute++;
    }
  }
}

lomaster911 пишет:

Ардуина иде 1.8.3 с установкой. ошибки C:\Users\потом непонятная папка.Я ее не нашёл...

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

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

 

Surikat
Offline
Зарегистрирован: 13.07.2016

ДОБРЫЙ ДЕНЬ! НАШЕЛ НА ПРОСТОРАХ ИНТЕРНЕТА ИНТЕРЕСНУЮ СХЕМУ ДОЗИКА, ВЫСОКОВОЛЬТНУЮ ЧАСТЬ ПОТЯНИТЬ АРДУИНКА Бестрансформаторный дозиметр-радиометр file:///D:/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%BA%D0%B8.%20%D0%94%D0%BB%D1%8F%20%D0%B1%D1%8B%D1%82%D0%B0,%20%D0%BE%D1%82%D0%B4%D1%8B%D1%85%D0%B0/%D0%94%D0%BE%D0%B7%D0%B8%D0%BC%D0%B5%D1%82%D1%80/%D0%91%D0%B5%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%B7%D0%B8%D0%BC%D0%B5%D1%82%D1%80-%D1%80%D0%B0%D0%B4%D0%B8%D0%BE%D0%BC%D0%B5%D1%82%D1%80/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE%D0%9A%D0%BE%D1%82%20%20%20%D0%91%D0%B5%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%B7%D0%B8%D0%BC%D0%B5%D1%82%D1%80-%D1%80%D0%B0%D0%B4%D0%B8%D0%BE%D0%BC%D0%B5%D1%82%D1%80_files/02_pre.gif

 

ССЫЛКА http://radiokot.ru/circuit/digital/home/170/

1707
Offline
Зарегистрирован: 08.02.2017

Всем привет. К гуру проекта хотел бы спросить, есть ли какие то изменения в крайней печатке от камрада tekagi из 596 поста за это время? У меня проект остановился, плюс печатку свою я покалечил выпаиваниями при тестах транса, хочу новою платку травануть, транзистор будет 6346 smd.

Alexink
Offline
Зарегистрирован: 07.09.2017

А если подключить e-ink дисплей можно много чего изменить дозиметр может раз в неделю просыпатся менять на дисплее накопленую дозу или раз в день и она сохранится на дисплее который если не обновляеется то ничего не потребляет.

228
Offline
Зарегистрирован: 16.09.2017

Здравствуйте, решил собрать данный прибор. Есть вопрос, на место конденсаторов С17 С8 подойдутли два твердотельных на 47мф 50v ?

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

Керамика там надо. Достаточно 10-20мкФ.

1707
Offline
Зарегистрирован: 08.02.2017

Огромное спасибо камраду tekagi без него я бы не доделал проект!

Пруф в большом разрешении:

arkam256
Offline
Зарегистрирован: 07.10.2017

Добрый день схему прибора можете сбросить

arkam256
Offline
Зарегистрирован: 07.10.2017

sva_khv пишет:
схему прибора можете сбросить

 

Добрый день!

Продолжаю эксперементировать со своим прибором.

Сделал показания как в ренгенах так и в зивертах

Реализовал накопление и показ почасовой радиации за неделю.

 

sva_khv
Offline
Зарегистрирован: 19.12.2016

arkam256 пишет:

Добрый день схему прибора можете сбросить

Подкючение экрана не прорисовывал  - подключается сверху на мегу.

sva_khv
Offline
Зарегистрирован: 19.12.2016

Схема то простая.

А вот программа навороченная. Я когда добавлял датчик давления (через 3 месяца) - замучился разбираться что сам наваял. :-)

arkam256
Offline
Зарегистрирован: 07.10.2017

А полностью схему сбросте с прошивкой

 

ortus
Offline
Зарегистрирован: 16.10.2017

Доброго времени суток, а вариант печатки есть с более эргономичным видом? и второй вопрос, автор проекта или кто нибудь из участников дорабатывал прошивку под датчики сбт11, сбт11а?

Solid_niy
Offline
Зарегистрирован: 16.10.2017

Здравствуйте Tekagi. Не могли бы вы обновить ссылку с поста #596 так как она не работает. Хотел собрать описанный в этом форуме проект дозиметра на ардуино на печатной плате.

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

Странно, похоже дропбокс закрыл скачивание по прямым ссылкам, только через промежуточную страницу. Дублирую линк на печатку. (По данной печатке собирал 1707, фото в посте #792). В архиве печатки с активным и пассивным бузером (вкладки внизу окна Спринта), под активный нужно слегка поправить код, убрав генерацию звука. Под пассивный работают авторские скетчи, но звук тише.

https://www.dropbox.com/s/4yeozncai1lxhlr/ARDOs_v1_04_modified_pcb.rar?dl=0   ссылка на страницу закачки. Регистрироваться для скачивания не надо, если появится окошко "Зарегистрируйтесь..." - просто закройте его.

Настройка прибора здесь.

ortus, под другие датчики прошивок на данный момент нет.