DS18B20 + tiny2313 = -9999 в Proteus

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
prw07
Мучитель микросхем
Сообщения: 403
Зарегистрирован: Ср янв 26, 2011 17:00:30

DS18B20 + tiny2313 = -9999 в Proteus

Сообщение prw07 »

Протеус выдает значение температуры -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 <ds18b20.h>  
#define MAX_DS1820 2                      //îïðåäåëÿåì êîëè÷åñòâî óñòðîéñòâ íà ëèíèè 1-wire  (â äàííîì ñëó÷àå 2 äàò÷èêà)
unsigned char rom_codes[MAX_DS1820][9];    //Îïðåäåëÿåì ìàññèâ äàííûõ-êîäîâ äàò÷èêîâ - ïî 9 ñèìâîëîâ â êàæäîé çàïèñè
#include <stdio.h>                                                  
#include <delay.h> 

volatile int temp,temp1;                   //  temp -  äàò÷èê

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();

while (1)
      {
        temp=ds18b20_temperature(&rom_codes[0][0]);           //â  temp çàíîñèì äàííûå  äàò÷èêà
        temp1=ds18b20_temperature(&rom_codes[1][0]); 

      };
}
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение pyzhman »

Prior on calling the the ds18b20_temperature function for the first time, the ds18b20_init function must be used to specify the desired temperature measurement resolution.
Docendo discimus
Реклама
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение Payalnick »

-9999, МК не может связаться с датчиком по ром-коду. И тестируй все в железе, у меня протеус гучит.
Помогите нупу в написании программ)
prw07
Мучитель микросхем
Сообщения: 403
Зарегистрирован: Ср янв 26, 2011 17:00:30

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение prw07 »

Prior on calling the the ds18b20_temperature function for the first time, the ds18b20_init function must be used to specify the desired temperature measurement resolution.
И как это сделать? И почему при том же коде на меге8 работает?
И тестируй все в железе, у меня протеус гучит.
Я не уверен что буду реализовывать этот проект. Пока просто изучаю.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение pyzhman »

Как это сделать описано в хелпе: в CV жмем F1, в строке поиска набираем ds18b20 и читаем.
Docendo discimus
Реклама
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2183
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение watchmaker »

Протеус имеет кучу глюков с дс18. Попробуй подцепить внешний 4k ohm цифровой резистор с dq на питание.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Реклама
prw07
Мучитель микросхем
Сообщения: 403
Зарегистрирован: Ср янв 26, 2011 17:00:30

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение prw07 »

Протеус имеет кучу глюков с дс18. Попробуй подцепить внешний 4k ohm цифровой резистор с dq на питание
есть этот резистор. толку-то
prw07
Мучитель микросхем
Сообщения: 403
Зарегистрирован: Ср янв 26, 2011 17:00:30

Re: DS18B20 + tiny2313 = -9999 в Proteus

Сообщение prw07 »

Как это сделать описано в хелпе: в CV жмем F1, в строке поиска набираем ds18b20 и читаем.
Добавил перед бесконечным цыклом это:

Код: Выделить всё

ds18b20_init(&rom_codes[0][0],20,55,DS18B20_9BIT_RES); 
ds18b20_init(&rom_codes[1][0],20,55,DS18B20_9BIT_RES);
И ничего не изменилось.

Вот весь код:

Код: Выделить всё

#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]); 

      };
}
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»