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

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

Мдеее. Попробовал


	  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В

	    PORTD |= (1 << 5); //дергаем пин 5

	     _delay_us(18);

	    PORTD &= ~(1 << 5);//дергаем пин 5

	  }

Ток вырос до 33мА с 0.9мА.  Не равно 18 тактам аж никак...

Вот так:

      PORTD |= (1 << 5); //дергаем пин 5
      int c=6;
      while (c>0){asm("nop"); c--; }
      PORTD &= ~(1 << 5);//дергаем пин 5

Удалось добиться 2.7мА. Похоже, вернусь к nop'ам, по настройке придётся думать.

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

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

tekagi

_delay_us(18); это 18 мкС начни с одной.

нам не обязательное опорное ставить 1,1 можно и с АКБ ставить и потом с помощью benGap его мерить, но это дольше, при сильной дозе будет тормозить.

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

bodriy2014 пишет:

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

//блок питания счетчика гейгера
#include <util/delay.h>

//настройки /////////////начало
#define ADC_HV A2  //пин замера высокого
#define ADC 230  //значение АЦП при котором 400В
byte puls = 2; //длинна импульса для трансформатора
//настройки //////////////конец

int hv_adc;
volatile int shet = 0;

void setup() {
  analogReference(INTERNAL);
  pinMode(5, OUTPUT);
  pinMode(13, OUTPUT);
  nakachka();//первая накачка
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
}

void loop() {
  generator();//накачка по обратной связи с АЦП
}
void Schet() { //прерывание на пин 2
  detachInterrupt(0);
  digitalWrite(13, !digitalRead(13));
  shet++;
  attachInterrupt(0, Schet, FALLING);
}

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    _delay_us(puls);
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

void nakachka() {//первая накачка
  byte n = 0;
  while (n < 20) {
    PORTD |= (1 << 5);//дергаем пин
    n++;
    _delay_us(puls);
    PORTD &= ~(1 << 5);//дергаем пин
    _delay_us(100);
  }
}

 

Работает, отсчёт вижу. Непривычно вместо коротких импульсов видеть зажигание по одной частице, погасание по другой))

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

bodriy2014 пишет:

tekagi

нам не обязательное опорное ставить 1,1 можно и с АКБ ставить и потом с помощью benGap его мерить, но это дольше, при сильной дозе будет тормозить.

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

bodriy2014 пишет:

_delay_us(18); это 18 мкС начни с одной.

Упс, лопухнулся. Спутал такты и микросекунды... _delay_us(1); совпало с моими 18ю nop'ами. Всё верно, при 16МГЦ 16 тактов плюс время на запись в регистр. Получается, что это минимальное допустимое значение и изменять можно только с таким шагом? Многовато.

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

tekagi пишет:

bodriy2014 пишет:

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

//блок питания счетчика гейгера
#include <util/delay.h>

//настройки /////////////начало
#define ADC_HV A2  //пин замера высокого
#define ADC 230  //значение АЦП при котором 400В
byte puls = 2; //длинна импульса для трансформатора
//настройки //////////////конец

int hv_adc;
volatile int shet = 0;

void setup() {
  analogReference(INTERNAL);
  pinMode(5, OUTPUT);
  pinMode(13, OUTPUT);
  nakachka();//первая накачка
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
}

void loop() {
  generator();//накачка по обратной связи с АЦП
}
void Schet() { //прерывание на пин 2
  detachInterrupt(0);
  digitalWrite(13, !digitalRead(13));
  shet++;
  attachInterrupt(0, Schet, FALLING);
}

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    _delay_us(puls);
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

void nakachka() {//первая накачка
  byte n = 0;
  while (n < 20) {
    PORTD |= (1 << 5);//дергаем пин
    n++;
    _delay_us(puls);
    PORTD &= ~(1 << 5);//дергаем пин
    _delay_us(100);
  }
}

 

Работает, отсчёт вижу. Непривычно вместо коротких импульсов видеть зажигание по одной частице, погасание по другой))

Чтоб сделать без реверса а это нужно через милис чтоб бех делея.

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

Да это неважно, главное было увидеть приём и обработку импульса.

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

tekagi

Вернул прежнюю экономию!

У меня в коде просто нопы, вайл для меня долгий проверял.

Нужно будет что-то придумать чтоб более гибко с меню настраивать под любой транс.

Возможно свободный таймер останется тогде сделаем на нем.

Пока код такой, думаю о дисплее.

//блок питания счетчика гейгера
#include <util/delay.h>

//настройки /////////////начало
#define ADC_HV A2  //пин замера высокого
#define ADC 190  //значение АЦП при котором 400В с учетом вашего делителя напряжения
#define led 4  //пин светика
//настройки //////////////конец

int hv_adc;
volatile int shet = 0;

void setup() {
  analogReference(INTERNAL);
  pinMode(5, OUTPUT);
  pinMode(led, OUTPUT);
  nakachka();//первая накачка
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
}

void loop() {
  generator();//накачка по обратной связи с АЦП
}
void Schet() { //прерывание от счетчика на пин 2
  detachInterrupt(0);
  digitalWrite(led, !digitalRead(led));
  shet++;
  attachInterrupt(0, Schet, FALLING);
}

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); //точная задержка импульса транзистора
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

void nakachka() {//первая накачка
  byte n = 0;
  while (n < 20) {
    PORTD |= (1 << 5);//дергаем пин
    n++;
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); //точная задержка импульса транзистора
    PORTD &= ~(1 << 5);//дергаем пин
    _delay_us(100);
  }
}

 

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

tekagi

Дай пож схему как ты импульс снимаешь.

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

bodriy2014 пишет:

Пока код такой, думаю о дисплее.

У меня в наличии только 5110 и 1602. ОЛЕДов пару заказал, но когда они дойдут... Для продвинутого функционала семисегментника мало (его бы хорошо с парой регистров в тини-версию, как карманный неубиваемый).

bodriy2014 пишет:

Возможно свободный таймер останется...

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

bodriy2014 пишет:

tekagi

Дай пож схему как ты импульс снимаешь.

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

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

tekagi пишет:

По дисплеям у меня два варианта.

Если у тебя есть желание я могу начать на Олед писать а ты параллельно на 5110.

Если нет я начну на 5110.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016
    PORTD |= (1 << 5);//дергаем пин
    n++;
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); //точная задержка импульса транзистора
    PORTD &= ~(1 << 5);//дергаем пин
    _delay_us(100);

Перенеси n++ ниже PORTD &= ~(1 << 5);//дергаем пин, инкременту тоже надо время на выполнение, будем путаться.

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

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

 

  digitalWrite(led, !digitalRead(led));

лучше убрать из прерывания, не будем терять время. Проверяем в loop'e, изменился ли shet и меняем состояние леда (или генерим импульс).

В остальном - работает.

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

Спасибо что ткнул носом!)

теперь и в меню есть настройка и мне подходит у меня импульс 400нС

//блок питания счетчика гейгера
#include <util/delay.h>

//настройки /////////////начало
#define ADC_HV A2  //пин замера высокого
#define ADC 190  //значение АЦП при котором 400В с учетом вашего делителя напряжения
#define led 13  //пин светика
#define puls 4  //тонкая настройка длинны импульса высоковольтного транса
//настройки //////////////конец

int hv_adc;
volatile int shet = 0;

void setup() {
  analogReference(INTERNAL);
  pinMode(5, OUTPUT);
  pinMode(led, OUTPUT);
  nakachka();//первая накачка
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
}

void loop() {
  generator();//накачка по обратной связи с АЦП
}
void Schet() { //прерывание от счетчика на пин 2
  detachInterrupt(0);
  digitalWrite(led, !digitalRead(led));
  shet++;
  attachInterrupt(0, Schet, FALLING);
}

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    int c=puls;
    while (c>0){asm("nop"); c--; }
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

void nakachka() {//первая накачка
  byte n = 0;
  while (n < 20) {
    PORTD |= (1 << 5);//дергаем пин
    int c=puls;
    while (c>0){asm("nop"); c--; }
    PORTD &= ~(1 << 5);//дергаем пин
    n++;
    _delay_us(100);
  }
}

 

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

