11.01.2012, 17:41
|
|
Частый гость
Регистрация: 01.02.2011
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
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]);
};
} |
|
|
|
|
11.01.2012, 17:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
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.
|
|
|
|
11.01.2012, 18:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: DS18B20 + tiny2313 = -9999 в Proteus
у Вас есть
// 1 Wire Bus functions
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include ‹1wire.h›
Всё- должно фунциклировать ...проверяйте аппаратную часть
|
|
|
|
11.01.2012, 18:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
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")
|
|
|
|
11.01.2012, 18:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: DS18B20 + tiny2313 = -9999 в Proteus
я уж не знаю просто код Рабочий
|
|
|
|
12.01.2012, 02:53
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
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\
Последний раз редактировалось Halex07; 12.01.2012 в 02:58.
|
|
|
|
12.01.2012, 06:17
|
|
Прописка
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
|
Re: DS18B20 + tiny2313 = -9999 в Proteus
Частоты проца в CVAVR и протеусе должны быть одинаковы, адреса датчиков в протеусе разными, после поиска датчиков можно воспользоваться индикацией светодиодом на какой нибудь бит скажем(будете знать, нашли или нет), ну и задержками поиграть попробовать.
добавил:
ООО..., а Вы сначала попробуйте инициализировать шину а потом искать датчики
Последний раз редактировалось gres_go; 12.01.2012 в 06:19.
Причина: Добавил
|
|
|
|
12.01.2012, 10:48
|
|
Частый гость
Регистрация: 01.02.2011
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: DS18B20 + tiny2313 = -9999 в Proteus
Всем спасибо за помощь.
Забыл прикрепить проект. Вот он.
Сразу же скажу, что:
1.
Цитата:
|
Может провода не подключены ..или неправильно...
|
При подключении одного датчика и использовании записи temp=ds18b20_temperature(0) все работает. Значит подключены правильно. Да и при использовании того же кода для меги8 все работает.
2.
Цитата:
|
Проверьте адреса датчиков - картинка. Ну и еще правильные "подтяжки" смотрите примеры в самой проге
|
Адреса разные (мы уже это проходили) и подтяжка 4кОм есть. При использовании того же кода для меги8 все работает.
3.
Цитата:
|
Частоты проца в CVAVR и протеусе должны быть одинаковы
|
С этим тоже уже не раз сталкивался. Частоты проверял.
Цитата:
|
адреса датчиков в протеусе разными
|
Разнае.
Цитата:
|
ну и задержками поиграть попробовать
|
Куда их тыкать?
Цитата:
|
а Вы сначала попробуйте инициализировать шину а потом искать датчики
|
Пробовал. Бестолку.
|
|
|
|
12.01.2012, 14:39
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: DS18B20 + tiny2313 = -9999 в Proteus
Сообщение от gres_go
|
ООО..., а Вы сначала попробуйте инициализировать шину а потом искать датчики
|
ТС Вас недопонял, надо было прямо сказать - сначала все инициализировать, а самое главное сам МК, а уж потом шарить датчики.
Сообщение от prw07
|
Забыл прикрепить проект. Вот он.
|
Вот с этого и надо было... А вы всегда так - сначала писаете, потом штаны снимаете?
Странная логика - сначала поискать датчики, а только потом провести инициализацию микроконтроллера и т.д.
Держите, болезный. Кстати, там еще кое что выкинуть можно и поправить, и еще я Вам нарочно оставил temp-ы со старыми адресами в окне Watch и добавил с новыми, после перетаскивания devices=w1_search... в правильное место. Держите окно AVR Variables включенным, чтоб преиодически, после очередной перекомпиляции проверять - не уехали ли у Вас переменные на новое место.
|
|
|
|
13.01.2012, 11:00
|
|
Частый гость
Регистрация: 01.02.2011
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
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 работала с тем же кодом вероятно потому что настройка предделителя в программе не определяется. Только фьюзами.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:26.
|
|