Вверх ↑
Этот топик читают: Гость
Ответов: 109
Рейтинг: 1
#1: 2025-07-22 12:26:45 ЛС | профиль | цитата
Если кто поможет возможно оплата за небольшую сумму.В общем есть у меня СССР спектрометр исп-30. Я установил туда ПЗС линейку TCD1304FW. Всё работает через Ардуино Nucleo но есть один недостаток. Программа написанная в Python для Windows омеет очень скудные возможности. Нельзя добавить элементы, линии и т.д. Работает через USB ( com 3) Я хочу заменить это приложение на своё приложение из HiAsm. Нужны все команды с USB. Это всё есть в исходнике. Откомпилированный файл "Bin" Заливается в Ардуино. Вот что мне ответил программист из США что писал код для Ардуино.

Привет, Андрей! Исходный код был написан не в среде Arduino IDE, поэтому нет
файлов .ino. Не думаю, что уровень абстракции Arduino, или как его там,
даёт достаточно точного управления периферийными устройствами микроконтроллера для такого
критического по времени приложения.

Я написал прошивки для Nucleo и Blue Pill с помощью Стандартной
библиотеки периферийных устройств (SPL) в Блокноте. Она скомпилирована кросс-компилятором GNU eabi с помощью make/makefiles. Рекомендую использовать предварительно скомпилированный
бинарный файл.

Для прошивки Black Pill я использовал ST Cube IDE.

Исходный код можно найти в разделе загрузок.

С наилучшими пожеланиями
Эсбен

Архив с исходником для Ардуино https://disk.yandex.ru/d/y_lsdR3FmGt8ug

Сайт автора кода для Ардуино. Там есть всё, в том числе и описание работы ПЗС матрицы
https://tcd1304.wordpress.com

Фото ПЗС матрицы TCD1304FW


--- Добавлено в 2025-07-22 12:41:00

Через звуковую карту не хотелось бы подключать ПЗС. Хотя предлагали. ПЗС нужно синхронизировать, а где брать этот сигнал не понятно. С наушников?

Редактировалось 1 раз(а), последний 2025-07-22 12:41:00
карма: 1

0
Ответов: 109
Рейтинг: 1
#2: 2025-07-22 15:49:05 ЛС | профиль | цитата
У LPT порта есть шины приема данных на компьютер. Может будет проще сделать подключение ПЗС линейки через LPT? Переходники USB-LPT есть в продаже.

Редактировалось 3 раз(а), последний 2025-07-22 16:19:52
карма: 1

0
Ответов: 8961
Рейтинг: 824
#3: 2025-07-22 16:23:48 ЛС | профиль | цитата
Andrej77rv, опять двадцать пять!
Ну не знаем мы как управляется эта линейка фотодиодов, да и управлять ей из HiAsm можно лишь через СОМ или LPT порт, первый требует промежуточного процессора, а второй точного знания этой линейки, да и нет сейчас в компьютерах этого порта, а переходники заточены под принтеры.
"Если бы я был директором", поставил задачу так:
"Мой прибор выдаёт через СОМ по команде "яя" 3000 с гаком значений в формате "яяя" начало посылки, 3124 значений в формате "яяяя" и сигнал "ккк" оконокончание посылки. (номер каждого значения означает длину волны в диапазоне от 0.1 до 0.4 мкМ).
По этим значениям надо; составлять таблицу, усреднять, строить графмк, выдавать содержание в % через формулы "______ ____" и т. д.
Ну не клещами же у вас это вытягивать

Редактировалось 1 раз(а), последний 2025-07-22 16:27:52
карма: 19

0
Ответов: 109
Рейтинг: 1
#4: 2025-07-22 16:38:55 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv, опять двадцать пять!
Ну не знаем мы как управляется эта линейка фотодиодов, да и управлять ей из HiAsm можно лишь через СОМ или LPT порт, первый требует промежуточного процессора, а второй точного знания этой линейки, да и нет сейчас в компьютерах этого порта, а переходники заточены под принтеры.
"Если бы я был директором", поставил задачу так:
"Мой прибор выдаёт через СОМ по команде "яя" 3000 с гаком значений в формате "яяя" начало посылки, 3124 значений в формате "яяяя" и сигнал "ккк" оконокончание посылки. (номер каждого значения означает длину волны в диапазоне от 0.1 до 0.4 мкМ).
По этим значениям надо; составлять таблицу, усреднять, строить графмк, выдавать содержание в % через формулы "______ ____" и т. д.
Ну не клещами же у вас это вытягивать

Редактировалось 1 раз(а), последний 2025-07-22 16:27:52

Понятно. Разберусь с линейкой,описание ПЗС есть, попробую по LPT сделать. Или ещё может кто захочет за оплату.
карма: 1

0
Ответов: 109
Рейтинг: 1
#5: 2025-07-22 22:23:58 ЛС | профиль | цитата
Перехваченные данные с порта выглядят вот так. Длинная строчка это прием самого сигнала с ПЗС. Может как то можно это всё в HiAsm реализовать?



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

0
Ответов: 8961
Рейтинг: 824
#6: 2025-07-22 23:18:38 ЛС | профиль | цитата
Andrej77rv писал(а):
описание ПЗС есть

Чтобы разобраться, месяц -- другой нужен Но придётся
Andrej77rv писал(а):
Перехваченные данные с порта
СОМ порт работает на опре делённых скоростях с синхронизацией по входящим импульсам, поэтому и случайные наборы 0 и 1 кроме ошибок ничего не дают. (А ведь могли бы изготовители и упростить эксплуатацию, управляющий процессор наверняка есть.)

Редактировалось 1 раз(а), последний 2025-07-22 23:30:49
карма: 19

0
Ответов: 109
Рейтинг: 1
#7: 2025-07-22 23:24:57 ЛС | профиль | цитата
Леонид писал(а):
Чтобы разобраться, месяц -- друго

Может и не месяц. Я думаю там всё просто каждому пикселю соотвествует запись <...> в строке. Эта строка очень длинная.

--- Добавлено в 2025-07-22 23:44:32

То, что красным это системные команды. Они должны быть и в элементе HiAsm "com-порт". А вот то, что черным и жёлтым выделено это команды которые отправляются и принимаются в сам порт.

Редактировалось 4 раз(а), последний 2025-07-22 23:53:40
карма: 1

0
Ответов: 933
Рейтинг: 197
#8: 2025-07-23 05:45:58 ЛС | профиль | цитата
Andrej77rv писал(а):
Может и не месяц. Я думаю там всё просто каждому пикселю соотвествует запись <...> в строке. Эта строка очень длинная.

Там же всё написано
Отправлять
# The firmware expects 12 bytes from the computer and will not do anything until 12 bytes have been received.
# The format is:
# byte[1-2]: The characters E and R. Defines where the firmware should start reading in its circular input-buffer.
# byte[3-6]: The 4 bytes constituting the 32-bit int holding the SH-period
# byte[7-10]: The 4 bytes constituting the 32-bit int holding the ICG-period
# byte[11]: Continuous flag: 0 equals one acquisition, 1 equals continuous mode
# byte[12]: The number of integrations to average



Получать
#wait for the firmware to return data
#combine received bytes into 16-bit data

#Data from the TCD1304 linear CCD
#column 1 = pixelnumber, column 2 = pixelvalue
#Pixel 1-32 and 3679-3694 and are dummy pixels
#SH-period: 100 ICG-period: 2000000 Integration time: 50 us

карма: 19

0
Ответов: 109
Рейтинг: 1
#9: 2025-07-23 10:07:09 ЛС | профиль | цитата
Элемент "COM порт" в HiAsm как конвертирует данные?

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

0
Ответов: 109
Рейтинг: 1
#10: 2025-07-23 13:28:39 ЛС | профиль | цитата
А этой ПЗС линейки сигнал выходной сигнал имеет частоту 0,5 мГц. Подавать на вход звуковой карты нельзя, на LPT тоже.
Элемент "COM порт" в HiAsm как конвертирует данные?

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

0
Ответов: 933
Рейтинг: 197
#11: 2025-07-23 15:21:46 ЛС | профиль | цитата
Andrej77rv писал(а):
Элемент "COM порт" в HiAsm как конвертирует данные?

Не надо ничего конвертировать. Отправляй в порт целые однобайтовые числа.
Там тип integer
txfull = np.uint8([0,0,0,0,0,0,0,0,0,0,0,0])
карма: 19

0
Ответов: 109
Рейтинг: 1
#12: 2025-07-23 15:31:23 ЛС | профиль | цитата
Gunta писал(а):
Andrej77rv писал(а):
Элемент "COM порт" в HiAsm как конвертирует данные?

Не надо ничего конвертировать. Отправляй в порт целые однобайтовые числа.
Там тип integer
txfull = np.uint8([0,0,0,0,0,0,0,0,0,0,0,0])

Да ну. В элементе "Com порт" встроен конвертер ASCII. Он портит всю картину. Но я попробую.

--- Добавлено в 2025-07-23 15:54:02

Ну отправил я на порт 01011101.
Смотрим что получил в кабеле ком порта, выделено жёлтым. А должно было быть 00 0F 6D 9D



Редактировалось 7 раз(а), последний 2025-07-23 16:44:52
карма: 1

0
Ответов: 933
Рейтинг: 197
#13: 2025-07-23 16:58:03 ЛС | профиль | цитата
Попробуй такую сзему

Add(Label,8931604,70,56)
{
Width=384
Height=30
Align=2
Caption=""
AutoSize=1
}
Add(MainForm,2953706,350,182)
{
Point(onClose)
link(onCreate,12485417:doOpen,[])
link(onClose,12485417:doClose,[])
}
Add(Edit,2189383,161,126)
{
Left=20
Top=5
Width=195
Text="45 52 00 1E 84 80 00 1E 84 80 01 01"
}
Add(COMEX,12485417,427,196)
{
Port=2
BaudRate=19
link(onRead,55900:doAdd,[])
}
Add(Button,9912329,105,182)
{
Left=280
Top=5
Caption="Send"
link(onClick,2406881:doEnum,[])
}
Add(Str_Enum,2406881,161,182)
{
Delimiter=" "
link(onEnum,7161267:doConvert,[])
link(onEndEnum,3803879:doData,[(228,195)(228,258)])
link(String,2189383:Text,[])
}
Add(Memo,55900,504,203)
{
Top=30
Width=384
Height=231
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(StrCat,16748092,280,182)
{
Point(doClear)
link(Str2,13301294:Var1,[(293,173)(279,173)(279,219)])
}
Add(DoData,3803879,280,252)
{
link(onEventData,12485417:doWrite,[(389,258)(389,216)])
link(Data,13301294:Var2,[])
}
Add(GetDataEx,13301294,280,214)
{
link(Data,16748092:Result,[])
}
Add(Convertor,7161267,238,182)
{
Mode=4
link(onResult,16748092:doStrCat,[])
}

карма: 19

0
Ответов: 109
Рейтинг: 1
#14: 2025-07-23 17:20:23 ЛС | профиль | цитата
Gunta писал(а):
Попробуй такую сзему

Нет не получается.



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

0
Ответов: 933
Рейтинг: 197
#15: 2025-07-23 17:33:13 ЛС | профиль | цитата
Andrej77rv писал(а):
Нет не получается.

1.

Add(Label,8931604,70,56)
{
Width=384
Height=30
Align=2
Caption=""
AutoSize=1
}
Add(MainForm,2953706,350,182)
{
Point(onClose)
link(onCreate,12485417:doOpen,[])
link(onClose,12485417:doClose,[])
}
Add(Edit,2189383,161,126)
{
Left=20
Top=5
Width=195
Text="45 52 00 1E 84 80 00 1E 84 80 01 01"
}
Add(COMEX,12485417,427,196)
{
Port=2
BaudRate=19
link(onRead,55900:doAdd,[])
}
Add(Button,9912329,105,182)
{
Left=280
Top=5
Caption="Send"
link(onClick,2406881:doEnum,[])
}
Add(Str_Enum,2406881,161,182)
{
Delimiter=" "
link(onEnum,7161267:doConvert,[])
link(onEndEnum,3803879:doData,[(228,195)(228,258)])
link(String,2189383:Text,[])
}
Add(Memo,55900,504,203)
{
Top=30
Width=384
Height=231
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(StrCat,16748092,280,182)
{
Point(doClear)
link(Str1,13301294:Var1,[(286,173)(279,173)(279,219)])
}
Add(DoData,3803879,280,252)
{
link(onEventData,4796033:doEvent,[])
link(Data,13301294:Var2,[])
}
Add(GetDataEx,13301294,280,214)
{
link(Data,16748092:Result,[])
}
Add(Convertor,7161267,238,182)
{
Mode=4
link(onResult,16748092:doStrCat,[])
}
Add(Debug,4796033,343,252)
{
LogCount=100
link(onEvent,12485417:doWrite,[(389,258)(389,216)])
}

2.

Add(Label,8931604,70,56)
{
Width=384
Height=30
Align=2
Caption=""
AutoSize=1
}
Add(MainForm,2953706,350,182)
{
Point(onClose)
link(onCreate,12485417:doOpen,[])
link(onClose,12485417:doClose,[])
}
Add(Edit,2189383,161,126)
{
Left=20
Top=5
Width=195
Text="45 52 00 1E 84 80 00 1E 84 80 01 01"
}
Add(COMEX,12485417,427,196)
{
Port=2
BaudRate=19
link(onRead,55900:doAdd,[])
}
Add(Button,9912329,105,182)
{
Left=280
Top=5
Caption="Send"
link(onClick,2406881:doEnum,[])
}
Add(Str_Enum,2406881,161,182)
{
Delimiter=" "
link(onEnum,7161267:doConvert,[])
link(onEndEnum,3803879:doData,[(228,195)(228,258)])
link(String,2189383:Text,[])
}
Add(Memo,55900,504,203)
{
Top=30
Width=384
Height=231
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(StrCat,16748092,280,182)
{
Point(doClear)
link(Str1,13301294:Var1,[(286,173)(279,173)(279,219)])
}
Add(DoData,3803879,280,252)
{
link(onEventData,12485417:doWrite,[(389,258)(389,216)])
link(Data,13301294:Var2,[])
}
Add(GetDataEx,13301294,280,214)
{
link(Data,16748092:Result,[])
}
Add(Convertor,7161267,238,182)
{
Mode=5
link(onResult,16748092:doStrCat,[])
}

карма: 19

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