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

 
 
> 1-wire протокол, не могу разобраться помогите
Rom20
сообщение Sep 17 2010, 12:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 10-10-08
Пользователь №: 40 823



Доброго времени суток! написал программку опроса Dalles-ключа все вроде сделал как по даташиту ну все равно что то работает на половину, выложу первую часть кода может где то ошибка которую не могу увидеть, ключ затянут на порт В, МК ATmega8 PB1. Ключ включил согласно схеме через резистор на +5в

..........
//ожидание чтения Dallas-ключа
PORTB = 0;
while(1)
{
DDRB|=(1<<1); //настраиваем порт В на выход
PORTB&=~(1<<1); //генерируем сигнал Reset
_delay_us(500);
DDRB&=~(1<<1);//настраиваем порт В на вход
_delay_us(60);
ds=PINB&0x02;//считываем состояния порта В
_delay_us(30);
ds=PINB&0x02;
if(!ds) //если устройство с генерировало сигнал Presence то переходим к выполнению функции
{
UDR='p';//<<<<<<<<<<<<<<<< вот до этого места программ работает нормально выкидывает в порт 'р'

а дальше идут в порт идут одни единицы толи запрос на передачу серийного номера генерирую не правильно толи еще что



_delay_us(410);
// передача команд 33h(00110011) запрос на передачу серийного номера Dallas-ключа
DDRB|=(1<<1);
//отправка нулевого бита(1)
PORTB&=~(1<<1);
_delay_us(4);
PORTB|=(1<<1);
_delay_us(80);
//отправка первого бита(1)
PORTB&=~(1<<1);
_delay_us(4);
PORTB|=(1<<1);
_delay_us(80);
//отправка второго бита(0)
PORTB&=~(1<<1);
_delay_us(80);
//отправка третьего бита(0)
PORTB&=~(1<<1);
_delay_us(80);
//отправка четвертого бита(1)
PORTB&=~(1<<1);
_delay_us(4);
PORTB|=(1<<1);
_delay_us(80);
//отправка пятого бита(1)
PORTB&=~(1<<1);
_delay_us(4);
PORTB|=(1<<1);
_delay_us(80);
//отправка шестого бита(0)
PORTB&=~(1<<1);
_delay_us(80);
//отправка седьмого бита(0)
PORTB&=~(1<<1);
_delay_us(80);


//чтение серийного номера ключа<<<<<<<<<<<<вот этот кусок программы выполняется не правильно думаю причина кроется выше но ошибки найти не могу
for(j=0; j<=7;j++
{
for(i=7;i>=0;i--)
{
DDRB|=(1<<1);
PORTB&=~(1<<1);
_delay_us(4);
DDRB&=~(1<<1);
_delay_us(5);
key=PINB&0x02;
_delay_us(7);
key=PINB&0x02;
if(key)
{
key = 1;
_delay_us(10);
UDR=key+0x030;
_delay_us(10);
}
else
{
key = 0;
_delay_us(10);
UDR=key+0x030;
_delay_us(10);
}
_delay_us(50);
}
}
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:09
Рейтинг@Mail.ru


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