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

Norsemen
Offline
Зарегистрирован: 08.07.2017

Трансформаторы никогда не мотал, что это значит? на схеме я так понял нарисована разная фазировка. Чтобы узнать ту что уже намотана надо вскрывать дроссель?

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

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

Norsemen
Offline
Зарегистрирован: 08.07.2017

А есть у кого-нибудь файлы извлеченные , выложенные тут github.com/imaSoft/MyDosimetr_Pro_Mini-LCD5110-BCM20 с паролем в раровских архивах?

AleksBAM
Offline
Зарегистрирован: 13.09.2014

Добрый день. 

Все-таки решил собрать ваш дозиметр. Немогу понять сколько ставить коэффициент делителя в скетче. Если 126.6М/220к = 575 почему в скетче он 420. скетч v1.06.

Подскажите!!!

 

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

AleksBAM, по делителям смотрите этот пост. У автора собрано несколько версий дозиметра, и коэффициенты в скетче могли остаться от платы с другими номиналами делителя. После версии 1.06 с сайта автора форумчанами было сделано несколько багфиксов, поправленные версии ищите на предыдущих страницах этой ветки. Баги пока ещё есть)

AleksBAM
Offline
Зарегистрирован: 13.09.2014

Сделал плату еле раскачал до 400В. И вохоже выяснил, что не работает счетчик-гейгера стс-5. Есть в наличии СИ3БГ его можно примудрить.

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

Си3бг для запредельных уровней излучения, для бытового применения не подойдёт. Сбм20 не редкость, на вторичном рынке не столь уж дорого стоят.
"Не работает" - импульсов вообще нет?
Если высокое генерится с трудом - проверяйте транс, накопительный конденсатор, ключ накачки.

Norsemen
Offline
Зарегистрирован: 08.07.2017

А кто как держатель делал под сам датчик?

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

Самое простое - аккуратно припаяться к торцам датчика (естественно, не перегревая сам датчик). Можно использовать U-образные проволочные скобы, двумя концами впаяные в плату или держатели предохранителей под пайку. Так, например, реализовано в "Сталкере":

bwn
Offline
Зарегистрирован: 25.08.2014

tekagi пишет:

Самое простое - аккуратно припаяться к торцам датчика (естественно, не перегревая сам датчик). 

Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?

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

bwn пишет:

Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?

Я бы паять не рискнул, лучше сделать какой-то другой крепеж. Вариантов масса и сделать несложно.

Norsemen
Offline
Зарегистрирован: 08.07.2017

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

bwn
Offline
Зарегистрирован: 25.08.2014

Joiner пишет:

bwn пишет:

Подпаиваться к торцам (где припой) возможно? Или лучше к латуни?

Я бы паять не рискнул, лучше сделать какой-то другой крепеж. Вариантов масса и сделать несложно.

Согласен, но и сплав Розе (разбавление припоя) тоже имеет право на жизнь. Думаю локальный нагрев градусов в 150 он вполне перенесет. Изделие единичное, рассматривать экстремальные условия смысла нет. Про торец, не ясно, это просто припой или в том числе и заглушка для вакуум камеры. 

Lazy_Dragon
Offline
Зарегистрирован: 09.03.2017

Norsemen пишет:

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

Можно поискать в магазинах радиодеталей держатель предохранителя на плату. Я взял такие , отлично подошли.

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

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

Что находится под колпачками можно увидеть на примере модели СБМ-20-1.

 

Проволочные скобы - кусок лужёного медного провода диаметром 0.2 - 0.6мм. Но для снятия счётчика скобы придётся отпаивать. Встречал также крепление в виде 3-6 витков провода вокруг колпачка, концы которого были скручены вместе и впаяны в плату.

В своём варианте припаял к торцам лужёные жилки от витухи и впаял в плату, с тех пор уже раз пять отпаивал-припаивал (тестировал другие СБМки и счётчики другого типа).

Варианты крепления под пайку:

 

Что под плюсовым колпачком:

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

Lazy_Dragon пишет:
Я взял такие , отлично подошли.

Подтверждаю) Можно ещё и такие https://www.chipdip.ru/product/fh-103

