|
|
|
| Есть поле. В нём 24 символа - 1 и 0, могут быть в разных комбинациях.
Нужно этот код выгнать через LPT порт - ноги 2,3,4
Как это сделать? | |
|
| |
|
|
|
| Могу предложить только ссылки
http://www.gamedev.ru/code/forum/?id=50627
http://www.snippy.ru/snippet/406-programmirovanie-lpt-porta/
http://lpt-port.narod.ru/5.html
Но твой вопрос больше на хардварный похож
И такие темы обычно на С++ реализуют или Delphi
P. S. вопрос? Робота изобретаешь? | |
|
| |
|
|
|
|
|
|
| Data вы установили я согласен а вот тактовую частоту CL и разрешение на изменение CE почему-то нет....
более того data выставлена не правильно
LPT параллельный порт при установке числа у него на всех восьми ножках устанавливается чило т.е в вашем случае сказав что нужно установить 1 он на ножки установит 00000001 при 2 00000010
вот тут его и надо ловить т.к. вывод данных у вас последовательный
нужно просто определиться какие цифры ему подсовывать и все....
а циферек всего 4 это 0 , 8, 3, 5 при условии что CE младший разряд а CL старший | |
|
| |
|
|
|
| Это Вы сейчас с кем разговаривали? - кажется это я очень глубоко полез, затеяв такой проект не расчитав силёнок
Господа, а может возьмется кто за вознаграждение наваять такую программу - готовое законченное решение? Только конечно не в Access. Если да - то подумаю над техническим заданием... И сколько такая работа может стоить, хотя бы приблизительно?
Мой адрес: leshke1@pisem.net | |
|
| |
|
|
|
| Alex у Вас все получится только ухватите мысль.....
вы сейчас в единицу времени выводите на один провод либо 0 либо 1
проблема в том что вы выводите это значение а оно только либо 1 либо 0
вы на выходе D0 видете мерцание светодиода
по логике Вам нужно еще D1 и D2 а вы к ним подступиться не можете....
по одной простой причине - Вы не уловили то что выдает порт
давайте попробуем вместе
и так имеем 8 проводов и на каждом можем выставить напряжение исходя из двоичной системы соответсвенно максимальное число равно 2 в 8 степени
на этих проводах мы можем выставить любое число из указанного диапазона
нам нужно только три провода(т.е наши числа будут располагаться в диапазоне от 0 до 7)
теперь договоримся о разрядности
старший разряд - это будет CL - тактовая частота
средний разряд - Data
младший разряд -CE
исходя из графика который вы прислали на рис
при изменении данных СЕ должно быть 1
CL должно кувыркаться (если вчера было 1 то сегодня 0 и наоборот)
Data должно иметь значение которое имеет
теперь для того что бы что то получилось вам нужно в цикле передать данные (т.е установить значение порта если вы порту передадите 7 то будет установлено 00000111 (D0 справа)) т.е на все три провода подается напряжение +5 вольт
таким образом вам нужны цифры 3 5 7 0 1
далее все в ваших руках | |
|
| |
|
|
|
| Чего-то тут видел. Полный набор вот.
http://go.mail.ru/search?q=LPT&old_q=%FD%EB%E5%EA%F2%F0%EE%ED%E8%EA%E0&in=y
http://go.mail.ru/search?lfilter=y&mailru=1&q=LPT | |
|
| |
|
|
|
| где то как то так
Function WriteLPT() 'запись в порт
' Dim cnn As ADODB.Connection
Dim asd(24) As Integer
Dim TableRec As ADODB.Recordset
Dim strCurrentConn As String
' Set cnn = New ADODB.Connection
Set TableRec = New ADODB.Recordset
strCurrentConn = CurrentProject.Connection
' Set cnn = CurrentProject.Connection
TableRec.Open "Send", strCurrentConn
With TableRec
.MoveFirst
Do
asd(1) = .Fields("D0")
asd(2) = .Fields("D1")
asd(3) = .Fields("D2")
asd(4) = .Fields("D3")
asd(5) = .Fields("D4")
asd(6) = .Fields("D5")
asd(7) = .Fields("D6")
asd(8) = .Fields("D7")
asd(9) = .Fields("D8")
asd(10) = .Fields("D9")
asd(11) = .Fields("D10")
asd(12) = .Fields("D11")
asd(13) = .Fields("D12")
asd(14) = .Fields("D13")
asd(15) = .Fields("T0")
asd(16) = .Fields("T1")
asd(17) = .Fields("B0")
asd(18) = .Fields("B1")
asd(19) = .Fields("B2")
asd(20) = .Fields("TB")
asd(21) = .Fields("R0")
asd(22) = .Fields("R1")
asd(23) = .Fields("R2")
asd(24) = .Fields("S")
.MoveNext
Loop Until .EOF
End With
TableRec.Close
' cnn.Close
Set TableRec = Nothing
' Set cnn = Nothing
Dim CLk As String
Dim signaltxt As String
Dim signalinteger As Integer
CLk = "0"
Out &H378, 0
For i = 1 To 24 Step 1 'я не знаю в какой последовательности должны идти сигналы
'вполне возможно что должно быть и вот так For i = 24 To 1 Step -1
If CLk = "0" Then CLk = "1" 'устраиваем кувыркашки
If CLk = "1" Then CLk = "0"
signaltxt = CLk & asd(i) & "1" 'собираем сигнал
Select Case signaltxt 'ищем числовой аналог
Case "001": signalinteger = 1
Case "011": signalinteger = 3
Case "101": signalinteger = 5
Case "111": signalinteger = 7
End Select
Out &H378, signalinteger 'выпихиваем число в порт
'тут бы по уму паузу воткнуть, а я не помню как это делается (смотрите свой рисунок
' там СL идет с периодичностью 1.5 или более мкс)
Next i
Out &H378, 0 'запрещаем изменение
'сигнал ловить СL на выводе D2, Data-D1, CE-D0 согласно схемы распайки разъема
End Function
|
| |
|
| |
|
|
|
| рассмотрел внимательно рисунок сигналов и понял что не правильно собрал сигнал ...
щас переделаю | |
|
| |
|
|
|
| вот исправил
Dim CLk As String
Dim signaltxt As String
Dim signalinteger As Integer
Dim i As Integer
Dim fgh As Integer
fgh = 0
CLk = "1"
Out &H378, 0
For i = 1 To 48
If CLk = "0" Then 'устраиваем кувыркашки
CLk = "1"
Else
CLk = "0"
End If
If i / 2 - Int(i / 2) > 0 Then fgh = fgh + 1
signaltxt = CLk & asd(fgh) & "1" 'собираем сигнал
Select Case signaltxt 'ищем числовой аналог
Case "001": signalinteger = 1
Case "011": signalinteger = 3
Case "101": signalinteger = 5
Case "111": signalinteger = 7
End Select
Out &H378, signalinteger 'выпихиваем число в порт
'тут бы по уму паузу воткнуть, а я не помню как это делается (смотрите свой рисунок
' там СL идет с полупериодичностью 1.5 или более мкс)
Next i
Out &H378, 0 'запрещаем изменение
'сигнал ловить СL на выводе D2, Data-D1, CE-D0 согласно схемы распайки разъема
|
| |
|
| |
|
|
|
|
| там раньше оператор был кажеться Pause(сколько времени)
но честно не помню.....может гуру подскажут
а на счет me.timerinterval вполне законно ругается Вы из модуля (публичной функции) пытаетесь обратиться к форме - правильно в Вашем случае полное обращение forms![имя формы].timerinterval
вот только толку от этого не будет timerinterval работает только на timer т.е. в timer задается что надо делать а в timerinterval через какое время | |
|
| |
|
|
|
| вот раскопал......
... для того, чтобы преостановить выполнение программы на некоторое время можно воспользоваться API функцией:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Использование:
Call Sleep(10000) ' Пауза на 10 секунд
!!!ОПРОБОВАНО
Прислал Съемщиков Анатолий. Вот так! (06.01.00) | |
|
| |
|
|
|
|
|
| Щас ацкий интерфейс чуть доделаю и выложу | |
|
| |
|
|
|
| Вот сваял: http://webfile.ru/3864055 ругайте...
Не могу проверить выход частоты за границы диапазона при щелканьи кнопочками <>
Пишу, например, на кнопочку < :
RF=RF-StepNet
If RF < [Band].Column(9) Then
MsgBox "Достигнута нижняя граница диапазона"
Else
Remote
End If
|
А сообщение выскакивает при любом значении RF | |
|
| |
|
|
|
|
If RF < [Band].Column(9) Then
If RF< CInt([Band].Column(9)) Then ' или CLng или CDbl (смотря в чем RF)
или
If RF< [Band].Column(9)*1
Потому как из Column получаем в тексте, и приходится преобразовывать к числу
|
| |
|
| |
|
|
|
| Так вот где собака порылась: CInt или CLng или CDbl (смотря в чем RF)!
Я подозревал... Непонятно почему в форме FMAvto поле Devisor работает нормально - там ведь то же самое Кстати пытался то же самое в другой базе сделать - не работает... мистика | |
|
| |
|
|
|
| Я тут слегонца упростил функцию вывода
протестируй, плиз
Function WriteLPT() 'запись в порт
Dim asd(24) As Integer
Dim TableRec As ADODB.Recordset
Dim i, fgh, CLk, signalinteger As Integer
Dim strCurrentConn As String
Set TableRec = New ADODB.Recordset
strCurrentConn = CurrentProject.Connection
TableRec.Open "Send", strCurrentConn
With TableRec
.MoveFirst
Do
For i = 1 To 24
asd(i) = .Fields(i - 1)
Next i
.MoveNext
Loop Until .EOF
End With
TableRec.Close
Set TableRec = Nothing
Out &H378, 0
For i = 2 To 49
If i Mod 2 Then CLk = 0 Else CLk = 4 'устраиваем кувыркашки
fgh = i \ 2
If asd(fgh) = "0" Then signalinteger = 1 Else signalinteger = 3
signalinteger = signalinteger + CLk
Out &H378, signalinteger
Call Sleep(1) 'пауза 1 миллисекунда
Next i
Out &H378, 0
End Function
| | |
|
| |
|
|
|
| 1. Alex, а зачем вы сохраняете данные из формы в таблицу запросом, и тут-же добываете их рекордсетом из таблицы в функции?
2. Функцию CurrentPath() можно заменить на свойство CurrentProject.Path.
3. Все функции, работающие с формой переместить из общего модуля Global в модуль класса формы.
Это на беглый взгляд. | |
|
| |
|
|
|
| С паузой было все нормально
просто у Вас комп слишком быстрый и на микросхему сигналы приходили быстрее 1.5 мкс отсюда и была не стабильная работа
На открытие формы FMAvto добавить
дабы на микросхему случайно не залезла всякая ерунда
добавить обработчик ошибки при отсутствии .dll а то Акс виснет и остановить его можно только через диспетчер задач | |
|
| |
|
|
|
| "добавить обработчик ошибки при отсутствии .dll" - сделано
"На открытие формы FMAvto добавить Out &H378, 0" - ругаецо: "Compile error: Sub or Function not defined"
Тупо добавлял: Out &H378, 0 Может еще чего дописать надо | |
|
| |
|
|
|
| "2. Функцию CurrentPath() можно заменить на свойство CurrentProject.Path." - сделано
"3. Все функции, работающие с формой переместить из общего модуля Global в модуль класса формы." - сделано | |
|
| |
|
|
|
| автор: ShadowOfSun (24.08.2009 в 23:26) личное сообщение
"Я тут слегонца упростил функцию вывода
протестируй, плиз"
Работает | |
|
| |
|
|
|
| Прислушайтесь к совету Lukas .....
Посудите сами все данные у Вас храняться на форме (я про сигнал Data)
форма постоянно открыта т.е считать данные можно в любую секунду
а у Вас получается - Вы запросом удаляете записи в таблице
потом в эту таблицу заносите данные
далее програмно получаете получаете доступ к этой таблице и считываете данные
Может я чего то не увидел...
но почему нельзя просто считать данные с формы (без этого забега по запросам)
если вы не можете придумать как имена полей использовать в циклах то это просто
те имена которые будете использовать обзываете одинаково (Акс сам так поступает - вновь добавленные поля называет например поле265) осталось числовую составляющую проконтролировать что бы были в нужном порядке
добираться до поля в цикле следующим образом forms![имя формы]("имя поля" & i+j)
где i переменная цикла
j сдвиг (ну т.е. если цикл начат с 1 а поля с 249 то сдвиг будет 248) | |
|
| |
|
|
|
| Абсолютно согласен! Мучаюсь... | |
|
| |
|
|
|
| Это уже вопрос из серии философия программирования
Пусть Lukas меня поправит
Если двоичная строка где то высчитывается, можно эту переменную сделать глобальной
И не надо искать по форме, а в функции использовать переменную и mid выбирать кусочки
| |
|
| |
|
12 Кб. |
|
| Можно оформить свойством в модуле класса формы, например.
И выглядеть эта форма может как-то так: | |
|
| |
|
|
|
| Красава
А как это вы такую формочку нарисовали? | |
|
| |
|
|
|
|
| Чё та сходу не получается ковыряюсь... | |
|
| |
|
19 Кб. |
|
| Ничё ниполучаицо! | |
|
| |
|
|
|
| 1. Уж если в обоих модулях описываешь процедуру под одним именем, то:
В обоих модулях добавить:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
|
2. в Function WriteLPT() модуля LPT:
...
Do
For i = 1 To 24
asd(i) = Forms![FMAvto]("Field" & i + 0)
Next i
' .MoveNext
Loop Until .EOF
...
|
откуда компилятору знать про какой-то .EOF?
и зачем цикл Do-Loop? Если бы не ошибка на .EOF этот цикл впал бы в нирвану, вместе с вложенным циклом.
3. Зачем растаскиваешь по полям формы бинарное значение, есть же массив asd(24) /лучше asd(1 To 24)/, его и используй при подготовке и выводе в порт.
А если хочешь посмотреть что в нем, считай данные из него и положи на форму. | |
|
| |
|
|
|
|
| Еще раз:
Не надо считывать данные с полей формы в массив!!!
Массив заполнять программно!!!
Если не ошибаюсь, изначально там должны быть биты Long числа, преобразованного к двоичному представлению.
Используй функцию преобразования Long числа в массив битов, вначале предыдущего твоего топика есть пример такой функции.
Далее меняешь значения элементов массива как требуется для вывода в порт.
Выводишь в порт тоже из массива.
Если надо смотреть значения элементов массива - выводишь значения из массива на форму.
И перемести все процедуры/функции из общего модуля в модуль формы. | |
|
| |
|
|
|
| Как вариант.....
вариант 1
переделайте функцию Remote()...
в конечном итоге она должна выдавать в тексте весь сигнал Data (т.е. в одном слове все 24 символа)......(в первых вариантах вашей проги я это видел - правда вы тогда там сигнал в поле собирали )
далее в функции LPT убрать описание массива, убрать цикл заполнения массива (убрать все что напоминает о массиве) - он там вообще не нужен
с формы убрать поля где прописывались биты сигнала Data (тоже не нужны)
теперь для начала некой переменной uio( String) присваиваем значение функции Remote()
в функции LPT вот эту строку
If asd(fgh) = "0" Then signalinteger = 1 Else signalinteger = 3
|
заменить примерно на вот это
If Mid(uio,fgh,1) = "0" Then signalinteger = 1 Else signalinteger = 3
|
возможно что вот на это
If Mid(uio,25-fgh,1) = "0" Then signalinteger = 1 Else signalinteger = 3
|
вариант 2
тоже самое переделать функцию Remote()
в цикле заполнения массива обращайтесь не к полю, а к переменной uio (см.выше) выдергивая по биту
примерно так
или вот так
ну соответственно поля на форме придется убрать-они не нужны
в обоих вариантах дано по две строчки кода по причине того что я не знаю что у вас получится, т.е не знаю в какой последовательности нужно выдергивать символы слево-направо или справа-налево
По моему мышлению во втором варианте будет более четкий сигнал, но это только догадки | |
|
| |
|
|
|
| To Lukas & snipe
Не, отказываться от полей в форме, ну вы поняли, не хочу. Так как есть на данный момент мне удобнее, потом - возможно...
Есть несколько вопросов не по теме:
1. Возможно ли из акса программно крутить виндовый микшер? И не мастер, а регулятор уровня линейного входа?
2. Как сделать постраничное перелистывание списка кнопкой? Ну типа PageUp / PageDown?
Варианты:
SendKeys "PgDn", False
SendKeys "PageDown", False
SendKeys 34, False
SendKeys 0x[22, False
SendKeys 81, False
SendKeys 0x51, False
не работают
Вариант:
Me!Список0 = Me!Список0 + 10 ' 10 - например
Работает, но как то криво
3. Как проверить наличие записи в таблице?
Сделал кнопочку МЕМ - суть ее в том, что при нажатии на нее, запрос на добавление добавляет в таблицу Станции текущую частоту приема. В таблице на поле Частота стоит "повторения не допускаются" Т.е. если нажать МЕМ на имеющейся частоте, то она просто молча не добавляется. А хотелось бы поиметь соответствующее сообщение. | |
|
| |
|
|
|
| На данный момент все это выглядит вот так: http://webfile.ru/3910098
Добавил логотипы радиостанций | |
|
| |
|
|
|
| "И перемести все процедуры/функции из общего модуля в модуль формы."
После перемещения ругецо - спрашивает кто такой Band... | |
|
| |
|
|
|
|
| по поводу постраничного перелистывания
forms![имя списка].ListCount - показывает сколько в текущий момент в списке записей следует учитывать что отсчет идет от 1
конструкция
forms![имя списка]=forms![имя списка].ItemData(M)
'где М - целое положительное число
|
позволяет переместиться на определенную строчку в списке
следует учитывать, что М ведет отсчет от 0 (т.е. ItemData(0) установит выбор на первой строчке)
осталось только накидать код который будет обрабатывать события ваших кнопок | |
|
| |
|
|
|
| Забыл написать...
forms![имя списка].ListIndex - показывает какая строчка выделена
теперь вроде все что вам может понадобиться | |
|
| |
|
|
|
| Чета чуть выше я велосипед изобретал....
Me![имя списка].SetFocus
SendKeys "{PGUP}"
ну соответственно
SendKeys "{PGDN}" в другую сторону | |
|
| |
|
|
|
| ShadowOfSun
"На первый вопрос держи ссылочку..."
Вот спасибище огромное! При включении/выключении (особенно) и переключении станций в динамиках слышался громкий ПУК. Думал решать проблему на железячном уровне; с помощью этого модуля все оказалось намного проще: перед выполнением Remote загоняю линейный вход в 0, после выполнения - с некоторой задержкой (оптимальной оказалось 200мс) возвращаю желаемый уровень громкости. Отлично все работает!
snipe
Me![имя списка].SetFocus
SendKeys "{PGUP}"
Спасибо! Работает! А у меня такая же конструкция правда без фигурных скобочек не работала
Вот что сейчас имеется: http://webfile.ru/3916791
Осталось сделать "горячие клавиши" ну и может быть, от безделья, какой-нибудь импорт/экспорт списка станций, чтобы при смене версии не терять настройки.
Еще один момент. Программка запускается со скрытым окном и кнопкой закрытия access. Это хорошо. Если пользоваться кнопочкой "свернуть" на форме - она сворачивается в левый нижней угол и прилепляется к панели задач, при восстановлении показывается опять одна форма. Это тоже хорошо. (Ну было б еще лучше, если бы сворачивалась в панель задач, как и все программы... ну это я уже придираюсь и капризничаю - и так хорошо!)
А вот если нажать виндовую кнопочку "свернуть все окна", или щелкнуть по ярлычку в панели задач, тогда она сворачивается полностью и при восстановлении разворачивается вместе с окном access. Это уже плохо. Можно ли как то это побороть?
Lukas показывал тут такую красивую формочку - там, по моему, не было этого недостатка. Файл этот случайно удалил, а скачать больше негде | |
|
| |
|
|
|
|
| Очень рад, что у тебя все получилось.
Интересный проект
Удачи на дорогах | |
|
| |
|
|
|
|
| Да действительно - колесо придумал ленивый - надоело таскать.....
Надо смотреть что GPS выдает, а потом думать как это переварить | |
|
| |
|
|
|
| GPS выдает вот такое: http://webfile.ru/3930439
Да вообще это шутка была Неоправданно сложно да и не нужно - машина ж не самолет.
Да и как привязку к координатам делать? - центр города не подходит... напрашивается квадрат(район)... | |
|
| |
|
122 Кб. |
|
| Здравствуйте, форумчане. С праздниками.
Разговаривал с Алексеем (Alex), которому вы помогали создать прогу для управления синтезатором на LM7000. Он прислал меня к вам.
Хочу только сразу предупредить, я в программировании - дуб, хотя в молодости возился с ZX-Spectrum и даже пытался что-то сочинять на Бейсике. Так что разговаривать на равных с вами о кодах я не смогу.
Проблема в следующем: Я взял за основу прогу Алексея для управления синтезатором LM7000 в трансивере. С полгода работал без проблем. Но возникла мысль уменьшить шаг перестройки синтезатора для расширения возможностей. Для этого нужно ввести сдвиговый регистр на 74НС595. Автор девайса синтезатора общаться отказывается, говоря, что это ему не интересно. Вот, что удалось почерпнуть из форума с ним:
Начало цитаты.
...Не понял, в чем у Вас затруднения? На входе LM-ки тот же сдвиговый регистр, что и 595-й... Единственное, фазы сигналов слегка разнятся, почему у меня и стоит пара инверторов... Ну и, поскольку у LM-ки нет внешнего выхода от последнего разряда, а у 595 есть, то 595 приходится ставить первым... Данные для LM-ки и для 595 в программе "готовятся" по отдельности, а перед выводом "сшиваются" в единое "управляющее слово"...
Т.е. управляющая фраза заливается последовательно, но сначала включается "enable-нога" 595й и скармливаются восемь бит, потом эта упр. нога выключается и 595я остальные биты выпускает на входе QC чтобы они попали на вход Data LM7000, соответственно с включением Enable у LM?
Включенные, как на моей схеме 595 и LM-ка представляют собой "единый" сдвиговый регистр на 32 (если мне не изменяет мой склероз по поводу разрядности регистра LM-ки) разряда... И записываются в него эти 32 бита последовательно непрерывно, именно как в "единый" регистр...
Конец цитаты.
Нужно управлять этими 8 битами так, чтобы при переполнении (или обнулении) регистра увеличивался (или уменьшался) шаг перестройки (переменная RF). Перестраиваться можно кнопочками на форме, или кнопками мыши, или её колёсиком.
Кусок схемы ( не обращайте внимание на СОМ-порт - это просто гнездо от СОМ, управляю через LPT) во вложении, там же сама программа и листинги.
Мужики, помогите.
Андрей. | |
|
| |
|
|
|
| как я понял вам нужно выкинуть через LPT порт последовательно 32 бита причем первых 8 на одну микросхему а остальные 24 на другую
если это так
то схематическое решение немного не правильное - из LPT порта надо вытаскивать сигнал по 4 проводам (у Алекса по 3)
CL_K-тактовую частоту
Data_K - собственно сигнал
СE_1-разрешения изменения 1 микросхемы
СE_2 - разрешения изменения 2 микросхемы
при таком решении без разницы в какой последовательности будут стоять регистры сдвига
вообще в радиоэлектронике я тоже полный профан
прошлый раз Алекс прислал схему сигнала(лов) и по ней я ориентировался | |
|
| |
|
|
|
| Доброе утро, Snipe.
Да, есть и такая схематика, с раздельными enable. Во вложении рисунок. А почему нельзя по трем проводам? Регистры подключены последовательно. Выход 595 идёт на вход DATA LM-ки, нужно просто, чтобы первыми "вылетали" биты для ЛМ, а затем - для регистра 595. Может и не прав, но мне так кажется. А сигнал разрешения записи - общий для обех микрух, только различаются по фазе (стоят инвертора). И, snipe, управляющее слово постоянно (в смысле, циклически) подаётся на ЛМ-ку или только, если изменились параметры? Можно, наверное, постоянно это не делать, так как регистры в ЛМ и 595 с защелкой. Ещё посылаю во вложении даташит на 595 и небольшую статейку по 595. Ссылка на вложение: http://zalil.ru/29920472
Андрей. | |
|
| |
|
|
|
| различатся по фазе
а как вы подадите сигнал запрещающий запись в обе микросхемы | |
|
| |
|
|
|
| Слушай, ну я не знаю. Схема, в которой сигнал с 9 ноги регистра 595 идёт на 5 ногу ЛМ-ки, рабочая. Значит как-то можно управлять. Мне, в принципе, без разницы 3 или 4 провода будут идти на управление. Программу только надо как-то изменить.
Да и ещё. Как мне в этой программе организовать опрос 5 (или любой свободной, без разницы куда припаять) ноги порта LPT (на ней периодически будет появляться 0 от внеш. устройства). | |
|
| |
|
|
|
| вот и я про то же - загрузили одну микруху переключились потом другую загрузили и запретили ввод инфы и для этого надо два провода
вот как организовать опрос (получение значений из порта)
это не ко мне - не знаю(не разбирался)
разберитесь с тем что надо передать микросхемам
а дальше разберемся | |
|
| |
|
|
|
| Автор схемы писал, что управляющее слово одно и длиной 32 бита (8-для 595 и 24-для ЛМ). А что в проге нужно добавить, как это всё организовать? | |
|
| |
|
18 Кб. |
|
| не знаю что писал автор
но когда ему делали выгрузку в LPT порт выгружали слово из 24 бит
вот раскопал =>
на зелененьких проводах всегда установлена 1
если один из проводков (10-13) соединить с землей и потом считать состояние этой части порта то можно получить цифирку (а если подавать данные через шифратор то можно подцепить 16 датчиков)
вот таким кодом
dim statusint as variant
statusint=inp(889)
в начале модуля соответственно прописать
Private Declare Function Inp Lib "C:\WINDOWS\system32\inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer | |
|
| |
|
32 Кб. |
|
| Я пока не понимаю, что нужно сделать для "...уменьшить шаг перестройки синтезатора...", но
внутри файла "очень не очень".
Чуть пошаманил =>
Проверьте, если работает, будем двигаться дальше.
(особенно работает ли AM интересует) | |
|
| |
|
|
|
| Да, здорово Вы её обкорнали, но всё работает, только почему-то сначала нужно Access загрузить и в нём уже открывать. Просто кликая по файлу не получается загрузка.
А насчёт шага перестройки - это так. Положим, к примеру, у нас в 595 регистре слово 00100001, мы нажимаем кнопочку "+" на форме и значение меняется на 00100010, а если на кнопку "-", то 00100000. Только по одному биту - это слишком медленно (шаг маленький). До полного заполнения регистра - 256 шагов, а надо шагов 50-100.
Да, и ещё. Режим АМ не нужен. Синтез работает на FM только. Частота ГУНа 111-114 МГц. | |
|
| |
|
40 Кб. |
|
| 2003 =>
Первый раз открывается невидимым, приходится гасить через диспетчер.
Какое-то "наследство" от исходного файла, не могу избавиться пока. | |
|
| |
|
|
|
| Так чего, АМ вырезать нафиг? | |
|
| |
|
|
|
| Да, АМ нафиг не нужен. Можно также минимизировать панель. Оставить только кнопки шага и диапазон из таблицы (там, где 40м, 30м, 80м). А остальные настройки сделать всплывающими. | |
|
| |
|
|
|
| http://www.hiprog.com/forum/files/5638-20090825122949.GIF
| |
|
| |
|
7 Кб. |
|
| Что-то типа такого, но это не самое главное. | |
|
| |
|
69 Кб. |
|
| Поскольку так и не въехал, что нужно изменить,
нарисовал лицо как смог =>
Вот только интересно, работает ли?
ps. У кого нет библиотек LPT порта, кнопки "<", ">", "Play" лучше не давить. | |
|
| |
|
|
|
| Да, вполне мордочка, на уровне, всё работает. Порадовала возможность редактирования имиджа.
Lukas, благодарю. А там, внутри, уже 32 бита пересылает? | |
|
| |
|
|
|
| Неа, все как в предыдущем варианте.
Для меня эти "посылаемые биты" темный лес, ночью, зимой. | |
|
| |
|
|
|
| да вот для меня тоже
то что отсылается нужно для работы lm7001 а причем тут 595 и почему 32 бита а отсылается 24 | |
|
| |
|
95 Кб. |
|
| Да я ж писАл. LM7001 не может работать с мелким шагом перестройки. Поэтому ставят сдвиговый регистр на 74НС595. Существует два способа подключения его. Скажем так, последовательный (когда выход 595 подключают на вход data LM-ки и засылают слово в 32 бита, а сигналы СЕ и CL - запараллелены. Из 32 бит 24 проходят через 595 к ЛМ, а последние 8 остаются в 595) и параллельный ( DATA и CL идут и к 595, и к ЛМ, а сигналом CE выбирается в какую микросхему будет записано управляющее слово. В этом случае посылка сигнала идёт раздельно: сначала 24 бита для ЛМ, затем 8 бит для регистра 595). Рисунки во вложении. Вот этими 8-ю битами и в первом, и во втором случае нужно иметь возможность управлять, т. е. сдвигать регистр вверх-вниз. В 8-ми битовый регистр влезет до заполнения 255 единичек (в десятичной системе). При заполнении всего регистра (на входе: 11111111): в битах для ЛМ должен увеличится на шаг StepNet (словно нажали кнопку ШАГ) переменная RF (из оригинала программы), а регистр 595 - обнулиться и, соответственно, при движении в обратную сторону, при достижении на входе: 00000000 - RF уменьшится на шаг StepNet, а регистр заполнится. На регистре собран ЦАП, который путём увода частоты ( на 1,2 - 1,4 кГц) опорного кварцевого генератора, обеспечит нам мелкий шаг перестройки частоты на выходе синтезатора. Если, что не понятно, спрашивайте. | |
|
| |
|
|
|
| То есть, в одной посылке, за теми 24 битам которые мы засылаем сейчас,
нужно слать еще 8 бит (от 00000000 до 11111111)
1. с "кувыреками" как в оригинале
или
2. без "кувыреков".?
Сначала шлется младший бит, за ним более старшие? | |
|
| |
|
|
|
| с кувыреками
сначала старший
мысль такая - пока оставить все как есть
просто надо немного дописать
во вложении есть рисунок 0001.jpg на него и ориентироваться
только сигнал брать с 2 3 4 5 ног lpt порта
'CE1 (pin3 LM7001) > D0 (pin2 LPT)
'Data (pin5 LM7001 pin14 595) > D1 (pin3 LPT)
'CL (pin4 LM7001 pin 11 595) > D2 (pin4 LPT)
'CE2 (pin 12 595) > D3 (pin5 LPT)
далее после того как отработает код алекса
нужно закинуть код для 595 для этого на ce1 подать ноль (запретить запись в регистр) а на се2 подать 1
добавить примерно такой блок
Dim CLk As String
Dim signaltxt As String
Dim signalinteger As Integer
Dim i As Integer
Dim fgh As Integer
fgh = 0
CLk = "1"
Out &H378, 0
For i = 1 To 16
If CLk = "0" Then 'устраиваем кувыркашки
CLk = "1"
Else
CLk = "0"
End If
If i / 2 - Int(i / 2) > 0 Then fgh = fgh + 1
signaltxt = "1" & CLk & asd(fgh) 'собираем сигнал
Select Case signaltxt 'ищем числовой аналог
Case "100": signalinteger = 8
Case "101": signalinteger = 10
Case "110": signalinteger = 12
Case "111": signalinteger = 14
End Select
Out &H378, signalinteger 'выпихиваем число в порт
'Call Sleep(1) 'пауза 1 миллисекунда
Next i | |
|
| |
|
|
|
| Господа, ну вам виднее. Я тут туго соображаю. Вот только сейчас до меня дошло, что кувыркашки - это типа тактовой частоты.
Пытался сделать опрос 889 порта, как ты, snipe, посоветовал. Отдельно всё работает. А вот всунуть этот кусочек в прогу основную не получается. Она просто виснет.
Вот текст:
Private Declare Function Inp Lib "C:\WINDOWS\system32\inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then RF = RF + StepNet
Call To_TRX
Это типа внешних кнопок ШАГ. Значение переменной statusint = 95 - это 12 нога LPT на земле.
Что не так сделал? | |
|
| |
|
|
|
| Пишем в порт &H378(888), а считываем с 889.
Это ошибочка или так и надо? | |
|
| |
|
30 Кб. |
|
| Нет, ошибки нет. Всё правильно. Порт 889 свободный, никому не мешает. Вот на него и хочется внешние кнопки повесить. Пробовал в разные места в проге всовывать этот кусочек, но успеха не поимел. То виснет, то просто не обращает внимание. Метод научного тыка не прокатил.
Во вложении - немного юмора.
Завтра я на работе, на сутках, общаться смогу по инету, а вот аппаратно проверить нет. | |
|
| |
|
|
|
| там между кнопочкой и разъемом наверное что-то типа триггера поставить надо т.е. нажали кнопочку триггер встал в нужное состояние далее опросили порт 889 считали инфу и через 890 порт скинули состояние триггера до следующего нажатия кнопочки | |
|
| |
|
|
|
| Доброе утро.
Да, нет. Триггер нафиг не нужен. Если постоянно будет опрашивать 889 порт, то нажатие кнопки комп не пропустит. Оно всё-таки относительно продолжительное. Прога же постоянно отслеживает изменение переменных. Куда-нибудь туда и всунуть опрос 889 порта и комп поймёт, что замкнуты нужные контакты в порту и выдаст команду на увеличение-уменьшение шага. | |
|
| |
|
|
|
| все нормально
на lpt разъем выходит 3 порта 888 889 890
888 и 890 служат для ввода\вывода т.е. к ним можно обратиться inp\out
889 - служит только на ввод инфы
по распайке
порт 888 - 2-9 контакты разъема (слово 8 бит)
порт 889 - 10-13,15 контакты разъема (старший - контакт 15 за остальные 4 бита в следующей последовательности контакты 13, 12, 10, 11)
порт 890- 1, 14,16,17 контакты (слово 8 бит однако используются только 4 младших бита)
контакты 18-25 - земля | |
|
| |
|
|
|
| Так, всё-таки, в каком месте программы воткнуть мне этот кусочек:
Private Declare Function Inp Lib "C:\WINDOWS\system32\inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then RF = RF + StepNet
Call To_TRX
Что-то ошибку то и дело выдаёт. | |
|
| |
|
|
|
| скорее всего так
у формы есть событие таймер
вот в процедуру и запихать это
выставить интервал таймера в милисекундах
и переделать немного код
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then
RF = RF + StepNet
Call To_TRX
end if | |
|
| |
|
|
|
| Слушай, snipe, у нас с тобой получается беседа англичанина с немцем. Слова похожие, а смысл разный. Ты не забывай, что я немного не в теме. Где этот таймер? У меня вообще программа открывается в Access, а потом коды читаю уже в VB. В нём, в меню HELP читаю, что версия 6.3, но сам VB какой-то обрезанный. В меню File нет преобразования в ехе-файл, на панеле инструментов тоже половины значков нет (в том числе и timer). Это я сравниваю с VB5 и VB6portable, которые у меня есть.
Так, что, извиняй, давай пальцем тыкай. | |
|
| |
|
|
|
| извините
я думал Вы знаете | |
|
| |
|
|
|
| Подскажите, куда мне поместить этот опрос? Два дня пытаюсь в разные части программы вколотить эти строчки. Если в форму LM700x, то не нравится ВБ обращение к длл. Если в LPT, то переменные не находит. Вот, блин, эпидерсия какая. help me. | |
|
| |
|
|
|
| таймер он на панеле контролов(элементов управления) лежит - где кнопки берём, поля, Labels и т.д.
=====================
Положить этот таймер на форму, которая всё время открыт и видна.
в свойствах таймера Interval написать 10 - 10000 - экспериментально
Кликнуть по нему пару раз
Private Sub Timer1_Timer()
'пересчёт нужного
----------
поместить этот опрос
-------------------
End Sub
|
| |
|
| |
|
|
|
| Так у меня в VB Toolbox не активна. Файл, которым я стартую, имеет расширение .mdb. Открывается Access в нём, при нажатии на Вид, открывается форма (на панеле инструментов Timer нет). Если нажать кнопку Программа, то открывается VB 6.3, но там Toolbox не активен. И чё делать? | |
|
| |
|
|
|
| Думаю............ | |
|
| |
|
|
|
| Можно зафигачить на событие - Load (формы)
call функция Бесконечный цикл
Бесконечный цикл()
Do
функция этот опрос ()
функция опрос клавы ()
Loop
end | |
|
| |
|
64 Кб. |
|
| Бр-р-р. А нафига бесконечный цикл? Прога и так постоянно выполняется. Я сужу по кнопкам 48 и 49. Значит прога циклически через них проходит. Вот здесь бы где-то (или до, или после кнопочек) и добавить опрос 889 порта. В голове у меня уже каша. Где на форме Form_700x разместить эту строку:
Private Declare Function Inp Lib "C:\WINDOWS\system32\inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Без неё проблема с Inp, а с ней - вообще останавливается, предлагает макрос создать. Третий день на месте топчусь. | |
|
| |
|
|
|
| эту строку на самом самом верху
над всеми строками
выше только строка, если таковая имеется (Option Explicit) как то так | |
|
| |
|
|
|
| Это я знаю, что её обычно там помещают, но если я её прописываю в Form_LM700x, то комп предлагает сразу сотворить макрос. Почему?
Как между собой соединить переменные, находящиеся в разных модулях? То бишь, в одном модуле у меня определена переменная, как мне с ней работать в другом модуле? | |
|
| |
|
|
|
| вместо Private
пиши Public - типа глобальная общедоступная..общественная.....
Public GLB_PATCH_Windows As String ' путь к Windows
Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long' перемещение формы за любую часть | |
|
| |
|
57 Кб. |
|
| Так, ЧАС, давай мух от котлет отделим. Если я меняю слово приват на паблик, то получается => см. вложение. Одновременно с выдачей сообщения выделено инверсией номер порта 889 в коде.
А это:
Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long' перемещение формы за любую часть
|
к чему относится? | |
|
| |
|
|
|
| это пример..... просто
====================
а ты засунь это ни в форму, а в отдельный модуль
вот тада мухи от котлет будут отдельно.......... | |
|
| |
|
|
|
| Засунуть всё или первые две строчки. А остальное в форму?
Option Explicit
Public Declare Function Inp Lib "C:\WINDOWS\system32\inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then RF = RF + StepNet
Call To_TRX
End If
|
| |
|
| |
|
|
|
| Option Explicit
Public Declare Function Inp Lib "C:\WINDOWS\system32\inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
это в модуль | |
|
| |
|
|
|
|
а это где нибудь в Load form | |
|
| |
|
|
|
|
statusint = Inp(889)
If statusint = 95 Then RF = RF + StepNet
Call To_TRX
End If
|
а это куда нить - где ты говоришь прога всё время шуршит | |
|
| |
|
|
|
| хотя нужно в модуль тоже
Public statusint As Variant
=============================
извини башка не фурычит ваще - пиду спать.............. | |
|
| |
|
|
|
| Да, всё ошибок нет, но и желаемого результата тоже. Не увеличивает прога шаг. Ладно завтра посмотрим. | |
|
| |
|
|
|
| rf как и stepnet это не переменные
это поля на форме и обращение к ним должно быть соответствующее
или me!rf me!stepnet
или forms![имя формы]![rf] forms![имя формы]![stepnet]
добраться до события таймер
открываете форму в режиме конструктора
наводите курсор на любой контрол (поле например)
давите правую кнопку мыши выбираете свойство
появится панель свойств этого контрола
чуть выше вкладок будет поле со списком
нужно выбрать форма
на вкладке свойства
найдите интервал таймера и установите время в миллисекундах
тут же найдите таймер установите курсор в строку
справа появится две кнопки
первая это поле со списком
кликаем по ней выбираем процедура обработки события
вторая с изображением трех точек кликаем по ней
открывается редактор VBA
вставляем код
перемещаемся в самый верх модуля
видим надпись
Option Compare Database
под нее вставляем декларирование функции из библиотеки inpout32.dll | |
|
| |
|
|
|
| чуть выше
на вкладке события а не свойства
теперь разберем ваш код
и то что я вам исправлял
в вашем случае
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then RF = RF + StepNet
Call To_TRX
Call To_TRX находится снаружи условия
значит при любом значении statusint эта функция будет выполняться
в моем случае
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then
RF = RF + StepNet
Call To_TRX
end if
вызов функции находится внутри условия соответственно функция будет выполняться только при наступлении события statusint = 95 - а это между прочим время
но если быть правильным то должно быть вроде вот так
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then
me!RF = me!RF + me!StepNet
Call To_TRX
end if | |
|
| |
|
61 Кб. |
|
| у меня библиотеки нет - не проверял
вот попробуй => | |
|
| |
|
|
|
| Во, уже написАли полно. Сейчас прочту, а пока хочу обрадовать, господа, всё заработало, но только, если нажимать кнопку ШАГ (получается, что вперёд идёт с удвоенным шагом, а назад - стоит на месте). Склоняюсь к мысле, что придётся вводить принудительный цикл для опроса порта 889. Нужно, чтобы постоянно порт опрашивался. Я думал, что если кнопки на форме реагируют без проблем, то прога постоянно по ним елозит. Как определить в каком месте находится выполнение кода проги, как её в этом месте остановить? Что она делает, если нет внешних воздействий? | |
|
| |
|
|
|
| с таймером вот так
запускается форма
и через определенные промежутки времени (определяемые интервалом таймера)
отрабатывает код написанный в таймере
т.е. опрашивается порт 889
посмотрите последний пример | |
|
| |
|
|
|
| Так, таймер запустил, но он бежит при нажатии, а надо, что был единичный импульс на изменение шага. По идее, поставить секунд 5, то бишь 5000 миллисекунд и, наверное, будет ничего. Нет, нифига, 5 секунд не пойдёт. Он после нажатия ждёт 5 сек., а надо, чтобы типа триггера работал. Нажал - шаг увеличился. Уменьшишь время - будешь частоту ловить, а это не есть зер гут. | |
|
| |
|
62 Кб. |
|
| а вот так
=> | |
|
| |
|
|
|
| Что-то программа не запускается. Я идею понял: воспользоваться булями, да или нет. Должно сработать. Вообще-то, поставил 1 секунду и вполне нормально. Даже появляется дополнительная фишка: быстрое передвижение по частоте, не надо постоянно дрюкать по кнопке. Придётся 4 кнопки ставить: пошагово - вверх-вниз и ускоренно. Да, мужики, Вам респект и уважуха. Скачал, кстати, по ходу пьесы книжечку по VB. Довольно тольково написано. | |
|
| |
|
|
|
| зачем 4
можно 2
кратковременное нажатие и удержание
завтра (точнее сегодня) напишу надо перед работой хоть часок поспать | |
|
| |
|
|
|
| Да, так здорово будет. Пока у меня так всё работает. ОК, спокойных снов. Тоже надо, наверное, в люлю. К тёплой жене под бок. Сам сегодня с суток и ещё не спал. Я, вообще-то, сова по натуре.
PS.
Слушай, пока любовался, как частота туда-сюда бегает, заметил, что комп с периодом, как в проге, винтом крутит (щелкает так: тык-тык, тык-тык и светодиодик моргает). Программу выключаю, вроде по-другому щелкать начинает или мне так кажется? | |
|
| |
|
|
|
| чета до меня только сейчас дошло
имеем
три провода (три младших разряда) в порту 888
в которых за 48 полупериодов (шагов цикла) нужно выкинуть слово из 24 бит
т.е.
все время работы цикла на одном проводе удерживаем 1
на другом по нечетным тактам устанавливаем дату (данные)
за первый полупериод тактовую частоту переводим с 0 в 1
во второй полупериод тактовую частоту переводим с 1 в 0
для этого необходимо передавать в порт десятичные 1 3 5 7
а если использовать два порта 888 и 890
например в порт 888 просто передавать на один провод данные
а в порт 890 передавать тактовую частоту и разрешение на изменение
тогда в момент изменения инфы в 890 будет передаваться или 1 или 3
все упростится до следующего
cl=1
for i=1 to 24
Out 888, data ' или 0 или 1
for j=1 to 2
if cl=1 then
cl=3
else
cl=1
end if
Out 890, cl
Call Sleep(2)
next j
next i
Out 888, 0
Out 890, 0 | |
|
| |
|
63 Кб. |
|
| вот =>
вроде и нажатие и удержание | |
|
| |
|
|
|
| ни ХР себе в 5 утра!!!!!!!!!!!!! | |
|
| |
|
|
|
| час - ты опять забыл что я на 4 часа раньше москвы живу т.е. у нас было 09.28 | |
|
| |
|
|
|
| Всем, здравствуйте.
Так, всё работает.Частота и вверх, и вниз и шагает, и бегает. Единственная хотелка - это, чтобы между шагами и бегом была пауза. То бишь, нажал кнопочку - частота на шаг скаканула, ещё раз нажал - опять на шаг, но, если нажал и держишь кнопку, то частота не сразу начинает бежать, а через хотя бы 1 секунду. Наверное, delay вставить надо между ними. | |
|
| |
|
|
|
| я же вам сделал
ну замените цифирку 7 на большую | |
|
| |
|
|
|
| Это я сразу сделал. Ставил даже 10000 - не помогло. Попробуй сам. | |
|
| |
|
|
128 Кб. |
|
| Лови. | |
|
| |
|
|
|
|
чего творим - то
в вашем случае хоть мульярд ставьте толку не будет
вот
Private Sub Form_Timer()
Dim statusint As Variant
statusint = Inp(889)
If statusint = 95 Then
If takt < 7 Then 'задержка 7*[интервал таймера]
If jkl = False Then
Me!RF = Me!RF + Me!StepNet
Call To_TRX
jkl = True
End If
takt = takt + 1
Else
Me!RF = Me!RF + Me!StepNet
Call To_TRX
takt = takt + 1
End If
Else
If statusint = 255 Then
If takt < 7 Then 'задержка 7*[интервал таймера]
If jkl = False Then
Me!RF = Me!RF - Me!StepNet
Call To_TRX
jkl = True
End If
takt = takt + 1
Else
Me!RF = Me!RF - Me!StepNet
Call To_TRX
takt = takt + 1
End If
Else
jkl = False
takt = 0
End If
End If
End Sub | |
|
| |
|
|
|
| А-а, понятно, я постоянно счётчик takt сбрасывал в ноль. Вот тупой. Да, сейчас всё ОК. Благодарю.
Ещё не надоело со мной возиться? Это я о тех злополучных 8 битах для 595 регистра. | |
|
| |
|
|
|
| Нифига се Вы наваяли..........123 сообщения - вот это мучения!!!!!!!!!
крута!!!!
======================
Задержка -
не только женщин раздражает
она во всех делах мешает
Замешкался, там, задержался
И без подштанников остался
А то бывает поспешил
Не с той по пьяне согрешил
И в результате - там задержка
Ну типа сексная издержка
А в Вашем случае она
Видать единственно верна!!!!! | |
|
| |
|
|
|
| Ну, положим, львиная доля сообщений - это Алекс постарался, а мы так, по-мелочи. Главное - результат достигнут. | |
|
| |