Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
}{acker писал(а):
пределы температур датчика от -55 до +125
Это я просто в файле DS18B20_.doc прочёл
Цитата:
• Измеряет температуру от -55°C до +100°C (от -67°F до +212°F)
Потому и написал 100 °C.
}{acker писал(а):
Сброс присутствие работает датчик обнаруживает.
Если выдаёт сообщение "Датчик на связи!", значит достучаться до датчика удалось (такое сообщение программа выдаёт только в том случае, если после посылки датчику байта F0h тот отвечает не равным F0h байтом. Хоть это то радует.
}{acker писал(а):
но при чтении температуры постоянно выводит -86
Мда, холодновато. Если выдаёт -86, значит датчик передаёт обратно (или вообще на неё не реагирует) код той команды, которую он получил с СОМ-порта ПК (код команды "Чтение температуры" равный AAh и есть -86 в дополнительном коде).
Попробую переделать и реализовать команды Read ROM и Match ROM. Сегодня-завтра выложу. Только непонятно как по полученному 8-битному значению CRC проверить правильность принятой информации (сам алгоритм не ясен).
P. S. А команд с кодами EEh, AAh, 22h датчик не поддерживает?
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
}{acker писал(а):
А ты скорость менял после сброса все остальные команды делаются на скорости 115200.
Да, конечно. Если скорости приемника и передатчика будут разными, то байты будут неслабо искажаться (я помню даже такой "эксперимент" ставил). Сейчас в программе немного переделал со скоростями (чтобы уж точно не ошибиться с правильным выставлением скорости передачи).
Shader 3.0 писал(а):
Попробую переделать и реализовать команды Read ROM и Match ROM.
В общем с Match ROM не совсем понял (какой именно 64-битный адрес мастер должен отправить, или это паспортные данные датчика?), а вот Read ROM попробовал реализовать.
Исходник тут http://cp.people.overclockers.ru/cgi-bi ... _v.0.2.rar Сначала нажми кнопку "Команда сброс/присутствие". Потом "Read ROM" и подожди пока в едитах "Код микросхемы", "Серийный номер" и "CRC" высвятяться полученные данные (хотя если будет работать, то думаю это произойдёт мгновенно). Потом жми "Запуск преобразования" и "Чтение температуры" (только всё в такой последовательности). О результатах тогда отпишись. Если в едите "Код микросхемы" будет что-то отличное от 10h, то я сдаюсь (больше ничего предложить не могу).
Member
Статус: Не в сети Регистрация: 13.02.2004 Откуда: Чехия
Доброго дня всем. Подскажите, из за чего может возникать ошибка EInOutError I/O error 6.
при вкюченной директиве компилятора {$I+}. При {$I-} программа виснет.
_________________ Лучше иметь пузо от пива, чем горб от работы.
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
George J DRKB 3.0 по этому вопросу вот чего говорит
Цитата:
Если действует директива {$I+}, то при возвращении процедурой ввода-вывода ненулевого значения генерируется исключение EInOutError и в его свойство errorcode заносится код ошибки. Таким образом, при действующей директиве {$I+} операции ввода-вывода располагаются в блоке try...except, имеющем обработчик исключения EInOutError. Если такого блока нет, то обработка производится методом TApplication.HandleException.
Member
Статус: Не в сети Регистрация: 13.02.2004 Откуда: Чехия
что-то подобное я нашел в Интернете. Мне бы узнать что это за ошибка N6.
Типа что конкретно происходит (нет доступа или нет файла)... Добавлено спустя 3 минуты, 1 секунду Интересно то что если програму запускать через ярлык то она работает. А если запускать из другой програмы (есть менюшка в которой один из пунктов моя прога) то вываливается с этой ошибкой (надеюсь понятно написал)
_________________ Лучше иметь пузо от пива, чем горб от работы.
Member
Статус: Не в сети Регистрация: 13.02.2004 Откуда: Чехия
Shader 3.0 Спасибо за попытку помочь. Уже второй день не могу найти решение.
Кстати ошибка появилась после помещения на форму объекта DirectoryOutline1.
Может в этом дело? Еще непонятно почему из среды Делфи програма работает.
_________________ Лучше иметь пузо от пива, чем горб от работы.
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Shader 3.0 Не правда купи се датчик а то так без датчика у тя неполучится сделать программу
Shader 3.0 писал(а):
В общем с Match ROM не совсем понял (какой именно 64-битный адрес мастер должен отправить, или это паспортные данные датчика?)
64 битный адрес это - 8-битный код семейства (10h), затем 48-битный серийный номер, а затем 8-битный CRC
Чтоб узнать 64-битный адрес нужно использовать команду Read ROM [33h] но эт возможно тока с одним датчиком на шине. Если на шине много датчиков то надо использовать команду Search ROM [F0h], с помощью этой команды можно определить все номера датчиков.
И в программе чтобы обращатся к датчику нада выполнить команды
1. Сброс присутствие
2. Match ROM [55h] и передать 64 битный адрес датчика или если один датчик то выполнить команду Skip ROM [CCh]
Так вот у меня висит один датчик ты команду Skip ROM [CCh] делал?
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
to all Есть проблема. Нужно написать программу, которая могла бы писать с USB-камеры видео (с этим разобрался, AVI capture из пакета JediVCL) и траслировать это клиентам по сети (по IP). То есть сервер всего этого дела практически написан, ну кроме посылки по сети пакетов с видео. Ну и так же клиенты вообще не написаны, которые могли бы это как-либо показывать.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 16.08.2006 Откуда: Пермь
2 }{acker & Shader 3.0 Есть подозрение, что то что вы делаете, это не совсем то Как я понял, из тучи исходников на Си, байты надо передавать побитно. Тоесть, датчик всегда работает на скорости 9600, но для реализации так называемых time slot'ов, надо переключаться на 115200, а на такой скорости, время приёма/передачи одно байта, равно(или примерно равно) времени приёма/передачи одно бита на 9600. Передаваемый байт надо разложить на биты и 1 передавать как FFh, а 0 как 00h, принимать байт тоже побитно, потом складывать. И ещё, после комманды Convert T[44h] надо ждать 750мс(для 12bit) и только потом читать TL и TH. Если используется паразитное питания, то во время выполнения Convert T надо слать FFы для питания датчика, иначе он просто отрубится и ничего не выдаст.
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
poo-shock писал(а):
Передаваемый байт надо разложить на биты и 1 передавать как FFh, а 0 как 00h, принимать байт тоже побитно, потом складывать.
Ну теперь всё понятно. Только непонятно каким битом вперёд нужно отправлять данные? Старшим или младшим? Т. е., если отправляем команду Skip ROM (CCh=11001100b), то формировать байт для отправки в буфер драйвера СОМ-порта нужно так:
Какие соображения?
З. Ы. То же касается чтения: первый принятый бит (т.е. на самом деле - байт FFh или 00h) - есть младший или старший бит принимаемого байта?
Member
Статус: Не в сети Регистрация: 16.08.2006 Откуда: Пермь
Shader 3.0 писал(а):
непонятно каким битом вперёд нужно отправлять данные? Старшим или младшим?
вот это я пока не понял, даташит по этому поводу молчит. На Си функция записи и чтения байта выглядит так:
Код:
//caveat: we return first bit received in 1<<0, second in 1<<1.. //no matter how many bits are asked for. int TouchBits(unsigned char outch, int bits = 8) { //we write a *byte* so the device can see a *bit* unsigned char mask = 01; unsigned char inv = 0; for (int i = 0; i < bits; ++i) { unsigned char bytev = (outch & mask) ? 0xff : 0x00; if (write((char*)&bytev, 1) != 1) return -1; if (read((char*)&bytev, 1) != 1) return -2; inv |= (bytev & 0x01) ? mask : 0; mask <<= 1; } return inv; }
тут есть цикл, в нём запись и чтение выполняются за один проход, так же видно какие-то манипуляции с байтами и масками, вот это мне не совсем понятно, вернее совсем не понятно операторы "?" и ":" первый раз вижу
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
poo-shock Я синтаксис Си вообще не знаю, так что тут тоже ничего сказать не могу.
Но всё-таки где-то я уже встречал передачу пакетов данных и насколько помню обычно всегда передают вперёд именно младшим байтом/битом. Вот взял и заново переписал программу. }{acker, проверь, может теперь заработает
http://cp.people.overclockers.ru/cgi-bi ... _v.0.4.rar Только вот Read ROM может работать не совсем корректно (всё из-за той же путанницы со старшим/младшим битом). Ну это, если что, несложно будет исправить (если точно известно, что код у микросхемы = 10h).
To All Народ, вознит простенький вопрос: как сделать так, чтобы форму можно было таскать мышкой не только за заголовок, но и за какой-нибудь компонент, расположенный на форме (например Image)? Раньше помнил, но теперь что-то подзабыл. Какие там свойства формы и компонента надо для этого изменить?
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
poo-shock писал(а):
операторы "?" и ":" первый раз вижу
это не операторы, это одна логическая операция. Конструкция "y = a ? b : c" будет означать, что если "a" верно (true), то "y" примет значение "b", иначе "y" примет значение "c". Правда эта тема уже далека от программирования на Delphi...
Member
Статус: Не в сети Регистрация: 01.07.2006 Откуда: Челябинск
Shader 3.0 Проще на событие движения мыши проверять нажата ли кнопка на каком то из компонентов или на форме - в общем за чо двигать можно и прибавлять или отнимать от координат положения формы то количество на сколько изменились координаты позицыы курсора
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения