Atmega & 1-wire ....убился уже просто ... в общем одни 0ли выдает :( посадил DS2401 . Может что дельное подскажете?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено gsm 27 ноября 2006 г. 17:27

#define PORTwire1 PORTA
#define OW_PORT PORTA
#define OW_DDR DDRA
#define OW_BUS_MASK BIT(PA2)
#define OW_PIN PA2
#define CPU_CYCLE 1328
#define COMM_PER_MCS (1000 / CPU_CYCLE)
#define OW_DEL_A 6 * COMM_PER_MCS
#define OW_DEL_B 64 * COMM_PER_MCS
#define OW_DEL_C 60 * COMM_PER_MCS
#define OW_DEL_D 10 * COMM_PER_MCS
#define OW_DEL_E 9 * COMM_PER_MCS
#define OW_DEL_F 55 * COMM_PER_MCS
#define OW_DEL_G 0 * COMM_PER_MCS
#define OW_DEL_H 480 * COMM_PER_MCS
#define OW_DEL_I 70 * COMM_PER_MCS
#define OW_DEL_J 410 * COMM_PER_MCS

void OW_WriteBit1(void)
{
OW_DDR |= OW_BUS_MASK;

_delay_us(OW_DEL_A);

OW_DDR &= ~OW_BUS_MASK;

_delay_us(OW_DEL_B);
}

void OW_WriteBit0(void)
{
OW_DDR |= OW_BUS_MASK;

_delay_us(OW_DEL_C);

OW_DDR &= ~OW_BUS_MASK;

_delay_us(OW_DEL_D);
}

char OW_ReadBit(void)
{ char status;
OW_DDR |= OW_BUS_MASK;

_delay_us(OW_DEL_A);

OW_DDR &= ~OW_BUS_MASK;

_delay_us(OW_DEL_E);

status = OW_PIN & OW_BUS_MASK;

_delay_us(OW_DEL_F);

return status;
}

void OW_SendByte(char data)
{ char count;

count = 8;

do
{
if(data & 0x01)
{ OW_WriteBit1();
}
else
{ OW_WriteBit0();
}

data >>= 1;
}
while(--count);
}

char OW_DetectPresence(void)
{ char status;

OW_DDR |= OW_BUS_MASK;

_delay_us(OW_DEL_H);

OW_DDR &= ~OW_BUS_MASK;

_delay_us(OW_DEL_I);

status = OW_PIN & OW_BUS_MASK;

_delay_us(OW_DEL_J);

return status;
}

char OW_ReceiveByte(void)
{ char count, data;

count = 8;

do
{
data >>= 1;

if(OW_ReadBit())
{ data |= 0x80;
}
}
while(--count);

return data;
}


int main(void) {

char ch;
OW_PORT &= ~_BV(OW_PIN);
OW_DDR &= ~BIT(OW_PIN);

ch=OW_DetectPresence();
printstr_p(PSTR("=")); //çàïðîñ íà òåêóùèé SMSC
putchr(ch);
printstr_p(PSTR("="));
OW_SendByte(0xF0);
ch=OW_ReceiveByte();
putchr(ch);
ch=OW_ReceiveByte();
putchr(ch);



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите шесть пополам:


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание