Вверх ↑
Этот топик читают: Гость
Ответов: 109
Рейтинг: 1
#1: 2025-07-17 15:26:54 ЛС | профиль | цитата
Подскажите с чего начать написание схемы. Нужно с микрофонного входа звуковой карты разложить импульсы по амплитуде и вывести в спектр. Импульсы снимаются с пропорционального счётчика СИ11Р-2. Какие компоненты применить чтобы хотя бы увидеть этот сигнал?

Так на УНЧ компьютера импульсы слышно.

Редактировалось 5 раз(а), последний 2025-07-17 15:37:40
карма: 1

0
Ответов: 4664
Рейтинг: 767
#2: 2025-07-17 16:02:03 ЛС | профиль | цитата
Поищи на панели примеров HiAsm запись с микрофона. Если что-то подходящее найдется, тогда можно думать над дальнейшей обработкой.
карма: 26

0
Ответов: 8961
Рейтинг: 824
#3: 2025-07-17 18:54:31 ЛС | профиль | цитата
Andrej77rv, один из штатных примеров:
Пример


Add(BASS_Version,10183901,189,238)
{
link(onCheckOk,12302345:doInit,[])
link(onCheckFailed,109118:doMessage,[(233,251)(233,293)])
}
Add(Message,11232751,189,287)
{
Message="Error BASS initialization"
Caption="Error"
Icon=1
}
Add(Message,109118,245,287)
{
Message="Incorrect version of BASS library "
Caption="Error"
Icon=1
}
Add(MainForm,16358250,56,224)
{
Width=404
Height=100
Caption="BASS record demo"
Point(Handle)
link(onCreate,4252681:doInit,[])
}
Add(BASS_Init,4252681,133,238)
{
link(onInit,10183901:doCheck,[])
link(onError,11232751:doMessage,[(177,251)(177,293)])
link(Handle,16358250:Handle,[(153,226)(107,226)(107,268)(62,268)])
}
Add(Edit,12373576,287,77)
{
Left=15
Top=15
Width=350
Text=""
}
Add(Button,13089460,189,77)
{
Left=365
Top=15
Width=20
Caption="..."
link(onClick,12854261:doExecute,[])
}
Add(Button,13708268,189,126)
{
Left=15
Top=45
Caption="Record"
link(onClick,5066922:doStart,[])
}
Add(Button,14140950,189,175)
{
Left=80
Top=45
Caption="Stop"
link(onClick,5066922:doStop,[(254,181)(254,139)])
}
Add(BASS_RecordCenter,12302345,245,238)
{
link(onError,11713735:doMessage,[(289,251)(289,293)])
}
Add(BASS_RecordStart,5066922,287,126)
{
Freq=44100
link(FileName,12373576:Text,[])
}
Add(Message,11713735,301,287)
{
Message="InitRecord failed!"
Caption="Error"
Icon=1
}
Add(SDialog,12854261,238,77)
{
link(onExecute,12373576:doText,[])
}

Запустите его, запишите минуту -- другую вашего сигнала и выложите. (Не исключено, что ваш прибор выдаёт в сеть , к которой должен подключаться, данные на бОльших частотах, чем может взять звуковая карта.)
карма: 19

0
Ответов: 109
Рейтинг: 1
#4: 2025-07-17 19:07:18 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv, один из штатных примеров:
Пример
Запустите его, запишите минуту -- другую вашего сигнала и выложите. (Не исключено, что ваш прибор выдаёт в сеть , к которой должен подключаться, данные на бОльших частотах, чем может взять звуковая карта.)

Там просто импульсы. До 30 импульсов в секунду. Спасибо попробую.

--- Добавлено в 2025-07-17 19:21:55

Это приложение, что вы дали код, не сохраняет файлы. Запускал скомпилированный exe от имени администратора.

Редактировалось 1 раз(а), последний 2025-07-17 19:21:55
карма: 1

0
Ответов: 523
Рейтинг: 167
#5: 2025-07-17 19:24:25 ЛС | профиль | цитата
Andrej77rv,более наглядный из штатных, чуть изменён
пример


Add(Button,13708268,56,259)
{
Left=10
Top=10
Caption="Record"
link(onClick,5066922:doStart,[])
}
Add(Button,14140950,56,308)
{
Left=75
Top=10
Caption="Stop"
link(onClick,5066922:doStop,[(110,314)(110,272)])
}
Add(BASS_RecordStart,5066922,133,259)
{
Freq=44100
Mode=1
Name="mainrec"
}
Add(BASS_Version,10183901,189,105)
{
link(onCheckOk,12302345:doInit,[])
link(onCheckFailed,109118:doMessage,[(233,118)(233,160)])
}
Add(Message,11232751,189,154)
{
Message="Error BASS initialization"
Caption="Error"
Icon=1
}
Add(Message,109118,245,154)
{
Message="Incorrect version of BASS library "
Caption="Error"
Icon=1
}
Add(MainForm,16358250,56,91)
{
Width=565
Height=508
Caption="BASS record inputs demo"
Point(Handle)
link(onCreate,4252681:doInit,[])
}
Add(BASS_Init,4252681,133,105)
{
link(onInit,10183901:doCheck,[])
link(onError,11232751:doMessage,[(177,118)(177,160)])
link(Handle,16358250:Handle,[(153,93)(107,93)(107,135)(62,135)])
}
Add(BASS_RecordCenter,12302345,245,105)
{
link(onInit,15862958:doEnumInputs,[])
link(onError,11713735:doMessage,[(289,118)(289,160)])
}
Add(Message,11713735,301,154)
{
Message="InitRecord failed!"
Caption="Error"
Icon=1
}
Add(PaintBox,8758719,434,266)
{
Left=15
Top=45
Width=525
Height=200
link(onBeforeDraw,5631139:doDraw,[])
}
Add(BASS_ChannelVisibleSpectrum,5631139,490,266)
{
SoundStream="mainrec"
Height=200
Mode=1
link(WindowsHandle,8758719:Bitmap,[(496,254)(468,254)(468,310)(440,310)])
}
Add(Timer,5820169,350,266)
{
Interval=10
link(onTimer,879450:doEvent1,[])
}
Add(BASS_RecordInput,15862958,301,105)
{
link(onEnumInputs,14934018:doEvent1,[])
}
Add(ChildPanelEx,11572707,448,105)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,15548015,21,21)
{
WorkCount=#5:##add|
Width=608
Height=228
Point(##add)
link(##add,4584490:doGet,[(105,27)(105,181)])
}
Add(Panel,8363783,567,98)
{
Left=140
Top=5
Width=401
Height=26
}
Add(CheckBox,11557791,378,112)
{
Left=290
Top=5
Width=105
Height=15
Caption="on"
Point(doCaption)
Point(onClick)
link(onClick,10832955:doWork2,[])
}
Add(ScrollBar,903568,378,56)
{
Left=5
Top=5
Width=270
link(onPosition,14509023:doOperation,[])
}
Add(MT_Get,4584490,189,175)
{
link(onData,14133430:doGet,[(229,181)(229,153)])
link(onGet,11557791:doCaption,[(358,188)(358,125)])
}
Add(MT_Get,14133430,238,147)
{
link(onData,16133573:doGet,[(278,153)(278,111)])
link(onGet,16264771:doOperation,[])
}
Add(MT_Get,16133573,287,105)
{
link(onData,4613851:doValue,[])
link(onGet,11557791:doCheck,[])
}
Add(Math,16264771,287,154)
{
OpType=2
Op2=100
ResultType=0
link(onResult,903568:doPosition,[(348,160)(348,62)])
}
Add(BASS_InputControl,9998094,441,189)
{
link(Index,4613851:Value,[])
link(Volume,14509023:Result,[])
link(State,11557791:Checked,[(461,167)(384,167)])
}
Add(Math,14509023,448,56)
{
OpType=3
Op2=100
Default=-1
link(onResult,10832955:doWork1,[(492,62)(492,91)(424,91)])
}
Add(Memory,4613851,441,105)
{
}
Add(HubEx,10832955,420,119)
{
Angle=1
link(onEvent,9998094:doSetInput,[(424,195)])
}
END_SDK
Add(Counter,188776,399,56)
{
}
Add(MT_Add,4962988,399,105)
{
link(onAdd,11572707:##add,[])
link(Data,188776:Count,[])
}
Add(Hub,14934018,350,105)
{
link(onEvent1,4962988:doAdd,[])
link(onEvent2,188776:doNext,[(390,118)(390,62)])
}
Add(BASS_ChannelVisibleOcilloScope,13141873,490,343)
{
SoundStream="mainrec"
ScaleY=200
link(WindowsHandle,3251195:Bitmap,[(496,331)(477,331)(477,389)(440,389)])
}
Add(PaintBox,3251195,434,343)
{
Left=10
Top=255
Width=530
Height=200
link(onBeforeDraw,13141873:doDraw,[])
}
Add(Hub,879450,392,266)
{
link(onEvent1,8758719:doRefresh,[])
link(onEvent2,3251195:doRefresh,[(420,279)(420,349)])
}

карма: 4

0
Ответов: 109
Рейтинг: 1
#6: 2025-07-17 19:37:53 ЛС | профиль | цитата
Хорошо спасибо. Не могу пока записать на ничего. Файл пустым получается.
карма: 1

0
Ответов: 109
Рейтинг: 1
#7: 2025-07-17 22:51:50 ЛС | профиль | цитата

В общем получилось вывести сигнал на график. Всё хорошо видно. В компонентах Bass есть ограничительный детектор. Можно ли ему задать переменное ограничение, чтобы как бы сканировать все пороги ограничения и потом выдавать в компонет "гистограмма"? Соответственно в гистограмме тоже синхронно менять канал вывода.
карма: 1

0
Ответов: 8961
Рейтинг: 824
#8: 2025-07-18 00:31:29 ЛС | профиль | цитата
Andrej77rv, так что за циферки по "Х" -- часы, миллисекунды? А волны около "0" помехи от сети 50 Гц?
Вы не совсем ясно ставите задачу
Ещё один "рекордер"


Add(MainForm,1000754,105,84)
{
Left=50
Top=55
Width=418
Height=231
Caption="Запись (моно, 44100)"
Point(Handle)
Point(onClose)
link(onCreate,15569021:doStart,[(144,104)(144,125)(95,125)(95,160)])
}
Add(ChildPanelEx,15569021,105,154)
{
@Hint=#39:Запуск BASS 2.4 и выбор источника звука|
link(Handle,1000754:Handle,[])
}
BEGIN_SDK
Add(EditMultiEx,6822816,21,21)
{
WorkCount=#21:doStart=Начать работу|7:doBegin|6:doStop|
EventCount=#21:onStart=Начать работу|22:onSound=Звуковой поток|
DataCount=#46:Handle=Идентификатор основного окна приложения|
Width=664
VOffset=35
HOffset=160
link(doStart,9977661:doEvent1,[])
link(doBegin,11184167:doWork2,[])
link(doStop,11184167:doWork3,[(32,76)])
}
Add(Panel,3900892,266,56)
{
Left=105
Top=80
Width=402
Height=192
Align=5
Color=12639424
Visible=1
Alignment=2
Point(doVisible)
}
Add(BASS_Version,10183901,217,98)
{
link(onCheckOk,1680110:doEvent1,[])
link(onCheckFailed,109118:doMessage,[(257,111)(257,153)])
}
Add(Message,11232751,217,147)
{
Message="Error BASS initialization"
Caption="Error"
Icon=1
}
Add(Message,109118,266,147)
{
Message="Incorrect version of BASS library "
Caption="Error"
Icon=1
}
Add(BASS_Init,4252681,168,98)
{
Device=1
link(onInit,10183901:doCheck,[])
link(onError,11232751:doMessage,[(208,111)(208,153)])
link(Handle,6822816:Handle,[])
}
Add(BASS_RecordCenter,12302345,406,112)
{
link(onInit,15862958:doEnumInputs,[])
link(onError,11713735:doMessage,[(443,125)(443,167)])
}
Add(Message,11713735,455,161)
{
Message="InitRecord failed!"
Caption="Error"
Icon=1
}
Add(BASS_RecordInput,15862958,455,112)
{
link(onEnumInputs,16487182:doEvent1,[])
}
Add(BASS_InputControl,9998094,581,112)
{
Volume=1
State=1
link(onSetInput,9127027:doEvent1,[])
link(Volume,6019053:Value,[(594,103)(559,103)])
link(State,4613851:Value,[])
}
Add(Memory,4613851,595,49)
{
Default=Integer(1)
}
Add(ComboBox,4718633,357,105)
{
Left=105
Top=10
Width=100
Height=21
Enabled=1
Text="Звуковая карта"
Point(Index)
Point(doEnabled)
link(onClick,12302345:doInit,[])
}
Add(Hub,9127027,623,112)
{
link(onEvent1,14252892:doWork1,[(648,118)(648,41)(207,41)(207,69)])
link(onEvent2,6822816:onStart,[(655,125)(655,62)])
}
Add(ChanelToIndex,14252892,217,63)
{
link(onIndex,3900892:doVisible,[])
}
Add(ComboBox,8950199,532,119)
{
Left=215
Top=10
Width=105
Height=21
Enabled=1
Text="Вход"
Point(doEnabled)
Point(Index)
link(onClick,9998094:doSetInput,[(571,132)(571,118)])
}
Add(BASS_RecordDevices,2139448,294,105)
{
link(onEnum,4718633:doAdd,[])
}
Add(Hub,16487182,497,112)
{
link(onEvent1,8950199:doEnabled,[(522,118)(522,153)])
link(onEvent2,8950199:doAdd,[])
}
Add(Label,12607849,357,56)
{
Left=20
Top=65
Color=12639424
Caption="Выбрать источник звука (Линейный вход)"
}
Add(Memory,6019053,553,49)
{
Default=Real(1)
}
Add(Hub,1680110,266,98)
{
link(onEvent1,4718633:doEnabled,[(333,104)(333,139)])
link(onEvent2,2139448:doEnum,[])
}
Add(Memory,8142253,112,98)
{
Default=Integer(44100)
}
Add(Hub,9977661,91,56)
{
link(onEvent1,14252892:doWork2,[(200,62)(200,76)])
link(onEvent2,4252681:doInit,[(151,69)(151,104)])
}
Add(HubEx,11184167,28,63)
{
Angle=3
}
END_SDK
Add(Button,5552472,175,84)
{
Left=15
Top=10
Caption="Пуск"
Point(doCaption)
link(onClick,4073044:doWork1,[(214,90)(214,125)(165,125)(165,153)])
}
Add(BASS_RecordStart,13828998,287,140)
{
FileName="MyPC.wav"
Freq=44100
Name="MyPC"
link(FileName,6938981:Text,[])
}
Add(MultiElement,4073044,175,147)
{
link(onEvent1,5552472:doCaption,[(214,153)(214,139)(158,139)(158,90)])
link(onEvent2,1054435:doEvent1,[(221,160)(221,146)])
link(onEvent3,8960731:doEvent1,[(221,167)(221,181)])
}
BEGIN_SDK
Add(EditMulti,7773986,21,21)
{
EventCount=3
WorkCount=1
Width=349
Height=137
link(doWork1,14045361:doNext,[(53,27)(53,90)])
}
Add(Hub,11447664,301,105)
{
link(onEvent1,7773986:onEvent3,[(340,111)(340,41)])
link(onEvent2,15894962:doClear,[(326,118)(326,132)(60,132)(60,62)])
}
Add(Counter,14045361,196,84)
{
Max=1
link(onNext,14569341:doEvent,[])
}
Add(IndexToChanel,14569341,245,84)
{
Point(Data)
link(onEvent1,11589230:doEvent1,[(291,90)(291,83)])
link(onEvent2,11447664:doEvent1,[(291,97)(291,111)])
link(Data,14045361:Count,[(251,75)(237,75)(237,124)(202,124)])
}
Add(Memory,15426058,119,49)
{
Default=String(Пуск)
link(onData,7773986:onEvent1,[(158,55)(158,27)])
}
Add(Memory,15894962,70,49)
{
Default=String(Стоп)
link(onData,15426058:doValue,[])
}
Add(Hub,11589230,301,77)
{
link(onEvent1,15426058:doClear,[(326,83)(326,69)(109,69)(109,62)])
link(onEvent2,7773986:onEvent2,[(333,90)(333,34)])
}
END_SDK
Add(Hub,1054435,231,140)
{
OutCount=3
link(onEvent1,7522516:doOff,[(263,146)(263,202)])
link(onEvent2,13828998:doStop,[])
link(onEvent3,5820169:doStop,[(277,160)(277,251)])
}
Add(Hub,8960731,231,175)
{
OutCount=3
link(onEvent1,13828998:doStart,[(272,181)(272,146)])
link(onEvent2,7522516:doOn,[(256,188)(256,209)])
link(onEvent3,5820169:doTimer,[(270,195)(270,244)])
}
Add(LED,7522516,287,189)
{
Left=90
Top=5
}
Add(Edit,6938981,287,84)
{
Left=135
Top=5
Width=230
Text="MyPC.wav"
}
Add(PaintBox,8758719,329,238)
{
Left=63
Top=45
Width=320
Height=120
link(onBeforeDraw,5631139:doDraw,[])
}
Add(BASS_ChannelVisibleSpectrum,5631139,371,238)
{
SoundStream="MyPC"
Width=4
Mode=1
link(WindowsHandle,8758719:Bitmap,[(377,226)(365,226)(365,277)(335,277)])
}
Add(Timer,5820169,287,238)
{
Interval=50
Enable=1
link(onTimer,8758719:doRefresh,[])
}

карма: 19

0
Ответов: 109
Рейтинг: 1
#9: 2025-07-18 06:46:32 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv, так что за циферки по "Х" -- часы, миллисекунды? А волны около "0" помехи от сети 50 Гц?
Вы не совсем ясно ставите задачу
Ещё один "рекордер"


Из паспорта к счётчику: длительность импульса не менее 0.8 мкс, фронт нарастания не более 0.3 мкс. Шум возле 0 это помехи от высоковольтного импульсного источника питания 1700 В. Количество импульсов за секунду до 100 шт. Импульсы идут в хаотичном порядке по амплитуде и по времени.

--- Добавлено в 2025-07-18 07:17:34

В файл записал. Послушал хорошо слышно.

--- Добавлено в 2025-07-18 07:44:36

Длительность импульса маленькая получается Не будет работать наверно.

Редактировалось 2 раз(а), последний 2025-07-18 07:44:36
карма: 1

0
Ответов: 8961
Рейтинг: 824
#10: 2025-07-18 09:57:33 ЛС | профиль | цитата
Andrej77rv, а где файл-то, сожмите и выложите.
Наверное эти импульсы проходят по своему протоколу связи и информацию содержат
карма: 19

0
Ответов: 109
Рейтинг: 1
#11: 2025-07-18 10:18:42 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv, а где файл-то, сожмите и выложите.
Наверное эти импульсы проходят по своему протоколу связи и информацию содержат

https://disk.yandex.ru/d/EL_p4jaCkW98qQ

Только я не пойму если импульсы такие короткие почему их слышно в УНЧ и видно на графике?

Редактировалось 3 раз(а), последний 2025-07-18 10:28:11
карма: 1

0
Ответов: 8961
Рейтинг: 824
#12: 2025-07-18 18:32:25 ЛС | профиль | цитата
Andrej77rv, из вашей записи посмотрел на графике ~1.5 сек (дискретизация 44100, растояние между соседними отсчётами 22.7 микросек). Кстати вы записывали в "стерео", один канал пустой.
https://disk.yandex.ru/i/cbwgDzisZorUDQ
Полагаю что эти "импульсы" состоят из более коротких "1" и "0" и что для их расшифровки звуковая карта не подходит. Надо найти описание этого счётчика и протокол обмена данными. Может там СОМ-порт нужен
карма: 19

0
Ответов: 109
Рейтинг: 1
#13: 2025-07-18 18:39:09 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv, из вашей записи посмотрел на графике ~1.5 сек (дискретизация 44100, растояние между соседними отсчётами 22.7 микросек). Кстати вы записывали в "стерео", один канал пустой.
https://disk.yandex.ru/i/cbwgDzisZorUDQ
Полагаю что эти "импульсы" состоят из более коротких "1" и "0" и что для их расшифровки звуковая карта не подходит. Надо найти описание этого счётчика и протокол обмена данными. Может там СОМ-порт нужен

Там нет нолей и единиц. Это аналоговый старый газоразрядный счётчик. Типа счётчика Гейгера. Только в счётчике Гейгера импульсы по амплитуде все одинаковые, а здесь нет. И по амплитуде импульса определяется элемент таблицы Менделеева.

--- Добавлено в 2025-07-18 19:36:35

Что импульсы "сливаются" в принципе не так страшно. Просто засчитываться будет тот, что имеет большую амплитуду.
Фото счетчика

Схема включения


Редактировалось 1 раз(а), последний 2025-07-18 19:36:35
карма: 1

0
Ответов: 8961
Рейтинг: 824
#14: 2025-07-18 21:22:56 ЛС | профиль | цитата
Andrej77rv писал(а):
Типа счётчика Гейгера. Только в счётчике Гейгера импульсы по амплитуде все одинаковые, а здесь нет. И по амплитуде импульса определяется элемент таблицы Менделеева.
С этого надо было начинать, тогда всё ясно Счётчик Гейгера накапливающий, с разряжаемым конденсатором питания три года в нагрудном кармане носил, утром получал у дозиметриста, а вечером сдавал на запись
Напряжение питания и номинал резистора?
Низкое входное сопротивление карты не позволит правильно зафиксировать амплитуду импульса, надо бы поставить ламповый катодный повторитель, а уже с него подать на вход карты.
Уже потом , после записи, без ограничения амплитуды, а сортировать-то просто.

Редактировалось 3 раз(а), последний 2025-07-18 21:26:57
карма: 19

0
Ответов: 109
Рейтинг: 1
#15: 2025-07-18 21:33:37 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv писал(а):
Типа счётчика Гейгера. Только в счётчике Гейгера импульсы по амплитуде все одинаковые, а здесь нет. И по амплитуде импульса определяется элемент таблицы Менделеева.
С этого надо было начинать, тогда всё ясно Счётчик Гейгера накапливающий, с разряжаемым конденсатором питания три года в нагрудном кармане носил, утром получал у дозиметриста, а вечером сдавал на запись
Напряжение питания и номинал резистора?
Низкое входное сопротивление карты не позволит правильно зафиксировать амплитуду импульса, надо бы поставить ламповый катодный повторитель, а уже с него подать на вход карты.
Уже потом , после записи, без ограничения амплитуды, а сортировать-то просто.

Редактировалось 2 раз(а), последний 2025-07-18 21:26:00

Напряжение питания 1700 Вольт. Резистор 1 мОм. У меня немного в другом включении с полевым транзистором кп303 на входе. Транзистор как истоковый повторитель. На выходе там 1кОм к звуковой карте.В общем всё работает. А эта схема просто для наглядности.

--- Добавлено в 2025-07-18 21:37:16

Да вот этим импульсы сейчас нужно рассортировать и вывести на накапливающую гистограмму. Пока не знаю как.

Редактировалось 1 раз(а), последний 2025-07-18 21:37:16
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)