и вообще, измерив диаметр колпачка, или взяв с собой СБМ-20, отправиться в ближайший радиомагазин)

Norsemen
Offline
Зарегистрирован: 08.07.2017

А есть у кого-нибудь полная схема в spl7 ? 

Печатка ardosv1_01.lay6 файл от 16 октября это последняя версия? Я так понял она сделана tekagi.

И немного не понял на этой печатке откуда берется минус на кнопки. Там вместо этого +через кондер 100n

И я так понял эта плата под самонамоточный трансформатор, а я собираюсь на дроссель доматывать.

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

Norsemen пишет:

А есть у кого-нибудь полная схема в spl7 ? 

Под авторскую печатку - только у bodriy2014. Есть моя, но она отличается от авторской и под вышеуказанную печатку не подойдёт (хотя и была взята автором за исходник). Схемы в .jpg для сборки вполне достаточно.

Norsemen пишет:

Печатка ardosv1_01.lay6 файл от 16 октября это последняя версия?

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

Norsemen пишет:

Я так понял она сделана tekagi.

Печатку делал bodriy2014. Я лишь убрал пару перемычек и вывел точки питания на край платы.

Norsemen пишет:

И немного не понял на этой печатке откуда берется минус на кнопки. Там вместо этого +через кондер 100n

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

Norsemen пишет:

И я так понял эта плата под самонамоточный трансформатор, а я собираюсь на дроссель доматывать.

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

Vladimir777
Offline
Зарегистрирован: 08.01.2018

Здравствуйте!

Я новичок в ардуино и микроэлетронике. в прошлом году собрал рабочий аппарат для контактной сварки на ардуино, код мне помогли сделать. Подключил ардуино про мини к компу и пытался прошить 3 скетча. У всех вылетала ошибка eeprom_readS' was not declared in this scope. Причем скетч с контактной сварки (и другие) прекрасно прошивается на про мини, хотя изначально был для уны. Выкладываю полный код ошибки. Помогите пожалуйста разобраться что не так

Arduino: 1.6.12 (Windows 7), Плата:"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\admin\Documents\Arduino\libraries -fqbn=arduino:avr:pro:cpu=16MHzatmega328 -ide-version=10612 -build-path C:\Temp\arduino_build_964121 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\admin\Documents\Arduino\libraries -fqbn=arduino:avr:pro:cpu=16MHzatmega328 -ide-version=10612 -build-path C:\Temp\arduino_build_964121 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino
Using board 'pro' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\gif.c" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph\DefaultFonts.c" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph\LCD5110_Graph.cpp" -o "nul"
Generating function prototypes...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "C:\Temp\arduino_build_964121\preproc\ctags_target_for_gcc_minus_e.cpp"
"C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino10/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Temp\arduino_build_964121\preproc\ctags_target_for_gcc_minus_e.cpp"
Компиляция скетча...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc" -c -g -Os -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\gif.c" -o "C:\Temp\arduino_build_964121\sketch\gif.c.o"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM\src" "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp" -o "C:\Temp\arduino_build_964121\sketch\ARDOs_noSleep_v106.ino.cpp.o"
F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void setup()':

ARDOs_noSleep_v106:63: error: 'eeprom_readS' was not declared in this scope

ARDOs_noSleep_v106:64: error: 'eeprom_readD' was not declared in this scope

ARDOs_noSleep_v106:65: error: 'lcd_init' was not declared in this scope

ARDOs_noSleep_v106:66: error: 'Schet' was not declared in this scope

ARDOs_noSleep_v106:71: error: 'nakachka' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void loop()':

ARDOs_noSleep_v106:138: error: 'lcd_poisk' was not declared in this scope

ARDOs_noSleep_v106:139: error: 'poisk_f' was not declared in this scope

ARDOs_noSleep_v106:142: error: 'lcd_menu' was not declared in this scope

ARDOs_noSleep_v106:145: error: 'lcd_sys' was not declared in this scope

ARDOs_noSleep_v106:148: error: 'zamer_200s' was not declared in this scope

ARDOs_noSleep_v106:151: error: 'zamer_beta' was not declared in this scope

