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

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

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

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

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

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


 
Опции темы
Непрочитано 11.01.2012, 17:41  
prw07
Частый гость
 
Регистрация: 01.02.2011
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
prw07 на пути к лучшему
По умолчанию DS18B20 + tiny2313 = -9999 в Proteus

Протеус выдает значение температуры -9999. Причем если использую один датчик и читаю температуру
Код:
temp=ds18b20_temperature(0)
, то работает и работает если вместо тини использую мегу8 (с соответствующим изменением кода в CVAVR).
Частоты в Протеусе менял.
В чем ошибка?
Вот весь код:
Код:
#include ‹tiny2313.h›

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=0
#endasm
#include ‹1wire.h›
#include ‹delay.h› 
#include ‹ds18b20.h›  
#include ‹stdio.h›
#define MAX_DEVICES 2                     
unsigned char rom_codes[MAX_DEVICES][9];  

volatile int temp,temp1;                  

void main(void) 
{ 
unsigned char devices;       

devices=w1_search(0xf0,rom_codes);     


// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTD=0x00;
DDRD=0x00;
ACSR=0x80;

// 1 Wire Bus initialization
w1_init();
ds18b20_init(&rom_codes[0][0],20,55,DS18B20_9BIT_RES); 
ds18b20_init(&rom_codes[1][0],20,55,DS18B20_9BIT_RES);
while (1)
      {    
        temp=ds18b20_temperature(&rom_codes[0][0]);           
        temp1=ds18b20_temperature(&rom_codes[1][0]); 

      };
}
Реклама:
prw07 вне форума  
Непрочитано 11.01.2012, 17:51  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

девятки- ошибка чтения ...
Может провода не подключены ..или неправильно... но 9999- это отзыв на не-связь ..
float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register››5 ) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
}

Последний раз редактировалось OlegNZH; 11.01.2012 в 17:57.
OlegNZH вне форума  
Непрочитано 11.01.2012, 18:10  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

у Вас есть
// 1 Wire Bus functions
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include ‹1wire.h›
Всё- должно фунциклировать ...проверяйте аппаратную часть
OlegNZH вне форума  
Непрочитано 11.01.2012, 18:16  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

/ Датчик Температуры на PD0
//
//
#asm
.equ __w1_port=0x12 ;PORTD
.equ __w1_bit=2
#endasm
#include ‹ds18b20int.h› //!!!!!!!!библиотека скорректирована!!!!!



void term_detect(void)
{
#asm("cli")
devices=w1_search(0xf0,rom_code);

ds18b20_init(&rom_code[0],20,30,DS18B20_12BIT_RES);
#asm("sei")
}

void term_ismer(void)
{
signed char tmp=0;
char f_sign=0;
unsigned int temper=0; // значения датчика температуры
unsigned char t_vozd=0; // t воздуха


#asm("cli")
temper=ds18b20_temperature(&rom_code[0]);

#asm("sei")
OlegNZH вне форума  
Непрочитано 11.01.2012, 18:18  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

я уж не знаю просто код Рабочий
OlegNZH вне форума  
Непрочитано 12.01.2012, 02:53  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

prw07, подозреваю, что "дело было не бобине...". Проверьте адреса датчиков - картинка. Ну и еще правильные "подтяжки" смотрите примеры в самой проге
SAMPLES\VSM for AVR\One-Wire\DS18X20\
SAMPLES\VSM for AVR\One-Wire\NETWORK\
SAMPLES\VSM for AVR\AVR Temperature Sensor\
Миниатюры:
Нажмите на изображение для увеличения
Название: ScreenShot140.gif
Просмотров: 560
Размер:	39.2 Кб
ID:	30354  

Последний раз редактировалось Halex07; 12.01.2012 в 02:58.
Halex07 вне форума  
Непрочитано 12.01.2012, 06:17  
gres_go
Прописка
 
Аватар для gres_go
 
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
gres_go на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

Частоты проца в CVAVR и протеусе должны быть одинаковы, адреса датчиков в протеусе разными, после поиска датчиков можно воспользоваться индикацией светодиодом на какой нибудь бит скажем(будете знать, нашли или нет), ну и задержками поиграть попробовать.
добавил:
ООО..., а Вы сначала попробуйте инициализировать шину а потом искать датчики

Последний раз редактировалось gres_go; 12.01.2012 в 06:19. Причина: Добавил
gres_go вне форума  
Непрочитано 12.01.2012, 10:48  
prw07
Частый гость
 
Регистрация: 01.02.2011
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
prw07 на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

Всем спасибо за помощь.
Забыл прикрепить проект. Вот он.
Сразу же скажу, что:
1.
Цитата:
Может провода не подключены ..или неправильно...
При подключении одного датчика и использовании записи temp=ds18b20_temperature(0) все работает. Значит подключены правильно. Да и при использовании того же кода для меги8 все работает.
2.
Цитата:
Проверьте адреса датчиков - картинка. Ну и еще правильные "подтяжки" смотрите примеры в самой проге
Адреса разные (мы уже это проходили) и подтяжка 4кОм есть. При использовании того же кода для меги8 все работает.
3.
Цитата:
Частоты проца в CVAVR и протеусе должны быть одинаковы
С этим тоже уже не раз сталкивался. Частоты проверял.
Цитата:
адреса датчиков в протеусе разными
Разнае.
Цитата:
ну и задержками поиграть попробовать
Куда их тыкать?
Цитата:
а Вы сначала попробуйте инициализировать шину а потом искать датчики
Пробовал. Бестолку.
Вложения:
Тип файла: rar Cooler.rar (67.9 Кб, 113 просмотров)
prw07 вне форума  
Непрочитано 12.01.2012, 14:39  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение от gres_go Посмотреть сообщение
ООО..., а Вы сначала попробуйте инициализировать шину а потом искать датчики
ТС Вас недопонял, надо было прямо сказать - сначала все инициализировать, а самое главное сам МК, а уж потом шарить датчики.

Сообщение от prw07 Посмотреть сообщение
Забыл прикрепить проект. Вот он.
Вот с этого и надо было... А вы всегда так - сначала писаете, потом штаны снимаете?
Странная логика - сначала поискать датчики, а только потом провести инициализацию микроконтроллера и т.д.
Держите, болезный. Кстати, там еще кое что выкинуть можно и поправить, и еще я Вам нарочно оставил temp-ы со старыми адресами в окне Watch и добавил с новыми, после перетаскивания devices=w1_search... в правильное место. Держите окно AVR Variables включенным, чтоб преиодически, после очередной перекомпиляции проверять - не уехали ли у Вас переменные на новое место.
Вложения:
Тип файла: rar Cooler1.rar (83.2 Кб, 153 просмотров)
Halex07 вне форума  
Непрочитано 13.01.2012, 11:00  
prw07
Частый гость
 
Регистрация: 01.02.2011
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
prw07 на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

Halex07 спасибо за помощь (весьма порадовали коментарии). Благодаря Вам разобрался, хотя Вы не совсем правы оказались.

Если сделать так как Вы сказали, но разместить этот код перед настройкой предделителя:

Код:
void main(void) 
{ 
unsigned char devices;     
w1_init();   
devices=w1_search(0xf0,rom_codes);      
ds18b20_init(&rom_codes[0][0],20,55,DS18B20_9BIT_RES); 
ds18b20_init(&rom_codes[1][0],20,55,DS18B20_9BIT_RES);

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
то все-равно не работает, а вот если // Crystal Oscillator division factor: поставить первым, а инициализацию и поиск датчика потом, то работает. И даже можно сначала пописать, а потом штаны снимать. Все-равно работает. Вот так:
Код:
void main(void) 
{ 
unsigned char devices;        

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

devices=w1_search(0xf0,rom_codes);     
w1_init();   
ds18b20_init(&rom_codes[0][0],20,55,DS18B20_9BIT_RES); 
ds18b20_init(&rom_codes[1][0],20,55,DS18B20_9BIT_RES);
А Мега8 работала с тем же кодом вероятно потому что настройка предделителя в программе не определяется. Только фьюзами.
prw07 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WH1602 и Tiny2313 maruda_v Микроконтроллеры, АЦП, память и т.д 100 01.05.2013 13:37
Не просыпается tiny2313 по INTO TechMike Микроконтроллеры, АЦП, память и т.д 25 06.02.2011 18:07
Proteus - подключение DS18B20 через USB или Com-порт Leva007 Proteus 16 27.11.2010 22:25
Atmega8 и tiny2313 NA1S Микроконтроллеры, АЦП, память и т.д 1 13.12.2008 09:43
USART Tiny2313 avrastorguev Микроконтроллеры, АЦП, память и т.д 2 04.03.2006 02:59


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


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