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

 
 
> 1-Wire
D H
сообщение Sep 20 2010, 17:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 1-11-06
Пользователь №: 21 847



Не получается корректно прочитать iButton. Т.е. читается что-то из линии, но совсем не то.
В наличии имею две iButton, считанный код для каждой уникальный и повторяется при каждом чтении.
Ткните носом, где не прав.

Запись:
CODE
void Wire1_WriteBit(unsigned char cBit)
{
WIRE1_DN();
if(cBit==0) delay_us(60);
if(cBit==1) delay_us(1);
WIRE1_UP(); // Отпускание линии
if(cBit==0) delay_us(1);
if(cBit==1) delay_us(60);
}



void Wire1_SendByte(unsigned char data)
{
unsigned char temp;
unsigned char i;

SetBit(Wire1DDR,Wire1Bit); // Перевод порта в режим записи

for (i = 0; i < 8; i++) // Отправка байта в линию
{
temp = data & 0x01;
if (temp)
{
Wire1_WriteBit(1);
}
else
{
Wire1_WriteBit(0);
}
data >>= 1;
}

ClearBit(Wire1DDR,Wire1Bit); // Перевод порта в режим чтения
}


Чтение:
CODE
unsigned char Wire1_ReadBit()
{
unsigned char ReadBit=0;

SetBit(Wire1DDR,Wire1Bit); // Перевод порта в режим записи
WIRE1_DN(); // Линия вниз
delay_us(1);
WIRE1_UP(); // Линия вверх

ClearBit(Wire1DDR,Wire1Bit); // Перевод порта в режим чтения
delay_us(14);

// Чтение линии 1-Wire
if( IsBitSet(Wire1Pin, Wire1Bit) ) ReadBit=1; // В линии 1

return ReadBit;
}


unsigned char Wire1_ReadByte()
{
unsigned char data;
unsigned char i;

data = 0x00;

for (i = 0; i < 8; i++)
{
data >>= 1;
if (Wire1_ReadBit())
{
data |= 0x80;
}
}
return data;
}


После посылки Reset и приема Presence
Делаю так:
CODE

Wire1_SendByte(0x33); // Отправка команды чтения серийного номера

lcd_gotoxy(0,0);
for(i=0;i<8;i++)
{
cByte[i]=0; // Чтение одного байта из устройства
cByte[i]=Wire1_ReadByte(); // Чтение одного байта из устройства
if(i==5) lcd_gotoxy(0,1);
sprintf(cStr, "%2x ", cByte[i]);
lcd_puts(cStr);
}


Сообщение отредактировал D H - Sep 21 2010, 05:39
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
Палыч
сообщение Sep 21 2010, 06:24
Сообщение #2


Гуру
******

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



На форуме в настоящее время уже обсуждаются две темы с таким же названием:
http://electronix.ru/forum/index.php?showtopic=80541
http://electronix.ru/forum/index.php?showtopic=80508

Вы читали эти обсуждения? Остались вопросы?
Go to the top of the page
 
+Quote Post
D H
сообщение Sep 21 2010, 17:21
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 1-11-06
Пользователь №: 21 847



Цитата(Палыч @ Sep 21 2010, 10:24) *
На форуме в настоящее время уже обсуждаются две темы с таким же названием:
http://electronix.ru/forum/index.php?showtopic=80541
http://electronix.ru/forum/index.php?showtopic=80508

Вы читали эти обсуждения? Остались вопросы?


Спасибо, прочитал. Ошибку нашел. В конце функции чтения бита необходимо было сделать задержку 45us, для выдержки тайминга в соответствии с даташитом.

CODE

unsigned char Wire1_ReadBit()
{
unsigned char ReadBit=0;

SetBit(Wire1DDR,Wire1Bit); // Перевод порта в режим записи
WIRE1_DN(); // Линия вниз
delay_us(1);
WIRE1_UP(); // Линия вверх

ClearBit(Wire1DDR,Wire1Bit); // Перевод порта в режим чтения
delay_us(14);

// Чтение линии 1-Wire
if( IsBitSet(Wire1Pin, Wire1Bit) ) ReadBit=1; // В линии 1
delay_us(45); // <------------------------------------------------- Ошибка была здесь

return ReadBit;
}
Go to the top of the page
 
+Quote Post
domowoj
сообщение Sep 25 2010, 02:25
Сообщение #4


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Чтобы не плодить темы, задам вопрос здесь!
Имеем.
Простейшая читалка идентификационного кода устройств с протоколом 1-Wire на Tiny24 с МЕЛТовским индикатором.
Отлично работает.
НО
некоторые таблетки iButton не читает или читает все "0".
Стал разбираться, оказывается таблетка садит сигнал почти до 1 вольта,
причем в домофоне эта же табл. отлично работает.
Подтягивающий резистор 3кОм.
Кто с таким сталкивался.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Sep 25 2010, 07:01
Сообщение #5


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



может нужен active pullup?
Go to the top of the page
 
+Quote Post
domowoj
сообщение Sep 25 2010, 15:00
Сообщение #6


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Цитата(ukpyr @ Sep 25 2010, 14:01) *
active pullup?

А это как?


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 26 2010, 09:51
Сообщение #7



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(ukpyr @ Sep 25 2010, 11:01) *
может нужен active pullup?

Active pullup вряд ли нужен для работы с одним слэйвом на стандартной скорости и на минимальном (судя по ...) расстоянии.
Если Вы про strong pullup, то чтобы оно стало нужно, мастер сначала должен подать слэйву команду, требующую спецпайка. Здесь же всё затыкается ещё на READ ROM.
Могу предположить, что проблемы возникают не с оригинальными таблетками, а с китайскими аналогами - с ними желательно обеспечить >=10 мкс между битами (или вообще увеличить этот интервал в 1.5-2 раза; далласовские таблетки работают и на 6-7 мкс паузе).
Go to the top of the page
 
+Quote Post
domowoj
сообщение Sep 26 2010, 15:22
Сообщение #8


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Да, похоже, китайские.
Вот картинка на фоне команды 33Н
масштабы 2В/см и 100мксек/см

Сообщение отредактировал domowoj - Sep 26 2010, 15:24
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 26 2010, 19:52
Сообщение #9



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(domowoj @ Sep 26 2010, 19:22) *
Да, похоже, китайские.
Вот картинка на фоне команды 33Н
масштабы 2В/см и 100мксек/см

Что-то очень стра[нш]ное. Где команда, непонятно, но мастер явно не может обеспечить 0 на шине.
Китайские аналоги может и не однояйцевые близнецы с оригиналом, но и не настолько отличаются, чтоб такое безобразие устроить.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Sep 27 2010, 01:44
Сообщение #10


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Красная линия - "0" , масштаб - 2В/см, резистор подтяжки уже 560Ом поставил,
так что мастер нуль обеспечивает.
(два коротких, два длинных, два коротких, два длинных импульса к 0 и есть команда 33Н)
Самое интересное, что эта табл. с домофоном-то работает!!!

Надо наверно временами попробовать поиграться

Сообщение отредактировал domowoj - Sep 27 2010, 01:47


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 27 2010, 08:43
Сообщение #11



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(domowoj @ Sep 27 2010, 05:44) *
так что мастер нуль обеспечивает.

Иногда, когда совпадают желания мастера и слэйва. Третий уровень - имхо, конфликт мастера, _активно_ тянущего вверх, и слэйва, тянущего вниз.
Цитата
Надо наверно временами попробовать поиграться

Скорее, где-то 1 досылается и в DDR, и в PORT (AVR assumed).
Go to the top of the page
 
+Quote Post

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

 


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


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