и запись DS 1820 ... не работает ... нужна помощь ...

S

seemanta

Guest
Привет,
Я использую следующие программы для чтения / записи с / на датчик температуры DS1820.

Я могу отправить импульс сброса, а также возможность получить наличие импульса.
Однако, при отправке читать блокнот команду 0BEh, это не работает, потому как в таблице, я должен получить значение как 50H.Я только получать FFh что не соответствует действительности.

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

SEND_BYTE и GET_BYTE основные подпрограммы для записи / чтения одного байта из DS1820.Остаются только вспомогательные процедуры.Кроме того, на данный момент, я опуская DELAY подпрограмм.В принципе, я использовал обычные задержки для генерации автобус таймингов.

И да, чуть не забыл упомянуть, I / O P2.5 линия является одной подключен к линии DQ из DS1820.

Код:SEND_BYTE:; данные для отправки И.С. в

MOV R0, # 8

_start: JB ACC.0, SEND_1

LCALL WRITE_0

JMP FWD

SEND_1: LCALL WRITE_1

FWD: Р.

DJNZ R0, _start

RETGET_BYTE:; Считанные данные будут возвращены в

MOV B, # 00H

MOV R0, # 3

MOV R1, # 3

_START2:

LCALL read_data

ANL A, # 20H

НАЗАД: RL

DJNZ R0, НАЗАД

ORL B,

INC R1

MOV A, R1

MOV R0, A; R1 и R0 такие же, сейчас, готов к следующему циклу.

XRL, # 11

JNZ _START2

MOV A, B

RETWRITE_0:

CLR P2.5

LCALL DELAY_65US

SETB P2.5

RETWRITE_1:

CLR P2.5

LCALL DELAY_12US

SETB P2.5

RETRead_data:

CLR P2.5

NOP; около 1US DELAY (1,085 США, если быть точным)

NOP

SETB P2.5, автобус RELEASED СЕЙЧАС

NOP

NOP

MOV A, P2; чтения данных

SETB P2.5; SET BUS Высокий государства вновь

RET
 
Это разновидность трудно понять, что у тебя болит потому, что вы не включили код, который настраивает регистр данные направления.Он также не является очевидным для меня, является ли это ПИК AVR код или код или что-то другое.

В общем, я думаю, ваша проблема в том, что вы не используете порта P2.5 как выход с открытым умов.Для запуска 1-Wire-кода из микроконтроллера, порт ввода / вывода должны быть настроены как открытых умов.Это позволяет либо микроконтроллер ИЛИ 1-Wire, чтобы выдернуть чеку низким.Pin внешне высоким вытащил через 4.7k Ом резистор, который обеспечивает логика "1" государству.Я думаю, что вы работаете в полном цифровых входов / выходов и микроконтроллер вынуждает линии высокого и именно поэтому вы всегда читал "FF".

----- Steve

 
Привет Стив,
Извини.Я использую AT89S52 Micro.Также у меня есть 4.7k сопротивления подтянуть на линию автобус DQ.

Кроме того, я думала, что только порта р0 необходимы внешние подтянуть.Порт P2 уже внутренние UPS тянуть.Значит ли это значит, что я делать не нужно соединить "излишние" подтянуть за линию DQ?В общем, вы видите проблемы с кодом?

привет,
Seemanta

 
Я считаю, что вы читаете данные слишком рано: Вы должны прочитать это близко к 15 нам после падения края.На самом деле, около 12-13us будет в порядке.Таким вставить несколько NOP там в обычной read_data или использовать некоторую задержку код.

Во-вторых, на чтение / запись слотом предполагается 60us минимум (на самом деле 61us), но когда вы читаете байт вы называете read_data очень быстро.Inser некоторая задержка там, чтобы убедиться, read_data вызывается один раз 61us.
К тому же, когда вы пишете 1 к 1820 необходимо сохранить слоты в 61us, чтобы вставить некоторые задержки в WRITE_1 код, например, что вы только начать писать следующий бит по крайней мере 61us позже (поэтому вам потребуется что-то как 50US задержки включено в WRITE_1, после пусть автобус с плавающей точкой).

В-третьих, я не вижу, остальной код, но я надеюсь, что вы отправляете диск командой во-первых, даже если это просто пропустить диска.

 
Привет Seemanta,

Я не очень знакомые с AT89S52.Однако большинство все микроконтроллеры, которые я использовал требуется написать внутренних зарегистрировать переход от режим вывода для ввода режима.Я не считаю, что записи в вашем коде.
Я хотел бы использовать возможности для контроля за 1-проводная линия.Затем с помощью неиспользованного Pin Микроконтроллер для показа сферы.Запишите этот контактный высокой Войдя читать рутины и взглянуть на сферу.Если I / O направления вопроса, то линия не будет когда-нибудь к истинной логике низким.

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

Пальцы порта можно прочитать в любое время.Так как выходы с открытым стоком, вам нужно лишь убедиться, что вы едете порт "высокого", чтобы убедиться, что она работает как входной.Если он вытащил на низком уровне по любым внешним устройством, он будет оставаться на низком уровне, и вы будете читать низким.Если внешние устройства, гонит его высоким, нет проблем, Pullup тащил его высоким, и вы все равно будете читать высоким.

 
Здравствуйте,

Вы только вашей проводки низкого уровня 1-Wire протокол, а верхний уровень может быть неправильным, а также.Вы предшествовать чтение блокнот ROM показывать по команде?Вы получите ответ, если вы попытаетесь читать ROM?

Привет,
Франк

PS: тактовой синхронизации, как представляется, в допустимых пределах, байт читать и писать подпрограммы видимо оперативной.Я думаю, вы также использование значительного "резистора Pullup в строке данных.

 
Привет всем,
Большое спасибо за Ваш ответ!
Я просто понял, что мои работы кода!Да!Я могу получить температура сейчас читаете с кодом Опубликовано в мой первый пост, однако после добавления показывать ROM рутины.

Поэтому я подумал, что это не работает, что я просто пытался прочесть PowerUp значение температуры зарегистрироваться.

В соответствии с данными листа, PowerUp значения 85 ° С.
Теперь я не получаю, что, в результате чего я сделал этот пост.Это подводит меня к следующему запросу.

С текущего кода плюс показывать ROM изменений, хотя я могу получить температуру, я до сих пор не удалось получить PowerUp значения 85.

Любые идеи, то почему?

Спасибо заранее!

привет,
Seemanta

 
Это похоже на код не может работать должным образом.См. мои ответы по поводу возможных причин.

 
Здравствуйте,
for the DS1820.

Вы заметили, что регулярное 1-Wire сброс шины не сброса при включении питания
для DS1820.

1-wire operation) respectively to power down VDD.

Чтобы увидеть 85 ° C сброса при включении питания по умолчанию, нужно применять больше значительный импульс сброса (в случае паразитической власти
1-Wire операции), соответственно, для выключения VDD.

В противном случае, я не вижу причин для DS1820 для выполнения непреднамеренные преобразовать команду.Однако, даже если это было бы в случае, применение, как представляется, основная операционная, что самое главное, я думаю.

Привет,
Франк

 
Всякий раз, когда вы впервые мощностью до схеме он считается сброса при включении питания.Поэтому, если вы не выдает команду Преобразовать значение Вы должны прочитать это 85C.Так что вам следует читать 0xAA.Если этого не сделать, то что-то не так или вы не читаете это право.Мои подозрения по-прежнему остается времени, как я говорил раньше.

Конечно, самое главное, что приложение работает, но как вы знаете, она работает правильно, если вы не можете прочитать ожидаемое значение?Это хороший тест: прочитать значение сразу после включения питания, убедитесь, что он 85C, затем выпуск преобразовать команду, а затем прочитал температура снова.Он должен теперь быть близкой к комнатной температуре, поэтому вы должны прочесть что-то вроде 0x2A или около того.

 
Точно!Это мое дело!Если я не в состоянии прочитать мощности до значения в 85, то я тоже не в состоянии доверять преобразовании либо

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Грустный" border="0" />Позвольте мне привести еще один снимок его и буду Опубликовать мои выводы здесь.
Температура, кажется, около до комнатной температуры, однако, около 28-29 градусов по Цельсию.Я в Хайдарабад, Индия и это обычная температура в это время года.

привет,
Seemanta

 

Welcome to EDABoard.com

Sponsor

Back
Top