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

 
 
> DS18B20 + WinAVR, не инициализируется датчик :(
Labinskiy Nikola...
сообщение Jul 22 2006, 07:20
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606



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. В чем может быть проблема?
Если в датчике то как его можно быстро и просто проверить?


--------------------
If you can't make it good - don't make it look good ;)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xemul
сообщение Jul 22 2006, 09:24
Сообщение #2



*****

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



Цитата(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
Go to the top of the page
 
+Quote Post
Labinskiy Nikola...
сообщение Jul 22 2006, 09:43
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606



Цитата(xemul @ Jul 22 2006, 12:24) *
Проблема в 80 мкс задержке. В даташитах на ванварь черным по английски сказано:
Presence Detect Sample Time tMSP min=60us, max=75us
со сноской: Note 1: System requirement.

В функции delay_us не учитываются задержки на вызов и возврат из функции. Это делает ее совершенно бессмысленной для задержек менее 10 мкс и относительно разумной для задержек менее 30-40 мкс при F_CPU 1000000UL.



Прикрепленное изображение


Как тогда корректно делать задержки?


--------------------
If you can't make it good - don't make it look good ;)
Go to the top of the page
 
+Quote Post
xemul
сообщение Jul 22 2006, 10:31
Сообщение #4



*****

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



Цитата(Labinskiy Nikolay @ Jul 22 2006, 13:43) *
Цитата(xemul @ Jul 22 2006, 12:24) *

Проблема в 80 мкс задержке. В даташитах на ванварь черным по английски сказано:
Presence Detect Sample Time tMSP min=60us, max=75us
со сноской: Note 1: System requirement.

В функции delay_us не учитываются задержки на вызов и возврат из функции. Это делает ее совершенно бессмысленной для задержек менее 10 мкс и относительно разумной для задержек менее 30-40 мкс при F_CPU 1000000UL.



Прикрепленное изображение


Как тогда корректно делать задержки?

Извините, не посмотрел, что для датчиков температуры ворота по Presence Pulse гораздо шире, чем для iButton. Тем не менее, если программу написать под стандартные тайминги для iButton, она будет работать и с остальными ванварными девайсами.
Посмотрите AN126.pdf
Я делал задержки более 70 мкс кратными этим самым 70 мкс (т.е., н-р, сброс = 7*70) и отрабатывал их по 70-мкс таймерному прерыванию. Мелкие задержки при Fclk=1MHz приходилось делать nop'ами, goto $+1 (синтаксис PIC'ов) и циклами ожидания.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Labinskiy Nikolay   DS18B20 + WinAVR   Jul 22 2006, 07:20
- - beer_warrior   ЦитатаКак тогда корректно делать задержки? Прерыва...   Jul 22 2006, 09:54
- - virtuality   Вставлю свою лепту - у меня, да и судя по постам у...   Jul 22 2006, 10:11
- - aesok   Цитата(Labinskiy Nikolay @ Jul 22 2006, 11...   Jul 22 2006, 10:22
- - Labinskiy Nikolay   Цитата(virtuality @ Jul 22 2006, 13:11) В...   Jul 22 2006, 11:04
|- - xemul   Цитата(Labinskiy Nikolay @ Jul 22 2006, 15...   Jul 22 2006, 11:27
- - Labinskiy Nikolay   вот что получилось: Код#include <avr/io.h...   Jul 22 2006, 11:55
- - xemul   Цитата(Labinskiy Nikolay @ Jul 22 2006, 15...   Jul 22 2006, 14:05
- - Labinskiy Nikolay   Спасибо за ссылки, ну а delay_ms у меня только и о...   Jul 22 2006, 15:03
- - WHALE   Вручную считать задержки-нафига? Тот самый случай...   Jul 22 2006, 17:17
|- - xemul   Цитата(WHALE @ Jul 22 2006, 21:17) Вручну...   Jul 22 2006, 17:50
- - Labinskiy Nikolay   Ничего не понимаю... PORTA.4(нумерация с нуля) Meg...   Jul 25 2006, 18:20
- - virtuality   Николай, советую проверить работоспособность датчи...   Jul 25 2006, 19:07
- - Labinskiy Nikolay   Ну вот, купил специально второй датчик для проверо...   Jul 26 2006, 09:15
- - virtuality   Может у вас ошибка не в съеме информации с датчика...   Jul 26 2006, 18:24
- - Labinskiy Nikolay   Да, через УАРТ, но там ошибок нету, я через гиперт...   Jul 27 2006, 05:13
- - Balun   Код/* Multipoint thermometer with LCD display u...   Jul 27 2006, 05:45
- - Labinskiy Nikolay   ЦитатаВроду нада поискать датччики и определмить и...   Jul 27 2006, 17:06


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:11
Рейтинг@Mail.ru


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