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

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

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

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

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

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

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

 
Опции темы
Непрочитано 30.07.2010, 09:27  
TREI-Kaa
Прохожий
 
Регистрация: 30.07.2010
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TREI-Kaa на пути к лучшему
По умолчанию Взять температуру ds18s20

Доброго времени суток,

Люди добрые, подскажите чем именно нужно воспользоваться, чтобы на терминал приходила информация о нынешней температуре на датчике.
у меня пока что работает только "опрос", т.е. ATmega128 считает сколько всего различных датчиков прикреплену на эту шину (1-Wire) и выдает их серийные номера.
не знаю, как именно, правильно задать команду на температуру

З.Ы. Прога на Си в CodeVisionAVR, а моделирую в Proteus.
Реклама:
TREI-Kaa вне форума  
Непрочитано 30.07.2010, 09:29  
TREI-Kaa
Прохожий
 
Регистрация: 30.07.2010
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TREI-Kaa на пути к лучшему
По умолчанию Re: взять температуру ds18s20

привожу листинг..ну какой есть, (большей частью сгенерированный CodeWizard-ом)

/************************************************** ***
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mailffice@hpinfotech.com

Project :
Version :
Date : 14.07.2010
Author : Alex
Company : Home
Comments:


Chip type : ATmega128
Program type : Application
Clock frequency : 14,745600 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1024
************************************************** ***/

#include ‹mega128.h›

// 1 Wire Bus functions
#asm
.equ __w1_port=0x12 ;PORTD
.equ __w1_bit=0
#endasm
#include ‹1wire.h›

// DS1820 Temperature Sensor functions
#include ‹ds1820.h›

// maximum number of DS1820 devices
// connected to the 1 Wire bus
#define MAX_DS1820 8
// number of DS1820 devices
// connected to the 1 Wire bus
unsigned char ds1820_devices;
// DS1820 devices ROM code storage area,
// 9 bytes are used for each device
// (see the w1_search function description in the help)
unsigned char ds1820_rom_codes[MAX_DS1820,9];

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1‹‹FE)
#define PARITY_ERROR (1‹‹UPE)
#define DATA_OVERRUN (1‹‹OVR)
#define DATA_REGISTER_EMPTY (1‹‹UDRE)
#define RX_COMPLETE (1‹‹RXC)
#define MAX_DEVICES 8

// USART0 Receiver buffer
#define RX_BUFFER_SIZE0 8
char rx_buffer0[RX_BUFFER_SIZE0];

#if RX_BUFFER_SIZE0‹256
unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
#else
unsigned int rx_wr_index0,rx_rd_index0,rx_counter0;
#endif

// This flag is set on USART0 Receiver buffer overflow
bit rx_buffer_overflow0;

// USART0 Receiver interrupt service routine
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer0[rx_wr_index0]=data;
if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
if (++rx_counter0 == RX_BUFFER_SIZE0)
{
rx_counter0=0;
rx_buffer_overflow0=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART0 Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0];
if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART0 Transmitter buffer
#define TX_BUFFER_SIZE0 8
char tx_buffer0[TX_BUFFER_SIZE0];

#if TX_BUFFER_SIZE0‹256
unsigned char tx_wr_index0,tx_rd_index0,tx_counter0;
#else
unsigned int tx_wr_index0,tx_rd_index0,tx_counter0;
#endif

// USART0 Transmitter interrupt service routine
interrupt [USART0_TXC] void usart0_tx_isr(void)
{
if (tx_counter0)
{
--tx_counter0;
UDR0=tx_buffer0[tx_rd_index0];
if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART0 Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter0 == TX_BUFFER_SIZE0);
#asm("cli")
if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0))
{
tx_buffer0[tx_wr_index0]=c;
if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;
++tx_counter0;
}
else
UDR0=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include ‹stdio.h›

// Declare your global variables here

void putstring(char *pointer)
{
int i = 0;
while(pointer[i] != '\0')
{
putchar(pointer[i]);
i++;
}
}



unsigned char k,j,devices;
unsigned char n=1;
unsigned char DS1990_FAMILY_CODE, DS2405_FAMILY_CODE, DS1822_FAMILY_CODE, DS2430_FAMILY_CODE, DS18S20_FAMILY_CODE, DS2431_FAMILY_CODE, DS2433_FAMILY_CODE;

void main(void)
{
unsigned char devices;
long i;
char lcd_buffer[33];
unsigned char rom_code[MAX_DEVICES,9];

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 9600
UCSR0A=0x00;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x5F;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Determine the number of DS1820 devices
// connected to the 1 Wire bus
//ds1820_devices=w1_search(0xf0,ds1820_rom_codes);

// Global enable interrupts
#asm("sei")


while (1)
{
devices=w1_search(0xf0,rom_code);
sprintf(lcd_buffer,"%u device(s) found\n\r",devices);
putstring(lcd_buffer);
/*
putchar (0x0A);
putchar (0x0D); */

for(i = 300000; i; i--);

for (k=0;k‹devices;k++)
{
// Acknowledge DS1990 family code.
if (rom_code[k,0]==DS1990_FAMILY_CODE)
printf("DS1990 #%u serial number:",n++);
// Acknowledge DS2405s family code.
else if (rom_code[k,0]==DS2405_FAMILY_CODE)
printf("DS2405 #%u serial number:",n++);
// Acknowledge DS1822s family code.
else if (rom_code[k,0]==DS1822_FAMILY_CODE)
printf("DS1822 #%u serial number:",n++);
// Acknowledge DS2430s family code.
else if (rom_code[k,0]==DS2430_FAMILY_CODE)
printf("DS2430 #%u serial number:",n++);
// Acknowledge DS18S20s family code.
else if (rom_code[k,0]==DS18S20_FAMILY_CODE)
printf("DS18S20 #%u serial number:",n++);
// Acknowledge DS2431 family code.
else if (rom_code[k,0]==DS2431_FAMILY_CODE)
printf("DS2431 #%u serial number:",n++);
// Acknowledge DS2433 family code.
else if (rom_code[k,0]==DS2433_FAMILY_CODE)
printf("DS2433 #%u serial number:",n++);

for (j=1;j‹=6;j++)
printf(" %02X",rom_code[k,j]);

printf("\n\r");
}

// Place your code here

};


}
TREI-Kaa вне форума  
Непрочитано 30.07.2010, 09:55  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию Re: Взять температуру ds18s20

посмотрите пример в папочке cvavr\examples\DS1820\ или в help-e есть описание работы с библиотеками

Последний раз редактировалось AndreiVV; 30.07.2010 в 09:57.
AndreiVV вне форума  
Непрочитано 30.07.2010, 10:11  
innovator_king
Прописка
 
Аватар для innovator_king
 
Регистрация: 12.05.2009
Сообщений: 232
Сказал спасибо: 56
Сказали Спасибо 43 раз(а) в 35 сообщении(ях)
innovator_king на пути к лучшему
По умолчанию Re: Взять температуру ds18s20

Если я не ошибаюсь, то нужно.
ДЛя первого датчика Reset - › Presence - › 55h - › 64 bit cod -› 44h . И так до последнего датчика.
Далее выдержать паузу (см. по даташиту) - время на передачу команды 44h всем датчикам.
Затем ДЛя первого датчика Reset - › Presence - › 55h - › 64 bit cod -› BEh -› читаем температуру с контрольной суммой . И так до последнего датчика.

А вообще в даташите есть таблица команд и таблица примера передачи/приёма информации.
innovator_king вне форума  
Непрочитано 30.07.2010, 13:21  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Взять температуру ds18s20

Сообщение от TREI-Kaa Посмотреть сообщение
а моделирую в Proteus.
Ну там же "все украдено до нас". И че тонны кода выкладывать.
Proteus 7 Professional\SAMPLES\VSM for AVR\One-Wire\DS18X20\
Готовый пример, причем на Си и при этом работает и выдает на терминал температуры. Ну а пример в CVAVR Вам уже указали.
Halex07 вне форума  
Непрочитано 30.07.2010, 17:56  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Взять температуру ds18s20

Пример почему надо пользоваться поиском

https://kazus.ru/forums/showthread.p...978#post180978
__________________
Найди путь или проложи сам!
MasterMushi вне форума  
Непрочитано 30.07.2010, 20:38  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: Взять температуру ds18s20

OFF: Рекомендую аналоговый датчик температуры от Микрочип - TC1047A в SOT23 - с ним очень удобно работать.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 31.07.2010, 03:05  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Взять температуру ds18s20

Сообщение от avr123-nm-ru Посмотреть сообщение
OFF: Рекомендую аналоговый датчик температуры от Микрочип - TC1047A в SOT23 - с ним очень удобно работать.
Там нужен АЦП который дает ошибку и наводки.Например как я тут заморачивался с ACS712 датчиком тока(у него 185 мВ на 1А).
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какие взять трансформаторы? rodjersuck Аудиотехника 2 26.07.2010 17:24
Какой длины взять провод-антенну digitest Электроника - это просто 7 12.02.2010 23:03
Подскажите пожалуйста .знатоки. где взять PADS 5 и 7 версий ,нормально работающий ,без демо-ограничений pinco Proteus, KiCAD и другие ECAD 7 25.01.2010 14:27
Где взять генератор ЧМ сигнала для Протеус NikMih_1 Proteus, KiCAD и другие ECAD 5 23.10.2009 18:48
8051 & DS18S20 & LM032L sidwilson Proteus 0 17.10.2009 17:16


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


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