Она расчитывает контрольную сумму.unsigned char w1_crc8(void *p, unsigned char n)
Можете её заюзать.
Она расчитывает контрольную сумму.unsigned char w1_crc8(void *p, unsigned char n)
внимательно изучите протокол обмена, а именно, тайм-слоты записи 1 и 0, а так же тайм-слоты чтения 1 и 0.ROMan2947 писал(а):if(bit==1)
{ LOW;
_delay_us(2);
HIGT;
_delay_us(75);
}
else
{
LOW;
_delay_us(75);
HIGT;
_delay_us(2);
}
так-то я знаю, что проблема в тайм-слотах,задолбался втыкать в эти графики, от этого и пришел сюды. по счет чтения это отдельная тема! с записью что не так?ARV писал(а):внимательно изучите протокол обмена, а именно, тайм-слоты записи 1 и 0, а так же тайм-слоты чтения 1 и 0.ROMan2947 писал(а):if(bit==1)
{ LOW;
_delay_us(2);
HIGT;
_delay_us(75);
}
else
{
LOW;
_delay_us(75);
HIGT;
_delay_us(2);
}
а без этого никакROMan2947 писал(а):задолбался втыкать в эти графики
вот, например, старенькая моя статеечка, не самый лучший образец, но для начала пойдет. смотрим на картинкуROMan2947 писал(а):с записью что не так?
и пробуем сопоставить с вашим кодом.эту картинку уже до дыр насмотрел))) и статейку читал.ARV писал(а):а без этого никакROMan2947 писал(а):задолбался втыкать в эти графикивот, например, старенькая моя статеечка, не самый лучший образец, но для начала пойдет. смотрим на картинкуROMan2947 писал(а):с записью что не так?
и пробуем сопоставить с вашим кодом.
откуда вы взяли 75 мкс задержки при записи или чтении? приведите все задержки к нужным значениям, и все заработает. а не хотите - берите готовую библиотеку 1-wire и тупо пользуйтесь чужими наработками.
Дак он сам и не будет отвечать. Нужно FF-ки ему посылать, после передачи команды. Протокол почитайте внимательнее.ROMan2947 писал(а):но в ответ тишина
Код: Выделить всё
init();
write_byt(0x33);
for(i=0;i<8;i++){ // Читаем 8 бат данных
write_byt(0xFF);
}
спасибо за направление, попробую сейчасАlex писал(а):Дак он сам и не будет отвечать. Нужно FF-ки ему посылать, после передачи команды. Протокол почитайте внимательнее.ROMan2947 писал(а):но в ответ тишинаС тайм-слотами, на первый взгляд, всё в порядке.Код: Выделить всё
init(); write_byt(0x33); for(i=0;i<8;i++){ // Читаем 8 бат данных write_byt(0xFF); }
ответ от датчика получен) спасибо большое!!!Аlex писал(а):Дак он сам и не будет отвечать. Нужно FF-ки ему посылать, после передачи команды. Протокол почитайте внимательнее.ROMan2947 писал(а):но в ответ тишинаС тайм-слотами, на первый взгляд, всё в порядке.Код: Выделить всё
init(); write_byt(0x33); for(i=0;i<8;i++){ // Читаем 8 бат данных write_byt(0xFF); }
Zhuk72 писал(а):Может конфигурацию неправильно задаете.
Как выставляете 9-битный режим? Последовательность команд какая?
да их и имею, вопрос был для чего нужно 5 бит для знака???? когда можно было выделить один бит...разработчик так захотели или еще как то могут использоваться данные биты?Zhuk72 писал(а):1. Может конфигурацию неправильно задаете.
Как выставляете 9-битный режим? Последовательность команд какая?
Смысл в том, что при приемлемом разрешении в 0.5*С на конвертацию затрачивается почти на порядок меньше времени, чем в случае 12-битного режима.
2. Имеете в виду старшие 5 бит старшего байта температуры? Они всегда определяют знак температуры.
Код: Выделить всё
send_ds(0xCC); // Skip ROM
send_ds(0x4E); // Write Scratchpad
send_ds(0x00); // TH alarm
send_ds(0x00); // TL alarm
send_ds(0x1F); // Config.
init_ds();
send_ds(0xCC); // Skip ROM
send_ds(0x48); // Copy Scratchpad
delay_ms(10); // Time required for writing to EEPROM.
Код: Выделить всё
send_ds(0xCC); // Skip ROM
send_ds(0x4E); // Write Scratchpad
send_ds(0x00); // TH alarm
send_ds(0x00); // TL alarm
send_ds(0x1F); // Config.
init_ds();
send_ds(0xCC); // Skip ROM
send_ds(0x48); // Copy Scratchpad
delay_ms(10); // Time required for writing to EEPROM.
Что вы выводите и как можете контролировать процессы ВНУТРИ датчика я не представляю.ROMan2947 писал(а): инициализация;
write_byt(0xCC);пропуск ROM\
write_byt(0x1F); четвертый байт пишу 0x1F
write_byt(0x48); копирую
Zhuk72 писал(а):Что вы выводите и как можете контролировать процессы ВНУТРИ датчика я не представляю.ROMan2947 писал(а): инициализация;
write_byt(0xCC);пропуск ROM\
write_byt(0x1F); четвертый байт пишу 0x1F
write_byt(0x48); копирую
по счет команд и кто как командует датчиком это отдельная тема...главный вопрос остается в стороне... при одной и той же температуре меняется ли двоичный код температуры в зависимости от разрешения?Zhuk72 писал(а):Что вы выводите и как можете контролировать процессы ВНУТРИ датчика я не представляю.ROMan2947 писал(а): инициализация;
write_byt(0xCC);пропуск ROM\
write_byt(0x1F); четвертый байт пишу 0x1F
write_byt(0x48); копирую
Я же не для красоты выложил свои команды. То, что вы делаете (в цитате выше) - неправильно.
Посмотрите ДШ, там есть диаграмма, по которой и надо прошагать. Ну и читать описание работы внимательнее.
Непонятно было первое описание процесса.ROMan2947 писал(а):я считываю регистр конфигурации и вывожу код на порт МК и с помощью лампочек смотрю, что там хранится. при 9 битном режиме мне выводит 00011111, а при 12 01111111, что тут не понятного!?
Измеряйте, выводите сырые данные при разных режимах и сравнивайте.ROMan2947 писал(а):...главный вопрос остается в стороне... при одной и той же температуре меняется ли двоичный код температуры в зависимости от разрешения?
придется экспериментировать....ну тем интереснее)Zhuk72 писал(а):Непонятно было первое описание процесса.ROMan2947 писал(а):я считываю регистр конфигурации и вывожу код на порт МК и с помощью лампочек смотрю, что там хранится. при 9 битном режиме мне выводит 00011111, а при 12 01111111, что тут не понятного!?
Измеряйте, выводите сырые данные при разных режимах и сравнивайте.ROMan2947 писал(а):...главный вопрос остается в стороне... при одной и той же температуре меняется ли двоичный код температуры в зависимости от разрешения?
Можете и в Протеусе проверить, он эти датчики нормально симулирует.