реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> 1 wire для AT89C4051, Проблема при считывании ID Ibutton
looter
сообщение Sep 2 2009, 08:35
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 2-09-09
Пользователь №: 52 149



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


В файле лежит код, написан на С под Keil uVision2.
Прикрепленные файлы
Прикрепленный файл  proverka.txt ( 3.22 килобайт ) Кол-во скачиваний: 76
 
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 2 2009, 11:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



То ли я не понял Вашу программу, то ли Вы не поняли как работать с устройствами iButton...
При подключении устройства iButton к линиям - оно (устройство) вырабатывает Presence pulse (импульс присутствия). Зафиксировав с помощью МК этот импульс, нужно подать от МК на устройство сигнал сброса. После сброса устройство выдаст повторный импульс присутствия. А, вот уже после него и можно выдавать команду на чтение. Иначе оно и работать не будет...
Go to the top of the page
 
+Quote Post
looter
сообщение Sep 2 2009, 14:00
Сообщение #3





Группа: Участник
Сообщений: 4
Регистрация: 2-09-09
Пользователь №: 52 149



Функцией ow_on_line () я установливаю ноль на протяжении 704 мкс, потом отключаюсь т.е. устанавливаю на выходе ножки 1 жду 65 мкс и считываю что находится на ноже, если 1 значит устройства нет; 0 - есть. Или может я не правильно понимаю временные диаграммы при работе с ibutton 1990a???

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

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

Сообщение отредактировал looter - Sep 2 2009, 14:03
Go to the top of the page
 
+Quote Post
ARV
сообщение Sep 2 2009, 15:11
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



после ввода уровня PRESENCE (через ваши 63 мкс от начала импульса) дождитесь, пока PRESENCE кончится - либо по времени, либо пока не вернется лигния к высокому уровню - потом можно посылать команду чтения ROM. со всеми устройствами 1-wire работать надо по алгоритму: RESET-PRESENCE-MATCH_ROM-ADDR-КОМАНДА-ДАННЫЕ или RESET-PRESENCE-SKIP_ROM-КОМАНДА-ДАННЫЕ. возможны нюансы, но лишних ресетов не нужно.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 2 2009, 15:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(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, и только потом выдавать команду чтения..
Go to the top of the page
 
+Quote Post
looter
сообщение Sep 3 2009, 09:03
Сообщение #6





Группа: Участник
Сообщений: 4
Регистрация: 2-09-09
Пользователь №: 52 149



Подправив код программа частично заработала, отсылаю в устройство чип ключ ibutton SMC 1990a1 команду 33h (0Fh),как сказано в даташите, начинаю считывать но прочитываю правильно только первый байт (Family code). а оставшиеся не правильно. Вместо 1 байта ID равного 3Е читает 8F.
Возможно ли такое, что команда read rom 33h (0Fh), нам возвращает только Family code, а для получения ID и CRC необходимо кидать другую команду???
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Sep 3 2009, 10:24
Сообщение #7


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(looter @ Sep 3 2009, 13:03) *
Возможно ли такое, что команда read rom 33h (0Fh), нам возвращает только Family code, а для получения ID и CRC необходимо кидать другую команду???


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


удачи Вам
(круглый)
Go to the top of the page
 
+Quote Post
fmdost
сообщение Sep 4 2009, 00:03
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(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 внимательней. На паузы между байтами. Я пишу по памяти - посему не точно.

Паузы между байтами не требуются.
Go to the top of the page
 
+Quote Post
looter
сообщение Sep 4 2009, 06:41
Сообщение #9





Группа: Участник
Сообщений: 4
Регистрация: 2-09-09
Пользователь №: 52 149



Всем большое спасибо, все заработало.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 18:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016