MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Вопрос по "0" на 1-wire

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Вопрос по "0" на 1-wire
Автор: AleXX ()
Дата:   21/05/2004 11:19

Может подскажет кто, что неправильно
Не могу установить ноль на шине. Делаю так

#define DQ_1wire		PORTB,7

;Инициализация датчиков и сброс шины 1-wire:
Reset_1Wire
		call	DQ_low	; Сбрасываем линию на около 600 мкс.
		call	Delay_512_uS
		call	DQ_hi	; Пропускаем импульс присутствия.
		call	Delay_512_uS
		return

;установка уровней на шине 1-Wire:
;
DQ_hi	BANK1
	bsf	DQ_1wire	;переключаем порт на вход, "1" на шине
	BANK0		;обеспечивается подтягивающим резистором
	return
;
DQ_low	bcf	DQ_1wire	;записываем в защёлку "0"
	BANK1
	bcf	DQ_1wire	;переключаем порт на выход
	BANK0
	return





 
 А на хрена ты его переводиш на вход ?
Автор: Picmast ()
Дата:   21/05/2004 11:34

А у тебя что с pull_up~ом ?
Попробуй отключить его .

\---------------------------------------------------/
Все-таки лень самый мощный двигатель прогресса.


 
 Re: Вопрос по "0" на 1-wire
Автор: Yura_S ()
Дата:   21/05/2004 11:55

Вообще то насколько я понял, нужно так:

DQ_hi BANK1
bsf TRISB, 7 ;переключаем порт на вход, "1" на шине
BANK0 ;обеспечивается подтягивающим резистором
return
;
DQ_low BANK1
bcf TRISB, 7 ;переключаем порт на выход
BANK0
return

а команду bcf DQ_1wire установить вначале и больше не трогать.


 
 Re: Вопрос по "0" на 1-wire
Автор: AleXX ()
Дата:   21/05/2004 12:05

поначалу всегда держал порт как выход в "1" , сбрасывал в ноль по необходимости и переключал на
вход только в момент чтения состояния шины, порт был RA4. Как-то криво это работало, данные
читались лажово. Решил посмотреть примеры применения - а там сделано именно так: порт всегда на
вход, а в момент, когда нужен ноль - выход с установленным"0". Вроде работе шины это не
противоречит, решил следовать даташиту.
Исключая заморочки с портом А4 (запинают ведь, хоть и не телесис :-), попробовал на порту В - та
же фигня. Чегой-то не догоняю

а пул-ап отключен:
movlw B'10000110'
movwf OPTION_REG


 
 Re: Вопрос по "0" на 1-wire
Автор: Ученый ()
Дата:   21/05/2004 12:10

Скелет программы правильный, но есть вопросы:
1. "0" не появляется вообще?
2. В п/п Delay_512 команда CLRWDT в цикле ожидания есть?
3. Может прерывания какие вклиниваются в п/п Delay_512?

Если не пробьешься - пмши, вышлю рабочий код.


 
 Re: Вопрос по "0" на 1-wire
Автор: AleXX ()
Дата:   21/05/2004 12:18

В том и дело, что вообще
Задержку 512 мкс делаю тупо проверяя бит TMR0, прерывания запрещены полностью:
bcf INTCON,GIE


 
 Re: Вопрос по "0" на 1-wire
Автор: Ученый ()
Дата:   21/05/2004 12:23

Только так и надо делать ("0" - вывод как ВЫХОД и на нем 0, "1" - вывод как ВХОД и 1 делается
через резистор к +5). В противном случае может случиться конфликт между "1" на мощном ВЫХОДЕ
PIC'а и "0" на выходе 1-Wire устройства. Активная "1" может подаеватбся в линию в определенные
моменты времени для подпитки устройств с паразитным питанием.


 
 Re: Вопрос по "0" на 1-wire
Автор: Yura_S ()
Дата:   21/05/2004 12:34

В предыдущем послании я же все объяснил.
Попробую объяснить на пальцах.

Вот Ваш код с моими коментариями

#define DQ_1wire PORTB,7 ;здесь DQ_1wire это фактически ПОРТ
;Инициализация датчиков и сброс шины 1-wire:
Reset_1Wire
call DQ_low ; Сбрасываем линию на около 600 мкс.
call Delay_512_uS
call DQ_hi ; Пропускаем импульс присутствия.
call Delay_512_uS
return

;установка уровней на шине 1-Wire:
;
DQ_hi BANK1
bsf DQ_1wire ;переключаем порт на вход, "1" на шине ;здесь порт
на вход не переключится НИКОГДА (фактически DQ_1wire-это PORTB,7)! Порт
переключается на вход и выход манипуляциями с регистром TRIS!!! (см. мое пред.
сообщение)
BANK0 ;обеспечивается подтягивающим резистором
return
;
DQ_low bcf DQ_1wire ;записываем в защёлку "0"
BANK1
bcf DQ_1wire ;переключаем порт на выход. ;Аналогично порт НИКОГДА
не переключится на выход!
BANK0
return


 
 Re: Вопрос по "0" на 1-wire
Автор: Ученый ()
Дата:   21/05/2004 12:41

Что у тебя с WDT? Если включен (рекомендуется). то во всех долгих циклах его надо сбрасывать
командой CLRWDT.
Попробуй сделать тест-вывод: на какой-нибудь ВЫХОД(Ы) выводи 0/1 в ключевых точках алгоритма.
Так проверишь, работает ли программа вообще, правильно ли отрабатываются времена и т.д.

Если не знаешь, что делать - делай что знаешь.

Применяй метод дихотомии (деления пополам) для локализации ошибок.