nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 16 Apr 2024 14:24



Reply to topic  [ 30 posts ]  Go to page Previous  1, 2
Аналоговый сигнал в COM порт 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22520
Location: Silicon Valley
Reply with quote
Post 
HardWareMan wrote:
ISA работает на половине частоты от 14.1318МГц. Т.е. на 7МГц. И ты никак не сможешь захватить каждый такт шины. Ну никак. У СОМ порта макс. скорость 115Кбит. У USB эмуляторов до 1Мбит. Обычный СОМ порт просто завалит твою программу прерываниями. Вспомните, когда скорость поднялась до 19200, без FIFO в СОМ контроллере уже вешается весь комп, заметьте, даже под DOSом! А если ты захочешь видео семплировать, это минимум 3 миллиона отсчетов. Если переводить в поток, и АЦП 8 бит, то это будет 3МБайта в секунду. х8 = 24Мбита в секунду. В итоге - СОМ - это утопия. USB еще справится, 2.0 который. Так что УВЫ.


Да - наверное через COM или LPT ловить видео - это утопия. Максимум что можно поймать - это строчную развертку от видеостроки да и то с погрешностями...

_________________
:dj: https://mastodon.social/@Shaos


03 Jun 2007 07:04
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я тоже такой бенчмарк делал и гонял на различных машинах,
только я подсчитывал генерируеные через порт импульсы.
Действительно, более 350000 импульсов не получается нигде.
Мне кажется, это связано с тем, что при обращении к порту
время доступа автоматически увеличивается во всех ПиСях.
То есть время записи удлинняется т.к. считается что порт -
медленный по сравнению, скажем, с памятью.


16 Mar 2010 02:18
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22520
Location: Silicon Valley
Reply with quote
Lavr wrote:
Я тоже такой бенчмарк делал и гонял на различных машинах,
только я подсчитывал генерируеные через порт импульсы.
Действительно, более 350000 импульсов не получается нигде.
Мне кажется, это связано с тем, что при обращении к порту
время доступа автоматически увеличивается во всех ПиСях.
То есть время записи удлинняется т.к. считается что порт -
медленный по сравнению, скажем, с памятью.


Я помниться по работе (ещё в России примерно в 2001 году) делал исследование - считал импульсы (посылаемые генератором со счётчиком) через LPT порт в линухе и RT-линухе - могу поискать отчёт...

_________________
:dj: https://mastodon.social/@Shaos


16 Mar 2010 05:55
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Поищи - это интересно...
Но мне кажется 350000 - это железный предел,
по крайней мере для LPT - я их тестил, а
бенчмарк я под голым ДОСом запускал.
От скорости процессора частота обращения к порту
практически перестаёт зависеть.


16 Mar 2010 08:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22520
Location: Silicon Valley
Reply with quote
Lavr wrote:
Поищи - это интересно...
Но мне кажется 350000 - это железный предел,
по крайней мере для LPT - я их тестил, а
бенчмарк я под голым ДОСом запускал.
От скорости процессора частота обращения к порту
практически перестаёт зависеть.


Нашёл отчёт, подготовленный мной в апреле 2002 года - я не на скорость оказывается считал, а на стабильность - максимальная частота генератора была 9600 Гц с которой посылалось 65535 импульсов - RT-Linux на Pentium-166 всегда считал на один больше (я так и не понял почему). Ещё один тест - посылка с досовского компьютера с частотой 100 Гц на комп с RT-Linux, загруженный веб-сервером, архиватором bzip2 и графической программой (fun из svgalib дем) - считало стабильно в течение 25 часов и не потеряло ни одного прерывания.

_________________
:dj: https://mastodon.social/@Shaos


16 Mar 2010 18:53
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Quote:
...считало стабильно в течение 25 часов и не потеряло ни одного прерывания.

А вот это вопрос самый интересный...
А как ты думаешь (я тогда тоже на эту тему размышлял) - как
проц успевает обрабатывать прерывания таймера, если не запрещены,
и регенерировать ОЗУ по второму каналу таймера ?
На осциллографе сигнал вздрагивает периодически, а логического
анализатора у меня в то время не было...


17 Mar 2010 02:57
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22520
Location: Silicon Valley
Reply with quote
Lavr wrote:
Quote:
...считало стабильно в течение 25 часов и не потеряло ни одного прерывания.

А вот это вопрос самый интересный...
А как ты думаешь (я тогда тоже на эту тему размышлял) - как
проц успевает обрабатывать прерывания таймера, если не запрещены,
и регенерировать ОЗУ по второму каналу таймера ?
На осциллографе сигнал вздрагивает периодически, а логического
анализатора у меня в то время не было...


ну циклов много у проца - видимо успевает :)

_________________
:dj: https://mastodon.social/@Shaos


17 Mar 2010 06:08
Profile WWW
Novelist

Joined: 31 May 2007 08:23
Posts: 36
Location: Украина
Reply with quote
Post 
:) привет, товарищи !

на счет прерываний - думаю, порядок не тот.

какие прерывания от таймера ? 18.2 гц ? мало это :) (для 4 мгц 8080 даже, например)

и разом-вместе 100 гц (*2 для полупериода).. ..

регенерация ОЗУ? лень справочники поднимать, .. разве не контоллер ПДП совместно с таймером этим занимается ? (имею ввиду ibm pc xt/at)..

а, собственно, с моим вопросом - хотелось математическую основу под, своего рода, АЦП на распостраннённых портах в PC.. переполняюсь ужасом при мысле проектировки для usb..(плохое впечатление от дешевых китайских цацэк :) звуковые карты, кардридэры, переходники IDE(один, самый дешевый, попался без глюков). тут поток большой.., а то что попроще - клавы, пады, мыши - тут все ок)..usb.. [в большинстве случаев] это либо универсальный либо, специальный контроллер.. (просто не знаю где взять и чем программировать)

цель - (1.)устройство, которое будет работать со всеми компьютерами.

(правда почти у всех не занят в компьютере line-in звуковой ))
и появился осцилограф с возможностью делать снапшоты :) )

у вас есть usb флэшки, которые тормозят у товарища, а на вашем компьютере работают ощутимо быстрее ? внешний винчестер ? тв - тюнер ? (usb)
производители используют новый usb 3.0 (черновой?) ожидаются новые скорости и новые несовместимости :) (поэтому такое недоверие у меня)

отсюда - (2.) - что то свое, где бы было меньше ограничений (большая частота дскретизации), несовместимостей и пр.. но юзать существующие интерфейсы надо. внутренние пока оставим на потом. комп сжигать не хочется. попробую использовать то что есть (см. ниже по тексту )) )и попросить Вас подсказать тупой (простой в пайке и программировании, с минимумом обязательных инициализаций, обьявлений и функций), но !быстрый! и дешевый контроллер с каким-нибудь интерфесом для компа
usb - главное чтобы корректно опознавал 2.0/1.1(1.0? 0_о) )
lan - udp unicast, broadcast по ip и/или arp (любой Ваш вариант от крайности когда комп слушает интерфейс и сам обрабатывает сырые данные поступающие [почти] в реальном времени, до самостоятельного измерительного комплекса с веб интерфесом (не готовые решения, а прикинуть мощность Вами рекомендованного контроллера), серия, где купить, софт (проприэтарный/gnu/?)

а теперь - что есть :)

если с тв не сложилось, то, пока, - регистратор (крайне дикий,правда :)) )
как оооочень большой "микроконтроллер" хочу использовать xt-плату из какого то брендового samsung(разьем для питания непонятный). для отладки подключать к хосту по rs232, (на плате и com и lpt прям на стеночке рядом с din-5)

[нуль-модем, для HardWareMan сообщу, что в предыдущих постах имелось ввиду Програмную регистрацию сигнала(ждать пока ногой дернет), включать ли прерывание (событие модема) - как эксперемент.. в зависимоси, что быстрее получилось бы.. стоит попробовать и сравнить с 350 000(600 000) итерациями..(может тогда мощность процессора имеет значения ?) а Ваши цифры о 9600, 115000 и пр скоростях относятся к линиям TxD RxD, а в картинках к вопросу они только служебные (заряд кондёра), данные измерения получают не с них., считают процем... к Вам еще вопрос :) какая задержка от служебных линий состояния модема rs232, через контроллер прерываний и к процу.. как бы устройство дало прерывания и ждет пока ответят.. где бутылочное горлышко ? может что то можно сменить/довесить на isa(для старых плат)]

научить его брать ВСЮ рабочую программу с этого же порта. никакого оригинального БИОСа, пробовать инициализацию как по книжке. судя по большому количеству и размерам микросхем на плате (явных ПЛИС не обнаружено), контроллеры (com, fdd, dma..) оригинальные и без необычных обратных связей.., ну, типа, если плата как в книжке, значит и программируется как в книжке)

а в качестве АЦП - применять предложенное токовое зеркало (? так вроде ответ был? кстати я только понял что именно оно и мне нужно было))) с первого взгляда (нескольких лет смотрения) не дошло).. повешу куда нибудь.. если что - попробую ПДП задействовать.

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

распиновка на питание надо. были может какие еще разьемы до AT ?

также просьба подсказать во что залить мой загрузчик (стоит большая dip микросхема и рядом такая же пустая панелька), может есть какие мелкие eeprom'ы ? надо просто маленькую прогу до 100 байт чтобы висела там
(желательно чтобы я сам справился с прожиганием, другие пока просят 10 $)

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

итог:
по теме, по com-порту, - вопрос открытый, не в плане тв, а в плане пропукной способности служебных линий (дёрганье ногой), програмно (циклический опрос)- цифра намного меньше 1 мгц... мало.. а как с прерываниями ? сейчас проверить не могу.. может кому скучно ? :) еще нужен генератор чтобы сигнал этот подать.. может, позже попробую переделать один..

быстрый микроконтроллер (usb и/или lan)

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

советы/предложения ?

2 Shaos: Извините, что всё в кучу.. редко тут бываю.. как консультация получилось.. просто все оно об одном - научиться отлавливать быстрое и полезное дёргание ногой..

зы: может когда то и до SPDIF доберемся :lol:


28 Aug 2010 18:29
Profile
Novelist

Joined: 31 May 2007 08:23
Posts: 36
Location: Украина
Reply with quote
Post 
поставил експеримент..

оказалось что в прерываниях я [пока] ничего не понимаю )) и в их программировании тоже :)

пока только делал выборки (не спрашивайте чем) из порта (состояние линий или модема.., там где CTS вход мониторить можно)

на CTS повесил кт315.. и батарейку 9в (cccp "крона")
на него - генератор ЗЧ.

минус батарейки на SG, 5 pin порта
плюс - на коллектор.
эммитер - вход ЗЧ и CTS, 8 pin порта.
база - второй вывод для генератора.

может это с "общим эммитером" называется.. хотя помоему я извратнулся немного.. образования нет, если что, - поправте.

теперь сам ефект :)

с порта (3f?, где состояние CTS можно отследить):
интересны бит 0 и бит 4

если считать сколько "еденичек" пришло с порта (0 бит) за секунду - получим что то похожее на частоту колебаний(синусоида обычная), отловить все значения, как писал HardWareMan, - невозможно, поэтому число немного занижено.

(надеюсь на прерывания)

частота - это так))
а если высчитать за ту же секунду число пришедших "16-ток" :)
и покрутить ручку уровня сигнала на приборе при этом, смотреть на изменения...
это число пропорционально амплитуде :)
(площадь полупериода нашей синусоиды, кусок Ынтеграла, начиная с 3 вольт)

есть соображения почему :)

кто верит ? (частота 35-1600 гц, работает :) кто математик пусть посчитает :)


04 Sep 2010 15:00
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Quote:
регенерация ОЗУ? лень справочники поднимать, .. разве не контоллер ПДП совместно с таймером этим занимается ? (имею ввиду ibm pc xt/at)..


Вот как раз по справочникам канал 1 таймера отвечает за регенерацию ОЗУ. И в них же написано - ежли не знаете, что делаете - не трогайте его.

А как его корректно трогать в неплохой брощюре написано, щас название не вспомню -
но автор интересный - 2B Groop (в Инете не нашел - дома гляну).

Так что нащщет лени - это есть поклёп. :wink:


06 Sep 2010 02:45
Profile
Novelist

Joined: 31 May 2007 08:23
Posts: 36
Location: Украина
Reply with quote
Post 
по 1 каналу таймера (imb/at, написано так на бумаге :) ):

два входа, делитель - 1 выход

входы - вентиль, что то вроде ENABLE (во втором канале, который на динамик этот вывод подключен ко 661pp1 (я анаграмный параноик, поэтому мне это похоже на 580вв55, поправте, если чо.. опяь лень)), но сознательная.))... тут же он подтянут к +5 в. (как и 0 канал), - всегда "готов"!

второй вход - это CLK = 1,19 мгц (2.38мгц/2)

выход (clk out, уже после деления)- к кубику))) ша нарисую)
....................................______
.......................+5v-----|B...... Q|-----запрос (к памяти? тоесть пдп ?)
clk_out, ch1 timer---|CLK.... |
.................refresh ----|CLEAR|
....................................|______|
.(все... устыжайте меня великие схемотехники, что не знаю обозначений)) )....

8254-2 четыре порта - 3 счетчики, 1 порт управление

в моем мануале кроме сего написано, правда на правах "примечания", типа такого: канал 1 (таймера, про который я тут всё пишу))) программируется как генераток для получения !!!! 15 микросекундного периодического сигнала !!! (15 мкс)

в общем в регистрах делителя 1 канала таймера при инициализации поселяются значения для дробления 1,19 Мгц до сигнала на выходе с периодом 15 мкс. потом сей буфер (так правильно?, что чуть выше "нарисован") и пдп...

зы. в моем мануале есть только таблица irq с приоритетами. программирование контроллера прерываний - вопрос онкрытый. буду рад bin (или asm 86) готовому модулю)) с инструкцией. (под реальный режим..., голенький..)


08 Sep 2010 17:11
Profile
Novelist

Joined: 31 May 2007 08:23
Posts: 36
Location: Украина
Reply with quote
Post 
во даю... совсем одичал разумом... )) думал это у Вас вопрос по таймеру..
а потом пречитал - у вас и книга, как правильно программить :oops:

таймер - эт нинада)))

в крайнем случае так:

прерывание - нога с com- порта, которая просто счетчик инкреминирует.
и второе прерываение, от таймера, который перепрограммирован для уменьшения периода посчета. грубее данные, но быстрее. подпрограмма на этом, прерывании от таймера просто счетчик от первого (com - порт) - тихонько сохраняет и обнуляет для следующего замера.

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


08 Sep 2010 17:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
zooleek wrote:

Quote:
во даю... совсем одичал разумом... ))


У Вас там, наверное, жарко... :wink:
Но Вы критично к себе относитесь... :lol: , что радует.


10 Sep 2010 02:42
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
zooleek wrote:
потянет ли видесигнал(яркость+синхро) проц под чистым досом

Видео явно не потянет. А вот синхросмесь, а уж тем более звук в режиме ШИМ
СОМ-порт, похоже, вполне вытянет.

HardWareMan wrote:
У СОМ порта макс. скорость 115Кбит.

На мой взгляд, этого с головой хватит.
Quote:
В качестве ШИМ можно использовать даже COM-порт. Т.к. 0 передаётся как 0 0000 0000 1 (8 бит данных + старт/стоп), а 255 как 0 1111 1111 1, то диапазон выходных напряжений - 10-90% с шагом в 10%.

[url]http://ru.wikipedia.org/wiki/Широтно-импульсная_модуляция[/url]

Quote:
Извращенский ШИМ из UART

Автор DI HALT
Опубликовано 07 Сен 2008
Рубрики: AVR. Учебный курс
Метки: PWM, UART, Микроконтроллер, Трюки, ШИМ


Пока писал статью про UART пришла в голову одна извращенная идея - на базе UART же можно организовать самый натуральный низкодискретный ШИМ!


Достаточно только сделать где-нибудь в памяти переменную, куда мы будем совать число с заданной скважностью нулей и единиц, а по прерыванию опустошения буфера это число снова пихать в регистр UDRE. Таким образом, генерация ШИМ будет самопроизвольной, без лишних телодвижений. Правда можно получить всего 10 разных значений ШИМ, но зато нахаляву!!!

Для тех кто не понял как, приведу числа которые надо будет непрерывно слать через UART:
два дополнительных значения мы получим за счет старт и стоп битов.

00000000 - 1/10
00000001 - 2/10
00000011 - 3/10
00000111 - 4/10
00001111 - 5/10
00011111 - 6/10
00111111 - 7/10
01111111 - 8/10
11111111 - 9/10

Да и частоты там можно получить нефиговые!

http://easyelectronics.ru/tag/shim

PS. А можно и аппаратно UART-у подыграть...
http://www.nedopc.org/forum/viewtopic.php?t=9465


25 Mar 2011 17:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
zooleek wrote:
Есть схемка c помощью которой измеряют некоторые извращенцы номиналы кондюков и резисторов:

Image

Диод там чтоб быстрее разряжался конденсатор.

Что если заменить диод на транзистор и на его базу подавать койнить сигнал:

Image

Я как-то по началу относился к этой идее, как к некоторому фейку...

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

Простейший АЦП на СОМ-порте ПК

Image

Quote:
Схема простейшего АЦП на СОМ-порте ПК (рис.1) с диапазоном входных напряжений от-6 до+9 В, временем преобразования 500 мс и точностью, эквивалентной 8 разрядам.

Транзистор Т работает как компаратор, сравнивающий напряжение на конденсаторе C с пороговым напряжением на эмиттерном переходе 0,7 В. BASIC-под-программа (листинг 1) анализирует уровень на коллекторе (линия RI) и если он высокий, то на конденсатор через R3 с линии DTR подается высокий уровень и наоборот, но в последнем случае дополнительно увеличивается на единицу значение переменной U. Таким образом, путем программного заряда/разряда конденсатора С на нем поддерживается напряжение, соответствующее порогу отпирания транзистора, а в конце цикла измерения (255 шагов) значение переменной U тем больше, чем больше заряд конденсатора, полученный им от внешнего источника через резистор R4.

Code:
LISTING 1
Private Sub Timerl_Timer()
  RTS 1
  DTR 0
  U = 0
  REALTIME (True)
  TIMEINIT
  While (RI() - 0) And (TIMEREAD() < 300)
  Wend
  TIMEINIT
  For i - 1 To 255
        If RI() = 1 Then DTR 1 Else DTR 0: U = U + 1
        While TIMEREAD() < i
        Wend
  Next i
  REALTIME (False)
  U = (U - HScroll1.Value) / HScroll2.Value * 10
  U = Int(U * 10) / 10 DTR 1
  Label1.Caption - Str$(U) + " V"
End Sub

Code:
LISTING 2
  y2 = 100 - U * 10
     If n = 0 Then y1 - y2: Picturel.Cls
          xl = n
  n = n + 5
  x2 = n
  Picturel.Line (xl, yl) - (x2, y2)
  yl = y2

Code:
LISTING 3
Private Sub Timerl_Timer()
  RTS 1
  DTR 0
  U = 0
  REALTIME (True)
  TIMEINIT
  While (DSR() - 1) And (TIMEREAD() < 300)
  Wend
  TIMEINIT
  For n = 1 To 1000
      If DSR() = 0 Then DTR 1 Else DTR 0: U = U + 1
      While TIMEREAD() < n
      Wend
  Next n
  REALTIME (False)
  U = (U - HScroll1.Value) / HScroll2.Value * 10
  U = Int(U * 100) / 100
  DTR 1
  Labell.Caption = Str$ (U) + " V"
End Sub

Quote:
Автор экспериментально установил, что измеряемое напряжение связано со значением переменной U выражением Уизм = (U -110)/11,2 . Пятая снизу строка подпрограммы как раз и выполняет такую поправку (константы HScroll1.Value и HScroll2.Value по умолчанию полагаются равными соответственно 110 и 11,2, но могутбыть при необходимости скорректированы), а четвертая снизу - округляет полученное значение до десятых долей вольта, т.е. реальной разрешающей способности. Если предпоследнюю строчку в листинге 1 заменить на листинг 2, то вместо цифровой индикации напряжения можно получить временную диаграмму.


Image

Quote:
В усовершенствованном варианте устройства (см.рис.) благодаря применению дифференциального усилителя значительно уменьшена погрешность, обусловленная температурным дрейфом порогового напряжения на эмиттерном переходе, а также расширен до ±10 В диапазон измеряемых напряжений. Разрешающая способность повышена с 0,1 до 0,02 В, поэтому в управляющей подпрограмме (листинг 3) количество шагов в основном цикле увеличено до 1000, а выводится на дисплей уже не 2, а 3 значащих цифры (рис.5). Интересно отметить, что ни в первой, ни во второй схемах емкость конденсатора на результаты измерения не влияет и ее можно безболезненно варьировать в широких пределах - от 20 до 100 мкФ.

(«Elektor Electronics» ¹3/2001, с.22 - 25)

_________________
iLavr


13 Nov 2012 15:25
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 30 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 10 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.