Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 23.08.2011, 20:54  
anrkaid
Частый гость
 
Регистрация: 17.12.2010
Сообщений: 10
Сказал спасибо: 2
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
anrkaid на пути к лучшему
По умолчанию Вопрос по DS1822

Знаю, знаю, что тема очень избитая и разжеванная, но что-то не выходит. Уже все прочитал, что нашел. Проблема в том, что микруха не хочет отдавать данные. Единственное, что я от нее добился - импульс присутствия. Передаю ей команды и жду приема, а в ответ тишина (т.е. стабильный 1 на линии).

Вот код:
PHP код:
#define OWPORT PORTD
#define OWDDR DDRD
#define OWPIN_MASK 0b10000000
#define OWPIN PIND
/**
 * Read one byte from 1-wire interface
 */
unsigned char oneWireReadByte() {
  
char i;
  
unsigned char result 0;
  
// set pin to zero
  
OWPORT &= ~(OWPIN_MASK);
  for (
0‹ 8; ++i) {
    
// capture wire
    
OWDDR |= OWPIN_MASK;
    
_delay_us(6);
    
OWDDR &= ~OWPIN_MASK;
    
_delay_us(9);
    if (
OWPIN OWPIN_MASK != 0) {
      
result += ‹‹ i;
    }
    
_delay_us(60);
  }
  return 
result;
}

/**
 * Write one byte to 1-wire interface
 */
void oneWireWriteByte(unsigned char data) {
  
// set pin output to zero
  
OWPORT &= ~(OWPIN_MASK); 
  for (
char i 0‹ 8; ++i) {
    if ((
data 0x01) == 0x01) {
      
// send "1"
      
OWDDR |= OWPIN_MASK;
      
_delay_us(6);
      
OWDDR &= ~OWPIN_MASK;
      
_delay_us(64);
    }
    else {
      
// send 0
      
OWDDR |= OWPIN_MASK;
      
_delay_us(60);
      
OWDDR &= ~(OWPIN_MASK);
      
_delay_us(10);
    }
    
data data ›› 1;
    
_delay_us(4); // time gap between slots
  
}
  
// configure pin as input
  
OWDDR &= ~(OWPIN_MASK);
}

/**
 * Init 1-wire interface
 * @return bool initialization result (true or false)
 */
unsigned char oneWireInit() {
  
unsigned char devicePresents;
  
// send presense pulse
  
OWPORT &= ~(OWPIN_MASK);
  
// init 1-wire pin as output
  
OWDDR |= OWPIN_MASK;
  
// wait 480 microseconds
  
_delay_us(480);
  
// configure pin as input
  
OWDDR &= ~(OWPIN_MASK);
  
// wait 40 microseconds
  
_delay_us(60);
  
// read value
  
devicePresents = (OWPIN OWPIN_MASK) == 0;
  return 
devicePresents;
}

/**
 * Read temperature from ds1822
 */
unsigned short ds1822ReadTemperature() {
  
unsigned char buf[9];
  
unsigned char i;
  
unsigned short temperature;
  
// send 0xCC - "skip rom" command (we have only one device)
  
oneWireWriteByte(0xCC);
  
// start conversion
  
oneWireWriteByte(0x44);
  
_delay_ms(1000);
  
// read values;
  
oneWireWriteByte(0xBE);
  
_delay_ms(10);
  for (
0‹ sizeof(buf); ++i) {
    
buf[i] = oneWireReadByte();
  }
  
temperature buf[0] + (buf[1] ‹‹ 8);
  return 
temperature;

вызывается oneWireInit(), потом ds1822ReadTemperature().
Осциллограммы последовательно: presense(получается), потом отсыл 0xcc, 0x44.
Потом команда 0xbe и поппытка прочитать ответ.

Заранее спасибо за помощь.
Миниатюры:
Нажмите на изображение для увеличения
Название: presense.png
Просмотров: 47
Размер:	1.0 Кб
ID:	25417   Нажмите на изображение для увеличения
Название: cc+44.png
Просмотров: 43
Размер:	1.1 Кб
ID:	25418   Нажмите на изображение для увеличения
Название: be.png
Просмотров: 44
Размер:	767 байт
ID:	25419  

Нажмите на изображение для увеличения
Название: :(.png
Просмотров: 45
Размер:	841 байт
ID:	25420  
Реклама:

Последний раз редактировалось anrkaid; 23.08.2011 в 20:57. Причина: внес define в код
anrkaid вне форума  
Сказали "Спасибо" anrkaid
warel (28.06.2019)
Непрочитано 23.08.2011, 22:35  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Вопрос по DS1822

Сообщение от anrkaid Посмотреть сообщение
presense(получается), потом отсыл 0xcc, 0x44.
Потом команда 0xbe и попытка прочитать ответ.
Читать ДАТАШИТ. ВНИМАТЕЛЬНО!!!
Перед командой 0xbe, датчик ждёт номер датчика. Да и пауза после 0xbe не нужна.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Сказали "Спасибо" picavr
warel (28.06.2019)
Непрочитано 24.08.2011, 06:25  
anrkaid
Частый гость
 
Регистрация: 17.12.2010
Сообщений: 10
Сказал спасибо: 2
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
anrkaid на пути к лучшему
По умолчанию Re: Вопрос по DS1822

Сообщение от picavr Посмотреть сообщение
Перед командой 0xbe, датчик ждёт номер датчика.
А 0xCC, что, не работает что-ли? У меня только один датчик на шине. Или нужно 0xcc, 0x44, delay, 0xcc, 0xbe?
anrkaid вне форума  
Сказали "Спасибо" anrkaid
warel (28.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по работе с Proteus Slnew Proteus 16 20.11.2013 20:09
Интересный вопрос - два усилителя к одной нагрузке eCAH Аудиотехника 45 14.10.2010 01:23
вопрос из детства spilberg Отвлекитесь, эмбеддеры! 9 03.07.2009 14:01
Вопрос по инвертору для LСD voha2006 Ремонт оргтехники 15 25.04.2009 09:57


Часовой пояс GMT +4, время: 22:07.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot