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

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

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

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

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

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


 
Опции темы

DS18B20 + tiny2313 = -9999 в Proteus

Непрочитано 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.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
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.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
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.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
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.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: DS18B20 + tiny2313 = -9999 в Proteus

я уж не знаю просто код Рабочий
OlegNZH вне форума  
Непрочитано 12.01.2012, 02:53  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,693
Сказал спасибо: 28
Сказали Спасибо 4,526 раз(а) в 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,693
Сказал спасибо: 28
Сказали Спасибо 4,526 раз(а) в 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, время: 07:39.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.