Может shet вообще boolean сделать? В прерывании ставим в единицу, в loop'e проверяем, если единица - сбрасываем в ноль, выполняем нужные действия (изменение переменных, замер напруги, индикацию). Ну и замер напряжения и проверка есть ли вообще импульсы (всё ли в порядке с ВВ частью и датчиком) просто выполняем с периодичностью раз в n секунд.

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

tekagi пишет:

Может shet вообще boolean сделать? В прерывании ставим в единицу, в loop'e проверяем, если единица - сбрасываем в ноль, выполняем нужные действия (изменение переменных, замер напруги, индикацию). Ну и замер напряжения и проверка есть ли вообще импульсы (всё ли в порядке с ВВ частью и датчиком) просто выполняем с периодичностью раз в n секунд.

Оно то можно но если импульсы пачкой прилетят мы их поймаем,

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

пока счетчик мертв после импульса и не может поймать частицу мы должны будем все успеть.

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

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

bodriy2014 пишет:

Оно то можно но если импульсы пачкой прилетят мы их поймаем,

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

пока счетчик мертв после импульса и не может поймать частицу мы должны будем все успеть.

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

Согласен, не подойдёт.

 

Не удалось мне с кодом

    while (c>0){asm("nop"); c--; }

подобрать нужный импульс :( То много, то мало, 2.7мА против прежних 0.94мА. Слишком грубая настройка получается. Если цикл на асме реализовать, не быстрее будет? Или оставить nop'ы и не мучаться?

 

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

tekagi пишет:

.... Если цикл на асме реализовать, не быстрее будет? Или оставить nop'ы и не мучаться?

 

Будет быстрее, У ИДЕ есть оптимизация кода,

возможно вайл не сразу выполняется а после нопов.

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

Мне этот кусок подешел, быстро получается

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    int c=puls;
    while (c>0){asm("nop"); c--; }
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

 

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

Этот-то код мне и не подошёл. Не знаю, за сколько тактов выполняется сравнение и декремент в цикле, но выходит очень много. Ох, чую на это таймер просится :( Буду копать информацию по регулируемой задержке на асме, Си здесь не помощник.

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

tekagi пишет:

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

R4 можно убрать , или ты его на всякий пожарный?

R3 уменьшай до 10-15КОм иначе фронт после импульса сильно пологий иногда наскакивает на соседние под нагрузкой. Я поставил себе 10кОм.

В чем ты схемы рисуешь?

 

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

bodriy2014 пишет:

В чем ты схемы рисуешь?

 


sPlan (rusPlan) 7

bodriy2014 пишет:

R3 уменьшай до 10-15КОм иначе фронт после импульса сильно пологий иногда наскакивает на соседние под нагрузкой. Я поставил себе 10кОм.

 


Ok. Перерисую и перевыложу.

bodriy2014 пишет:

R4 можно убрать , или ты его на всякий пожарный?


Как хочешь, на функционал он влиять не должен. Просто не люблю я напрямую к пинам цепляться: стоит ошибиться с конфигурацией в скетче - прощай, порт (а может и мега).

bodriy2014 пишет:
2 тумблера с СПД

Не держи подобную каку в жилых помещениях. СПД имеет свойство осыпаться и разлетаться по комнате радиоактивной пылью. Ну и обязательно держать их в герметичных пакетах с зип-застёжкой, не вынимая никогда. Я поэтому и не хочу подобные Контрольные Источники (КИ) использовать. Всё пытаюсь найти какое-нибудь изделие из уранового стекла.

По схеме: собираюсь ещё разделить R7 на 5 по 2МОм. Как из-за приведённой ёмкости так и из-за вероятности поверхностного пробоя. (Хотя всё равно планирую сделать ВВ часть отдельной платкой-модулем и залить пластик-лаком или эпоксидкой.)

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

bodriy2014]</p> <p>[quote=tekagi пишет:

уменя возникли вопросы , извеняюсь что вклиниваюсь в процес разработки кодов :(((( параметры гантельки можно ли готовую куить если только мотать (можно в новал витков очень много нужно сделать!!!!) какие мощности резисторов ? диод FR107  заменить на 1N4007 док 1А 1000В или быстродействие слишком мало?

 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

надо ехать в Домбай кусок гранита отковырять, для проверки прибора пойдёт

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

Гранит тоже разный бывает, мне пока особо активных не попадалось. Максимум в два - два с половиной раза над фоном.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

tekagi пишет:
Гранит тоже разный бывает, мне пока особо активных не попадалось. Максимум в два - два с половиной раза над фоном.

уже нормально жеж

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

А как вы относитесь к такой схеме подключения счетчиков и снятия импульсов? И что за деталька отмеченная стрелкой? 

Это фрагмент схемы бытового дозиметра

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

Joiner пишет:

А как вы относитесь к такой схеме подключения счетчиков и снятия импульсов?

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

Joiner пишет:

И что за деталька отмеченная стрелкой?

Очень похоже на пьезотансформатор. Из серии "сам не сделаешь, и фиг достанешь".

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

tekagi пишет:

......................................

Очень похоже на пьезотансформатор. Из серии "сам не сделаешь, и фиг достанешь".

Значит я достал......два :)

P.S. До сегодняшнего дня не знал о существовании такой детальки.

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

Surikat пишет:

уменя возникли вопросы , извеняюсь что вклиниваюсь в процес разработки кодов :(((( параметры гантельки можно ли готовую куить если только мотать (можно в новал витков очень много нужно сделать!!!!) какие мощности резисторов ? диод FR107  заменить на 1N4007 док 1А 1000В или быстродействие слишком мало?

[/quote]

Привет.

---Я делал два транса один мотал гантельку в навал смог намотать 600 витков и схема  эта без умножителя. Вторую взял котовую индуктивность и поверх намотал три свои витка и работает хорошо но с умножителем на три. Можно взять трас от китайской зарядки и убрать все обмотки кроме самой высокоомной и поверх нее намотать три витка.

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

---нужны быстрые диоды.

 

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

tekagi пишет:

Очень похоже на пьезотансформатор. Из серии "сам не сделаешь, и фиг достанешь".

Я таких тоже не встречал.

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

bodriy2014, опередил)

Surikat пишет:

уменя возникли вопросы , извеняюсь что вклиниваюсь в процес разработки кодов :((((

Больше тестеров - меньше багов в финальной версии ))

Surikat пишет:

диод FR107  заменить на 1N4007 док 1А 1000В или быстродействие слишком мало?

1N4007 не подойдёт, нужны именно высоковольтные диоды с высоким быстродействием. FR107 тоже може быть неоптимален (из-за тока обратной утечки), но у нас делитель больше просадит. А так - диод массовый и дешёвый.

Можно попробовать HER108, RGP10M, HER158...

Surikat пишет:

какие мощности резисторов ?

Любые) В финальной версии буду ставить смд, сейчас 0,125. В высоковольтной части больше, чем 0,125 ставить нельзя, увеличивается приведённая к счётчику ёмкость.

Surikat пишет:

параметры гантельки можно ли готовую куить если только мотать (можно в новал витков очень много нужно сделать!!!!)

Я мотал на гантельке от балласта ЛДС, высотой 9 и внешним диаметром 6мм. Правда, перематывал несколько раз - изначально взял толстоватый провод и не помещалось :( Сделал ипровизированный намоточный станок: ручную дрель зажал в тисах, на патрон наклеил кусочек изоленты (считать витки). По большому счёту надо бы мотать порядово, с покрытием лаком каждые 50-100 витков, но сделал "по быстрому, авось сойдёт" внавал. Сначала мотается вторичка, вывода фиксируются на ножки гантельки. Потом термоусадка в размер, поверх первичка более толстым проводом. Перемотал заодно транс от китайской дешёвой одноамперной зарядки на Ш-образном сердечнике (чуть добавив зазора надфилем), но пока не тестировал. В "Дозиметре Сталкера" использовали для намотки Ш-образный дроссель от энергосберегаек 7-9Вт.

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

tekagi

Привет.

Переделал мигание диодом и буззером в отдельную функцию.

Теперь более привычно и по скорости исполнения отлично.

Когда все ноги рапределим нужно будет зманить Ардуиновские дерганья на С++

Поделись на почту в Splan схемой, пожалуйста.

(была почта)

//Питание и индикация счетчика Гейгера
#include <util/delay.h>

//настройки /////////////начало
#define ADC_HV A2  //пин замера высокого
#define ADC 190  //значение АЦП при котором 400В с учетом вашего делителя напряжения
#define puls 4  //тонкая настройка длинны импульса высоковольтного транса
#define led 13  //пин светика
#define buzz 8  //пин бузера
bool led_ON = 1;  //включить индикацию светодтодом (1)
bool buzz_ON = 0;  //включить индикацию бузером (1)
//настройки //////////////конец

int hv_adc, shet_s;
volatile int shet = 0;
unsigned long mil_s = 0;

void setup() {
  analogReference(INTERNAL);
  pinMode(5, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(buzz, OUTPUT);
  nakachka();//первая накачка
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
}

void loop() {
  generator();//накачка по обратной связи с АЦП
  signa ();//подача сигнала о частичке
}
void signa () { //индикация каждой частички звуком или светом
  if (shet_s != shet) {
    shet_s = shet;
    if (led_ON == 1) {
      digitalWrite(led, HIGH);
    }
    if (buzz_ON == 1) {
      digitalWrite(buzz, HIGH);
    }
  }
  if (millis() - mil_s >= 10) {
    mil_s = millis();
    digitalWrite(led, LOW);
    digitalWrite(buzz, LOW);
  }
}

void Schet() { //прерывание от счетчика на пин 2
  detachInterrupt(0);
  shet++;
  attachInterrupt(0, Schet, FALLING);
}

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    int c = puls;
    while (c > 0) {
      asm("nop");
      c--;
    }
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

void nakachka() {//первая накачка
  byte n = 0;
  while (n < 20) {
    PORTD |= (1 << 5);//дергаем пин
    int c = puls;
    while (c > 0) {
      asm("nop");
      c--;
    }
    PORTD &= ~(1 << 5);//дергаем пин
    n++;
    _delay_us(100);
  }
}

 

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

Почту не свети, заспамят) Сейчас кину.

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

tekagi пишет:

Почту не свети, заспамят) Сейчас кину.

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

 

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

Плата за популярность :D

Переделал пока так:

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

Спасибо за разъеснения!!! на мои вопросы!!! :(

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

Текущая моя схема и скетч

//Питание и индикация счетчика Гейгера
#include <util/delay.h>

//настройки /////////////начало
#define ADC_HV A2  //пин замера высокого
#define ADC 190  //значение АЦП при котором 400В с учетом вашего делителя напряжения
#define puls 4  //тонкая настройка длинны импульса высоковольтного транса
#define led 13  //пин светика
#define buzz 8  //пин бузера
bool led_ON = 1;  //включить индикацию светодтодом (1)
bool buzz_ON = 0;  //включить индикацию бузером (1)
//настройки //////////////конец

int hv_adc, shet_s;
volatile int shet = 0;
unsigned long mil_s = 0;

void setup() {
  analogReference(INTERNAL);
  pinMode(5, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(buzz, OUTPUT);
  nakachka();//первая накачка
  attachInterrupt(0, Schet, FALLING);//прерываниям пин 2
}

void loop() {
  generator();//накачка по обратной связи с АЦП
  signa ();//подача сигнала о частичке
}
void signa () { //индикация каждой частички звуком или светом
  if (shet_s != shet) {
    shet_s = shet;
    if (led_ON == 1) {
      digitalWrite(led, HIGH);
    }
    if (buzz_ON == 1) {
      digitalWrite(buzz, HIGH);
    }
  }
  if (millis() - mil_s >= 10) {
    mil_s = millis();
    digitalWrite(led, LOW);
    digitalWrite(buzz, LOW);
  }
}

void Schet() { //прерывание от счетчика на пин 2
  detachInterrupt(0);
  shet++;
  attachInterrupt(0, Schet, FALLING);
}

void generator() {//накачка по обратной связи с АЦП
  hv_adc = analogRead(A2);
  if (hv_adc < ADC) { //Значение АЦП при котором на выходе 400В
    PORTD |= (1 << 5); //дергаем пин 5
    int c = puls;
    while (c > 0) {
      asm("nop");
      c--;
    }
    PORTD &= ~(1 << 5);//дергаем пин 5
  }
}

void nakachka() {//первая накачка
  byte n = 0;
  while (n < 20) {
    PORTD |= (1 << 5);//дергаем пин
    int c = puls;
    while (c > 0) {
      asm("nop");
      c--;
    }
    PORTD &= ~(1 << 5);//дергаем пин
    n++;
    _delay_us(100);
  }
}

 

gena
Offline
Зарегистрирован: 04.11.2012

   Если возникнет желание упростить схему по посту #159,  то можно 

  - поменять местами R7 и СБМ-20 (иключительно для читабельности схемы), 

  - параллельно конденсатору С1 поставить стабилитрон на 2,7 В (при питании от литий-ионного аккумулятора)

     и резистор на 470 кОм, 

  - не устанавливать детали R1, R2, T1, R3, R4.

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

gena пишет:

   Если возникнет желание упростить схему по посту #159,  то можно 

  - поменять местами R7 и СБМ-20 (иключительно для читабельности схемы), 

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

gena пишет:

  - параллельно конденсатору С1 поставить стабилитрон на 2,7 В (при питании от литий-ионного аккумулятора)

     и резистор на 470 кОм, 

  - не устанавливать детали R1, R2, T1, R3, R4.

Вообще-то это формирователь импульса для чёткого срабатывания прерывания, а не просто элемент защиты.

gena
Offline
Зарегистрирован: 04.11.2012

  А без формирователя,  прерывание по уровню не сработает?

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

RISING, может, и сработает. Но стабилитрон сам по себе является источником шума.

gena
Offline
Зарегистрирован: 04.11.2012

  С каких пор стабилитрон стал так сильго шуметь (вольты)?

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

gena пишет:

....

  - параллельно конденсатору С1 поставить стабилитрон на 2,7 В (при питании от литий-ионного аккумулятора)

     и резистор на 470 кОм, 

  - не устанавливать детали R1, R2, T1, R3, R4.

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

А по минусу датчика только куча шумов и всплеск тока в момент импульса, вот этот всплеск мы и формируем для компаратора. Вот пост где я проверял #127 .

Logik
Онлайн
Зарегистрирован: 05.08.2014

bodriy2014 пишет:

Дело не в шуме, это по плюсу СБМ-20 есть четкий импульс 200В ...

А по минусу датчика только куча шумов и всплеск тока в момент импульса

)))

Кирхгоф в гробу перевернулся, законы сохранения  улетели в тартарары... продолжайте.

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

А Вы для начала изучите принципы снятия сигнала с анода и катода счётчика Гейгера-Мюллера. Тогда и Кирхгофа всуе поминать не будете...

Logik
Онлайн
Зарегистрирован: 05.08.2014

А Вы соответственно начните с ТОЭ, законов им. вышеупомянутого, тогда под откровенную лажу о различии токов на одном и втором выводе подгавкивать перестанете.

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

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

Человек, пытающийся мерить высоковольтную слаботочку мультиметром учит ТОЭ... Есть предложения по проекту - говорите, нет - не разводите флуд.

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

tekagi

Есть предложения что должно быть на дисплее размером 84*48

как ты это видишь?

например

-текущая доза

-накопленная доза

-время работы

и т.д.

И какие значения должны как выглядеть (размер цифр)

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

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

Вот пример максимализма Рад-Боя:

Какую библиотеку собираешься использовать? Я парочку потыкал, монструозные они. Вывод трёх значений на экран (даже не в лупе, а по времени несколько раз в секунду) сбивал накачку с 200 имп/с до 350. Так и не понял, почему.

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

tekagi пишет:

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

Вот пример максимализма Рад-Боя:

Какую библиотеку собираешься использовать? Я парочку потыкал, монструозные они. Вывод трёх значений на экран (даже не в лупе, а по времени несколько раз в секунду) сбивал накачку с 200 имп/с до 350. Так и не понял, почему.

Ага видел, аж мельтишит.

Думаю больше двух или трех кнопок не стоит и одну из них на прерывание.

библиотеку эту, там ркский можно вкрутить без проблем

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>