Работа с ds1820 через ком порт

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
DDF
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 04.10.2005 (Вт) 0:08
Откуда: Волжский

Работа с ds1820 через ком порт

Сообщение DDF » 04.10.2005 (Вт) 0:42

Здравтсвуйте. Подскажите пожалуйста, как решить проблему общения с датчиком по сети MICROLAN. Датчик DS1820. Команды в ФАКе написаны, но я не знаю что с ними делать. Может такое на VB написать вовсе нельзя? Тогда где про это искать и на чем такое пишут? Может есть какие ссылочки или примеры, скажите пожалуйста.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.10.2005 (Вт) 0:55

Дублировать нехорошо.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 06.10.2005 (Чт) 22:03

Я эту прогу писал для pic-контролера
но , я думаю, её не сложно перелажить на VB
1. протокол общения с датчиком температуры DS1820
Код: Выделить всё
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Подпрограмма работы с датчиком температуры DS1820
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Подпрограмма формирует протокол общения с датчиком температуры DS1820 и сохранением
; результата / значений температуры в регистры TLSB,  TMSB

DatT:

CALL       Reset_DS          ;Вызов процедуры инициализации
BTFSS      ER, DS1   ;Если произошла ошибка то выходим из п/п  для передачи

RETURN         ;Байтов с кодом ошибки

MOVLW     SKIP_ROM     ; Команда "пропуск ПЗУ"
CALL       Write      ; Вызов процедуры передачи байта в DS1820
MOVLW      CONVERT_T   ;команда начала преобразования температуры и                         ; и занесения   значения в СПЗУ DS1820
CALL       Write      ; Вызов процедуры передачи байта в DS1820
CALL       Delay500   ; ждем завершения преобразования 500мкс
CALL       Reset_DS          ;Вызов процедуры инициализации
BTFSS      ER, DS1   ;Если произошла ошибка то выходим из п/п  для передачи

RETURN         ;Байтов с кодом ошибки

MOVLW      SKIP_ROM      ; Команда "пропуск ПЗУ"
CALL       Write      ; Вызов процедуры передачи байта в DS1820
MOVLW      READ_D           ;команда чтения СПЗУ DS1820
CALL       Write      ; Вызов процедуры передачи байта в DS1820
CALL       Read               ; Вызов процедуры чтения данных из DS1820
MOVWF   TLSB               ;сохраним младший байт значения температуры
CALL       Read               ; Вызов процедуры чтения данных из DS1820
MOVWF   TMSB      ; сохраним старший байт значения температуры
CALL       Reset_DS          ;Остановим передачу данных


RETURN          ;выходим из подпрограммы.


2 инициализация этого датчика
Код: Выделить всё
; Происходит отсылка  импульса сброса и получения импульса присутствия от датчика температуры DS1820
;При отсутствии импульса присутствия формируется код " ошибка "

Reset_DS:

BSF           STATUS,RP0   ; выбрать банк1
MOVLW      B'00000000'
MOVWF      TRISA     ;Настройка 1-Wire на вывод порта RA0
BCF           STATUS, RP0   ; выбрать банк0
BCF           PORTML , DS1; Настройка порт RA0 на вывод импульс уровня 0
           MOVLW      H '64'      ; задержка 500мкс
CALL       Delay500   ; вызов подпрограммы задержки 500мкс
BSF       PORTML , DS1; порт RA0 импульс уровня 1
           MOVLW      H '64'      ; задержка 500мкс
CALL       Delay500   ; вызов подпрограммы задержки 500мкс
BSF           STATUS,RP0   ; выбрать банк1
MOVLW      B'00000001'
MOVWF      TRISA         ;Настройка RA0 на ввод
BCF           STATUS,RP0   ; выбрать банк0
BTFSC    PORTML , DS1;Проверить импульс присутствия
GOTO       ERROR   ;Нет то идти на ERROR
           MOVLW      H '32'      ; задержка 250мкс
CALL       Delay500   ; вызов подпрограммы задержки 53мкс


RETURN          ;выходим из подпрограммы.


3. Подпрограмма передачи байта
ВАЖНО ! Соблюдай временные интервалы! (задержки ) +/- 10мкс!
Код: Выделить всё
Подпрограмма отправляет  на шину 1-wire байт из регистра TEMP

Write:

MOVWF      TEMP      ; Байт для вывода сохраняем в temp
BSF           STATUS,RP0   ; выбрать банк1
MOVLW      B'00000000'
MOVWF      TRISA              ;RA0 - выход
BCF           STATUS,RP0   ; выбрать банк 0
MOVLW      8      ; Будем передавать 8 бит данных
MOVWF      COUNT   ; начиная с младшего

WR0:

BCF          STATUS,C       ;Очистить флаг переноса С
BCF          PORTA,DS1    ; Сбросить линию
CALL       DELAY10           ;ждем  15 мкс
RRF          TEMP,1             ;читаем бит из передоваемого байта
BTFSC      STATUS,C        ; Бит - 1? Если нет то ждем  53 мкс
BSF          PORTA,DS1      ;если да то на линию выставляем 1 (RA0 – 1)
CALL       Delay50            ; ждем  53 мкс
BSF          PORTA,DS1      ; линию возвращаем в 1 состояние
DECFSZ     COUNT,1          ;повторим для 8 бит
GOTO       WR0
BSF         STATUS,RP0    ; выбрать банк 1
MOVLW      B'00000001'
MOVWF      TRISA              ;RA0 настройка на вход
BCF           STATUS,RP0   ; выбрать банк 0


RETURN          ;выходим из подпрограммы.


4.Подпрограмма приёма байта
Код: Выделить всё
; Подпрограмма считывает  с шины 1-wire один байт и сохраняет в регистр TEMP

READ:   

   CLRF       TEMP      ;Очистить TEMP
           MOVLW      8      ; Будем принимать 8 бит данных
           MOVWF      COUNT   ; начиная с младшего
           BSF           PORTA,DS1   ; RA0 выставить в 1

RD0:

        BSF           STATUS,RP0    ; выбрать банк 1
           MOVLW      B'00000000'
           MOVWF      TRISA             ;  RA0 - выход
           BCF           STATUS, RP0   ;  выбрать банк 0
           BCF           PORTML,DS1   ;0 Сформировать импульс запроса передачи бита…
           NOP                           ;1 Длительность 6 мкс
           NOP                           ;2
           BSF           STATUS, RP0   ;3 выбрать банк 1
           MOVLW      B'00000001'      ;4
           MOVWF      TRISA              ;5 RA0 настройка на вход
           BCF           STATUS, RP0   ;6 выбрать банк 0
           BSF           PORTML, DS1   ;7
           NOP                           ;8
           NOP                           ;9
           NOP                           ;10
           NOP                           ;11
           NOP                           ;12
           BCF           STATUS, C   ;13
           BTFSC    PORTML, DS1 ;14  …через 14 мкс после начала импульса запроса
;считать бит
           BSF           STATUS,C   
           RRF           TEMP,1   ;Сохранить в TEMP
           CALL       DELAY50
           DECFSZ     COUNT,1           ;Повторить для 8 бит
           GOTO       RD0
           BSF           STATUS,RP0     ; Выбрать банк 1
           MOVLW      B'00000001'
           MOVWF      TRISA              ;RA0 вход
           BCF           STATUS,RP0     ; Выбрать банк 0
           MOVF       TEMP,0   ;Переслать в W


RETURN          ;выходим из подпрограммы

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.10.2005 (Чт) 22:24

Бяка писал(а):но , я думаю, её не сложно перелажить на VB

Перелажить её действительно несложно. Не более того...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Samrat
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 11.08.2004 (Ср) 10:32

Спокойно!!!

Сообщение Samrat » 07.10.2005 (Пт) 4:11

Тут будет правильным разделить проблему на 2. Поскольку пытаться адаптировать COMM порт под микролан не совсем правильно лучше написать устройство "мост" ком-микролан. Таким образом решить проблему передачи из микролан в контроллер и потом из контроллера в компьютер. Вообще с такими кодами лучше обращаться на kazus.ru или microchip.ru. или мне по почте.

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 08.10.2005 (Сб) 1:23

А на х..рена СоМ порт ? А ЛПТ не пойдет?

Samrat
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 11.08.2004 (Ср) 10:32

Сообщение Samrat » 09.10.2005 (Вс) 13:17

КОнечно можно, и даже попроще на ЛПТ порт, просто такой вариант проги хорошо будет работать только под Вин98.

Samrat
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 11.08.2004 (Ср) 10:32

Сообщение Samrat » 10.10.2005 (Пн) 3:54

Просто общедоступный драйвер ЛПТ, из тех что я добыл, не работал под ХР. да и скорость у ЛПТ низкая, длинные линии делать не желательно (длиннее 1метра)

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 10.10.2005 (Пн) 21:53

а для DS1820 разве нужна большая скорость?
а длина линии MICROLAN не более 30 метров и для ЛыПТ вполне подходит ( из за особенности её протокола :roll: )

Samrat
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 11.08.2004 (Ср) 10:32

Сообщение Samrat » 11.10.2005 (Вт) 5:45

И всё таки я продолжаю настаивать на своём варианте с "мостом". Хотя и с Вашими доводами отчасти согласен.

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 11.10.2005 (Вт) 23:38

НУ дело Ваше!
у меня гтето была прога работы с DS1820 через СОМ + схема подключения
НО нет исходников :cry:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList