Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 1 wire для AT89C4051
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
looter
Пишу программу авторизации пользователей посредствам ibutton под AT89C4051. Столкнулся с проблемой считывания ID с 1990А1.
Посмотрите на код, может где неправильно установлены задержки?? Данный софт заливался на контроллер и проверялся миандр. Сброс и запись команды READ ROM миандр показывает правильные времена задержки. Картинка на осцилогрофе соответствует заявленной производителем.
При чтении 8 байт начинают возникать проблемы: миандр постоянно показывает что принимаю 1
В качестве команды READ ROM использую 0х33h или 0х0Fh, в книге "Конструирование устройств на микроконтроллерах" Белова А.В. указывают что необходимо писать 0х0Fh в datasheet'e что разницы нет. Пробовал и то и другое - результат отрицательный.


В файле лежит код, написан на С под Keil uVision2.
Палыч
То ли я не понял Вашу программу, то ли Вы не поняли как работать с устройствами iButton...
При подключении устройства iButton к линиям - оно (устройство) вырабатывает Presence pulse (импульс присутствия). Зафиксировав с помощью МК этот импульс, нужно подать от МК на устройство сигнал сброса. После сброса устройство выдаст повторный импульс присутствия. А, вот уже после него и можно выдавать команду на чтение. Иначе оно и работать не будет...
looter
Функцией ow_on_line () я установливаю ноль на протяжении 704 мкс, потом отключаюсь т.е. устанавливаю на выходе ножки 1 жду 65 мкс и считываю что находится на ноже, если 1 значит устройства нет; 0 - есть. Или может я не правильно понимаю временные диаграммы при работе с ibutton 1990a???

Как я понимаю ваш ответ, мне еще необходимо один раз проделать данную процедуру??? а только потом отсылать 0х33 (или всеже 0x0F) в устройство??

Может ли быть проблема в том что нет задержки в конце функции, для выдержки полной длительности Presence puls = min 480 мкс??
ARV
после ввода уровня PRESENCE (через ваши 63 мкс от начала импульса) дождитесь, пока PRESENCE кончится - либо по времени, либо пока не вернется лигния к высокому уровню - потом можно посылать команду чтения ROM. со всеми устройствами 1-wire работать надо по алгоритму: RESET-PRESENCE-MATCH_ROM-ADDR-КОМАНДА-ДАННЫЕ или RESET-PRESENCE-SKIP_ROM-КОМАНДА-ДАННЫЕ. возможны нюансы, но лишних ресетов не нужно.
Палыч
Цитата(looter @ Sep 2 2009, 17:00) *
Или может я не правильно понимаю временные диаграммы при работе с ibutton 1990a???
Под рукой нет DS - проверить времена не могу...

Цитата(looter @ Sep 2 2009, 17:00) *
Как я понимаю ваш ответ, мне еще необходимо один раз проделать данную процедуру??? а только потом отсылать 0х33 (или всеже 0x0F) в устройство??
Нет, я хотел сказать, что при присоединении устройства к линиям он вырабатывает импульс присутствия самостоятельно, который Вы можите принять за импульс присутствия, возникающий от сигнала сброс. Впрочем, это, наверное, неважно - поскольку Ваша программа всё время крутится в цикле и читает код с устройства: не в этот раз (цикл программы), так в другой - код должен был бы быть прочитан...

Цитата(looter @ Sep 2 2009, 17:00) *
Может ли быть проблема в том что нет задержки в конце функции, для выдержки полной длительности Presence puls = min 480 мкс??
Да. Если мы говорим об одном и том же. Если Вы зафиксировали (заметили) импульс присутствия в ответ на сигнал сброса, то нужно подождать того момента времени, когда устройство импульс присутствия закончит и "отпустит" линию в 1, и только потом выдавать команду чтения..
looter
Подправив код программа частично заработала, отсылаю в устройство чип ключ ibutton SMC 1990a1 команду 33h (0Fh),как сказано в даташите, начинаю считывать но прочитываю правильно только первый байт (Family code). а оставшиеся не правильно. Вместо 1 байта ID равного 3Е читает 8F.
Возможно ли такое, что команда read rom 33h (0Fh), нам возвращает только Family code, а для получения ID и CRC необходимо кидать другую команду???
kolobok0
Цитата(looter @ Sep 3 2009, 13:03) *
Возможно ли такое, что команда read rom 33h (0Fh), нам возвращает только Family code, а для получения ID и CRC необходимо кидать другую команду???


нет.
Глянул одним глазком код - не нашёл задержки после каждого байта. Возможно не туда смотрел - хз. Посмотрите даташит на 1-Wire внимательней. На паузы между байтами. Я пишу по памяти - посему не точно.


удачи Вам
(круглый)
fmdost
Цитата(looter @ Sep 2 2009, 18:00) *
Функцией ow_on_line () я установливаю ноль на протяжении 704 мкс, потом отключаюсь т.е. устанавливаю на выходе ножки 1 жду 65 мкс и считываю что находится на ноже, если 1 значит устройства нет; 0 - есть.

90uS надо.
Потом подождать 1mS. для надёжности.
Цитата
Как я понимаю, мне еще необходимо один раз проделать данную процедуру???

нет.
Цитата
а только потом отсылать 0х33 (или всеже 0x0F) в устройство??

0х33 надо, другие типы ключей работают только с 0х33.
Цитата
Может ли быть проблема в том что нет задержки в конце функции, для выдержки полной длительности Presence puls = min 480 мкс??

Вполне может. Только не после Presence puls, а от окончания reset, и не 480uS, а 960uS. СМ. выше.

Цитата(kolobok0 @ Sep 3 2009, 14:24) *
Глянул одним глазком код - не нашёл задержки после каждого байта. Возможно не туда смотрел - хз. Посмотрите даташит на 1-Wire внимательней. На паузы между байтами. Я пишу по памяти - посему не точно.

Паузы между байтами не требуются.
looter
Всем большое спасибо, все заработало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.