ARDOs_noSleep_v106:154: error: 'generator' was not declared in this scope

ARDOs_noSleep_v106:156: error: 'signa' was not declared in this scope

ARDOs_noSleep_v106:160: error: 'OK' was not declared in this scope

ARDOs_noSleep_v106:190: error: 'eeprom_wrS' was not declared in this scope

ARDOs_noSleep_v106:219: error: 'eeprom_wrD' was not declared in this scope

ARDOs_noSleep_v106:230: error: 'eeprom_wrS' was not declared in this scope

ARDOs_noSleep_v106:266: error: 'eeprom_wrS' was not declared in this scope

ARDOs_noSleep_v106:295: error: 'eeprom_wrD' was not declared in this scope

ARDOs_noSleep_v106:306: error: 'eeprom_wrS' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void zamer_200s()':

ARDOs_noSleep_v106:383: error: 'battery' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void lcd_poisk()':

ARDOs_noSleep_v106:463: error: 'time_d' was not declared in this scope

ARDOs_noSleep_v106:487: error: 'battery' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void lcd_sys()':

ARDOs_noSleep_v106:517: error: 'VCC_read' was not declared in this scope

ARDOs_noSleep_v106:518: error: 'speed_nakachka' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void zamer_beta()':

ARDOs_noSleep_v106:545: error: 'timer_soft' was not declared in this scope

ARDOs_noSleep_v106:551: error: 'battery' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void poisk_f()':

ARDOs_noSleep_v106:651: error: 'eeprom_wrD' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void generator()':

ARDOs_noSleep_v106:680: error: 'Read_HV' was not declared in this scope

F:\электроника\дозиметры\на ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino: In function 'void battery()':

ARDOs_noSleep_v106:713: error: 'VCC_read' was not declared in this scope

Используем библиотеку LCD5110_Graph в папке: C:\Users\admin\Documents\Arduino\libraries\LCD5110_Graph (legacy)
Используем библиотеку EEPROM версии 2.0 из папки: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\EEPROM 
exit status 1
'eeprom_readS' was not declared in this scope

Lazy_Dragon
Offline
Зарегистрирован: 09.03.2017

Судя по кракозябрам в логе, предположу, что мешают русские названия папок. Попробуйте переименовать или на время кинуть в другую папку. Вот такое "F:\электроника\дозиметры\РЅР° ардуино\ARDOs_noSleep_v106\ARDOs_noSleep_v106.ino" не хорошо

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

Vladimir777 пишет:

Arduino: 1.6.12 (Windows 7)

Я бы ещё посоветовал обновить ArduinoIDE до текущей версии. Иначе со встроенной библиотекой задержки проблемы вылезут.

Vladimir777
Offline
Зарегистрирован: 08.01.2018

Вы правы! не знаю что помогло. Спасибо!

а ведь мог и сам додуматься) 

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Решил повторить проект с голой атмегой 328, не пойму кварцем на какую частоту ее тактировать на 8 или 16мГц? На 16 она ведь не стабильно себя ведет при менее чем 5 Вольтах.

И на какой вход цеплять + аккумулятора для мониторинга напряжения? Цеплять напрямую или через резистор?

И подскажите кто где брал 1% резисторы для делителя в Украине? Может у кого в излишке и готов продать?

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

Нормально она на 16 мегагерцах жывёт)

https://www.chipdip.ru/product/atmega328-au и питание у неё 1,8-5,5 вольт)

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016
Большинство собравших использовало 16ти мегагерцевый вариант, особых глюков замечено не было. Можно и в соответствии с даташитом поставить 8 (соответственно при компилляции указать в ИДЕ 8М/3.3В), работать должно, но сложнее будет подобрать наиболее экономичный режим для преобразователя (получится удвоенный шаг при настройке длительности импульса накачки).
 
Мониторинг напряжения питания ведётся через BANDGAP, выводы никуда цеплять не надо)
 
В однопроцентных резисторах тоже особого смысла нет, задача не столько измерить напряжение с точностью до вольта, сколько удержать его в пределах рабочего плато датчика. Тем более применённый делитель с накопительным конденсатором тоже вносит некую погрешность. Получившийся делитель можно откалибровать подбором коэффициентов в скетче, методика описана в данном топике.
Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Спасибо) А коэффициент делителя нужно где то с скетче править(я просто 0 в кодинге, только повторяю проэкты)? Сделал коэффициент строго как у автора- 470(он так сказал в видео). 102.2мОм к 217.4кОм.

Уже увидел, отбой, пытаюсь прочесть всю тему.

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

По коэффициентам смотрите пост №786. Коэффициенты считаем исходя из применённого делителя, а не наоборот) Какие значения в делителе использовали - по тем и считайте.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Tekadi, подскажите пожалуйста, если в наличии есть гантелька на 10мГн с сопротивлением в 12.2 Ома ВВ часть можно собирать без умножителя?

Нет ли у Вас последней, как я понимаю версии1.6.2, со всеми правками от форумчан, от ImaSoft в частности? Тему осилил всю, но нашел только куски кода, всего скетча с багфиксами никто не выкладывал.

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

Dark-Dante пишет:

Tekadi, подскажите пожалуйста, если в наличии есть гантелька на 10мГн с сопротивлением в 12.2 Ома ВВ часть можно собирать без умножителя?

Пробуйте, должно завестись. С подобной гантелькой экспериментировал Medvedik, работало. Хотя я бы посоветовал гантельку поменьше размером, к примеру 6х8 при близком номинале индуктивности. Версию с умножителем собирать не советую, в свете последних изменений в скетче она может не заработать.

Dark-Dante пишет:

Нет ли у Вас последней, как я понимаю версии1.6.2, со всеми правками от форумчан, от ImaSoft в частности? Тему осилил всю, но нашел только куски кода, всего скетча с багфиксами никто не выкладывал.

Смотрите пост №871. Или 885, если возникнет проблема со входом в меню второго уровня. Правки от ImaSoft приенены пока не все. Код для ArduinoIDE берётся по кнопке в виде листа со стрелочками в правом верхнем углу портянки.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Спасибо! А удастся мне как то одно мегаомной дт-шкой измерить напряжение? Может через резистор в 10 мОм? ДТ-шка ище из первых, ей лет 15, измерил её сопротивление транзистор тестером- 1мОм.

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

Сомневаюсь, что преобразователь на фабричной гантельке вытянет подобную нагрузку. Можно попробовать добавить последовательно цепочку из 9ти резисторов по мегаому, и на время калибровки уменьшить дефайн ADC в скетче раза в 4 от расчётного, но это из области показаний плюс-минус лапоть. Измерять выставив мультиметр на максимальное значение постоянного напряжения.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Понял, одолжу на вчер флюк у знакомого.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Скетч под голую мегу 328 в ДИП и синий дисплей, порт А6 переназначен на А5, плюс все правки с темы от ImaSoft http://arduino.ru/forum/proekty/delaem-dozimetr?page=12#comment-295667 и tekagi

А где время счета под СТС-5 прописать?

/* ArDOs   v1.063.3
***IDE Arduino 1.8.2
*/
#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 //контрастность дисплея
//#define buzzer_active //если используется активный бузер (со встроенным генератором), управляемый транзистором с выхода 6, то раскомментировать эту строчку, если пассивный (с усилителем или без) - оставить закомментированой.
#define first_alarm_duration 7000 //длительность сигнала тревоги при превышении первого аварийного порога в миллисекундах
byte treviga_1 = 30; //первая ступень тревоги
byte treviga_2 = 60; //вторая ступень тревоги
byte del_BUZZ = 11;//длительность одиночного сигнала
//byte ton_BUZZ = 11; //тональность буззера
#define  ADC 198  //значение АЦП при котором 400В с учетом вашего делителя напряжения (0..255)
#define k_delitel 472 //коефициент дельтеля напряжения, зависит от вашего делителя.
byte puls = 2; //тонкая настройка длинны импульса высоковольтного транса
byte scrin_GRAF = 1; //скорость построения графика в секундах
bool buzz_ON = 1;  //включить индикацию бузером (1)
bool podsvetka = 0; //подсветка
bool alarm_sound = 1; //флаг индикации превышения порога звуком
bool son_OK = 0; //разрешение или запрет сна
float opornoe = 1.10; //делить на opornoe/10
#define son_t 40 //время засыпания в секундах
#define save_DOZ 20 //как часто сохранять накопленную дозу например каждые 20мкР
byte beta_time = 5; //время замера бета излучения
//настройки //////////////конец
//служебные переменные
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 alarm_milis = 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();//вывод на дисплей меню
      poisk_f();	  
    }
    if (menu == 2) {
      lcd_sys();//вывод на дисплей системного меню
      poisk_f();	  
    }
    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--;
      }
    }
  }

    if (!tr && alarm_sound) // если фон ниже порога тревоги, но сигнал тревоги ещё не выключен
  {
res_first_alarm(); //сбрасываем сигнал тревоги
  }
}
//-------------------------------------------------------------
void OK () { //нажатие ОК
  if (!(PIND & (1 << PIND3))) { //удержаиние OK
    val_ok++;
    if (val_ok >= 2) {
      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 (alarm_sound)  //сбрасываем сигнал тревоги первого уровня, если активен
    {
       res_first_alarm(); //сбрасываем сигнал тревоги 
    }
  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) {//проверяем тревогу
    check_alarm_signal(); // устанавливаем сигнал непрерывной тревоги, если "tr" переключился в "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", 4, 26);myGLCD.printNumI(MIN, 12, 26);
    if (MIN < 9) {myGLCD.print("m", 16, 26);}
    else {myGLCD.print("m", 20, 26);}
  }
  else {if ((HOUR > 9) && (HOUR < 99)) {myGLCD.print("h", 8, 26);myGLCD.printNumI(MIN, 16, 26);
          if (MIN < 9) {myGLCD.print("m", 20, 26);}
          else {myGLCD.print("m", 24, 26);}
        }
        else {myGLCD.print("h", 12, 26);myGLCD.printNumI(MIN, 20, 26);
              if (MIN < 9) {myGLCD.print("m", 24, 26);}
              else {myGLCD.print("m", 28, 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.update();
}
//-------------------------------------------------------------
void zamer_beta() {// замер бета или продуктов
  if (gotovo == 0) {
    if (!(PIND & (1 << PIND3))) { //нажатие OK
      gotovo = 1;
      switch (bet_z) //проверяем, находимся ли в первом или втором замере
      {
        case 0: //если в первом замере
      bet_z0 = 0; //обнуляем текущие показания замера 1
      shet = 0; //обнуляем счёт
        case 1: //если во втором замере
      bet_z1 = 0; //обнуляем текущие показания замера 2
      shet = 0; //обнуляем счёт            
      }
    }
    if (alarm_sound)  //если активен сигнал тревоги первого уровня
    {
       res_first_alarm(); //сбрасываем сигнал тревоги
    }
    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; 
		tone (6,2000,70); //генерим писк 2000Гц 70миллисекунд на 6й ноге
      }
    }
    if (bet_z == 1) { //второй замер
      bet_z1 = bet_z1 + shet;
      shet = 0;
      if (minute >= beta_time) {
        bet_z = 2;
        sek = 0;
        minute = 0;
		tone (6,2000,70); //генерим писк 2000Гц 70миллисекунд на 6й ноге		
      }
    }
    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;
      if (time_doza < 3599940/*999h59m*/) {time_doza ++;}
      if (doz_v - doza_vr >= save_DOZ) { //а не пора ли сохранить дозу ?)
        eeprom_wrD ();
        doza_vr = doz_v;
      }
    }
  }
}
//-------------------------------------------------------------
void signa () { //индикация каждой частички звуком светом
  shet_s = shet;  
    if (alarm_sound) //если поднят флаг аварийного сигнала
  {
  #ifdef buzzer_active //если задефайнен активный бузер
    PORTD |= (1 << 6); // включаем непрерывный сигнал тревоги
  #else //пассивный
  tone (6, 1300); //генерим писк с частотой 1300Гц (значение можно изменить на своё) на пине 6
  #endif
    if ((millis() - alarm_milis) > first_alarm_duration) // проверяем, не истекло ли время подачи сигнала тревоги_
    {
    #ifdef buzzer_active   //если задефайнен активный бузер
    PORTD &= ~(1 << 6); // выключаем непрерывный сигнал тревоги
    #else //пассивный бузер
    noTone (6); //выключаем писк на 6й ноге
    #endif 
    alarm_sound = 0; // сбрасываем флаг сигнала тревоги
    }   
    PORTB |= (1 << 5); //включаем светодиод
    delay(del_BUZZ);
    PORTB &= ~(1 << 5);//выключаем светодиод
  }
  else //если флаг сигнала тревоги не поднят, генерим одиночные сигналы, озвучивающие пойманные частицы
  {
if ((buzz_ON == 1) && (shet_s > 0))  //включаем бузер
  #ifdef buzzer_active //если задефайнен активный бузер
    {
    PORTB |= (1 << 5); //включаем светодиод
    PORTD |= (1 << 6); //включаем бузер 
    delay(del_BUZZ); //длительность одиночного сигнала
    PORTD &= ~(1 << 6); //выключаем бузер 
    PORTB &= ~(1 << 5); //выключаем светодиод
    }
  #else //пассивный бузер
    {
    PORTB |= (1 << 5); //включаем светодиод
    tone (6,1000,30); //генерим писк 1000Гц 30миллисекунд на 6й ноге
    delay(del_BUZZ);//длительность одиночного сигнала
    PORTB &= ~(1 << 5);//выключаем светодиод
    }
  #endif    
  }
  //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 = 0b11100101;//выбор внутреннего опорного 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 higi = (time_doza & 0xFF000000) >> 24;
  byte high = (time_doza & 0x00FF0000) >> 16;
  byte hi =   (time_doza & 0x0000FF00) >> 8;
  byte low =  (time_doza & 0x000000FF);
  EEPROM.write(20, higi);
  EEPROM.write(21, high);
  EEPROM.write(22, hi);
  EEPROM.write(23, low);
  #ifdef Debug_Serial
  Serial.print("time_doza-");Serial.print(time_doza,HEX);Serial.print("; higi-");Serial.print(higi,HEX);Serial.print("; high-");Serial.print(high,HEX);Serial.print("; hi-");Serial.print(hi,HEX);Serial.print("; low-");Serial.print(low,HEX);Serial.print("; result-");Serial.println(((long)higi << 24) | ((long)high << 16) | ((long)hi << 8) | low,HEX);
  #endif
  hi = int(doz_v) >> 8;
  low = int(doz_v);
  EEPROM.write(24, hi);
  EEPROM.write(25, low);
}
//-------------------------------------------------------------
void eeprom_readD () { //чтание настроек из памяти время накопления дозы
  byte higi  = EEPROM.read(20);
  byte high  = EEPROM.read(21);
  byte hi  = EEPROM.read(22);
  byte low  = EEPROM.read(23);
  time_doza = ((long)higi << 24) | ((long)high << 16) | ((long)hi << 8) | low;
  #ifdef Debug_Serial
  Serial.print("time_doza-");Serial.print(time_doza,HEX);Serial.print("; higi-");Serial.print(higi,HEX);Serial.print("; high-");Serial.print(high,HEX);Serial.print("; hi-");Serial.print(hi,HEX);Serial.print("; low-");Serial.print(low,HEX);Serial.print("; result-");Serial.println(((long)higi << 24) | ((long)high << 16) | ((long)hi << 8) | low,HEX);
  #endif  
  hi  = EEPROM.read(24);
  low  = EEPROM.read(25);
  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++;
    }
  }
}


void check_alarm_signal()  // устанавливаем сигнал непрерывной тревоги, если "tr" переключился в "1"
{
  if (!tr) // если счёт превысил аварийный порог, но флаг "tr" ещё не установлен
    {
    alarm_sound = 1; // поднимаем флаг аварийного сигнала
    alarm_milis = millis(); // запоминаем время начала тревоги
    }  
}


void res_first_alarm() //подпрограмма выключения тревоги (ручного или по истечении таймаута)
  {
    alarm_sound = 0; // сбрасываем флаг звукового сигнала тревоги
   #ifdef buzzer_active //если задефайнен активный бузер
   PORTD &= ~(1 << 6); // выключаем бузер
   #else //пассивный бузер
   noTone(6);   //выключаем генерацию сигнала на 6й ноге
   #endif
  }

 

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

Стс-5 аналог сбм-20, ничего менять не надо.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

А какой параметр отвечает за это?

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

А это уже вопрос к автору проекта, если б я разобрался - уже прикрутил бы поддержку нескольких типов датчиков.

Norsemen
Offline
Зарегистрирован: 08.07.2017

Нашел небольшое несоответствие. В печатке коллектор BC547 соединяется на пин2 через 1 Ком. На схеме его нету. Надо ли ставить этот резистор?

А не наоборот ли на печатке кнопки? На сайте Srukami нарисована кнопка меню влево на 7 пин. На печатке вроде так и есть. Но , когда мы перевернем печатку, то это окажется вправо...?

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

Norsemen пишет:

Нашел небольшое несоответствие. В печатке коллектор BC547 соединяется на пин2 через 1 Ком. На схеме его нету. Надо ли ставить этот резистор?

Считайте этот резистор защитой пина ардуины. Работать будет и без него, ставить или нет - решайте сами.

Norsemen пишет:
А не наоборот ли на печатке кнопки? На сайте Srukami нарисована кнопка меню влево на 7 пин. На печатке вроде так и есть. Но , когда мы перевернем печатку, то это окажется вправо...?
Будьте внимательней при изготовлении печатки, запас стеклотекстолита вряд ли безлимитный)
 
Joiner
Offline
Зарегистрирован: 04.09.2014

А я вот уперся рогом в преобразователь высокого напряжения на отдельной микрухе MC34063, пока не доведу его до ума, дальше двигаться не буду. В настоящее время такой работает, работает четко, напряжение держит стабильно, ардуинку не отвлекает...но довольно много жрет, хотя это и не очень критично. Но хочу добиться комфортного режима.

А вот печатку для устройства вижу немного иначе. Вижу размер устройства чуть длиннее счетчика СБМ20, и чуть шире высоты дисплея Nokia, а в самом устройстве вижу два счетчика.

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

Так эта печатка делалась на скорую руку, только для отладки и проверки функционала. Повторяют её, как правило, начинающие, кто не хочет или не может создать свой вариант. Зато гарантировано рабочая.

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

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

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

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

Dark-Dante пишет:

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

Я разводил в изиЕДА печатку под стс-5 с про мини и олед дисплеем, довольно компактно получилось(110х40х20мм).  Саму схему позже сделаю меньше, что бы можно было заказать плату с компонентами. а счетчик будет на корпусе крепиться

Корпус печатать не стал, ибо проект не закончен и хочется пару вещей  доделать.

Одноплатную развязку не стал делать, бутербродом оказалось проще и компактнее. про мини хорошо ложится с СТС-5 и дисплеем. На фото видно то под ней размещены некоторые элементы, а под дисплеем мегаомные резисторы.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

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

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

В умножителе вижу три конденсатора, но вего один диод.

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

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

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

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

Ползунковый выключатель питания на плату не думали добавить? Вверху и слева два свободных участка, куда он так и просится)

Какие изменения в схеме делали?

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

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

Добавил необходимую обвязку процессора, зашунтировал кнопки конденсаторами, фонарик висит просто на порту без транзистора, это наверное всё.

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

Dark-Dante пишет:

...зашунтировал кнопки конденсаторами...

Я бы ещё железные подтяжки килоом по 10 предусмотрел. Как-то не доверяю внутренним pull-up. А устанавливать или нет - уже дело собирающих.

Девятнадцатый вывод в воздухе - светодиод индикции пойманных частиц решили не ставить? У Бодрого на сайте он не указан, поскольку используется встроенный в Ардуино светодиод на 13м пине. В полной схеме ещё была вибра через ключ на полевике на восьмом ардуиновском пине, но в коде её так и не задействовали.

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

Подтяжку сделал, место есть)

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

Dark-Dante
Offline
Зарегистрирован: 09.01.2018

tekagi, а в меню можно отключить звук буззера? Думаю развести светодиод или нет...