Цитата(Labinskiy Nikolay @ Jul 22 2006, 11:20)

DQ подтянут 4к7 на +5 вольт. Датчик один, питание полное(на датчик тоже идет +5В)
Код
#include <avr/io.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
#define F_CPU 1000000UL // 1 MHz
#include <util/delay.h>
void delay_us(uint16_t t)
{
int i;
if (t > 10)
for (i=0;i<t/10;i++)
_delay_us(10);
else
_delay_us(t);
}
void delay_ms(uint16_t t)
{
int i;
if (t > 10)
for (i=0;i<t/10;i++)
_delay_ms(10);
else
_delay_ms(t);
}
int ds_reset()
{
int r=0;
PORTA &= ~(1<<4);
DDRA |= (1<<4); // DQ = 0;
delay_us(500); // 480us minimum
DDRA &= ~(1<<4); // DQ in
delay_us(80); // waits 15-60us and then
r = (PINA & (1<<4)); // capture the presence pulse (60-240us)
delay_us(400);
return !r;
}
все время возвращает 0. В чем может быть проблема?
Если в датчике то как его можно быстро и просто проверить?
Проблема в 80 мкс задержке. В даташитах на ванварь черным по английски сказано:
Presence Detect Sample Time tMSP min=60us, max=75usсо сноской:
Note 1: System requirement.В функции delay_us не учитываются задержки на вызов и возврат из функции. Это делает ее совершенно бессмысленной для задержек менее 10 мкс и относительно разумной для задержек менее 30-40 мкс при F_CPU 1000000UL.
Сообщение отредактировал xemul - Jul 22 2006, 09:25