راهندازی چند سنسور دما بر روی یک خط ۱w

تومان

دانلود رایگان پروژه راهندازی چند سنسور دما DS18b20 بر روی یک خط 1w

توضیحات

دانلود رایگان پروژه راهندازی چند سنسور دما DS18b20 بر روی یک خط ۱w

همان طور که میدانید، سنسور ds18b20 یک سنسور دمای دیجیتال است که دمای اندازه گیری شده را به صورت دیجیتال و با استفاده از پروتکل تک سیم (۱w) انتقال میدهد.در این پروتکل ، که در واقع نوعی شبکه محصوب میشود، هر وسیله دارای یک آدرس یکتا میباشد که غیر قابل تغیر است و معمولا شرکت های سازنده قطعات آدرس مورد نظر را به آنها میدهند.

در محیط پرو تعوس میتوان برای هر DS18b20 یک آدرس تعریف کرد:

تنها نکته ای که در زمان شبیه سازی باید رعایت کرد، این است که هیچکدام از سنسور های دما نباید آدرس مشابهی داشته باشند.

این هم از کد میکرو:

/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
 
Project : 
Version : 
Date    : 2016/12/06
Author  : Esmaeill Maarfavi
Company : www.ioelectro.ir
Comments: 
 
 
Chip type               : ATmega8A
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/
 
#include <mega8.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
#include <1wire.h>
#include <ds18b20.h>
#include <alcd.h>
 
// maximum number of DS1820 devices
// connected to the 1 Wire bus
#define MAX_DS18b20 8
// number of DS1820 devices
// connected to the 1 Wire bus
unsigned char ds18b20_devices;
// DS1820 devices ROM code storage area,
// ۹ bytes are used for each device
// (see the w1_search function description in the help)
unsigned char ds18b20_rom_codes[MAX_DS18b20][9];
 
 
// Declare your global variables here
 
void main(void)
{
// Declare your local variables here
char lcd_b[33];
int i,c;
float temp[8];
// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
 
// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
 
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
 
 
// ۱ Wire Bus initialization
// ۱ Wire Data port: PORTC
// ۱ Wire Data bit: 0
// Note: 1 Wire port settings are specified in the
// Project|Configure|C Compiler|Libraries|1 Wire menu.
w1_init();
 
 
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);
 
lcd_gotoxy(0,0);
lcd_puts("www.ioelectro.ir");
delay_ms(500);
lcd_gotoxy(0,1);
lcd_puts("MULTIPLE DS18B20");
delay_ms(1000);
lcd_clear();
 
lcd_gotoxy(0,0);
lcd_puts("searching:");
delay_ms(100);
 
// Determine the number of DS1820 devices
// connected to the 1 Wire bus
ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes);
 
itoa(ds18b20_devices,lcd_b);
lcd_gotoxy(0,1);
lcd_puts(lcd_b);  
lcd_puts("device");
 
delay_ms(1000); 
 
lcd_clear();
for(i=0;i<ds18b20_devices;i++)
 {
 lcd_gotoxy(0,0);
 lcd_puts("init devices:");
 ds18b20_init(ds18b20_rom_codes[i],20,40,DS18B20_12BIT_RES);  
 lcd_gotoxy(0,1);
 sprintf(lcd_b,"%d%%",(int)(((float)(i+1)/ds18b20_devices)*100));
 lcd_puts(lcd_b); 
 delay_ms(200);  
 }
delay_ms(500);
lcd_clear();
 
while (1)
      {
      for(i=0;i<ds18b20_devices;i++)
       {
       for(c=0;c<=2;c++)
        {
        temp[i]=ds18b20_temperature(ds18b20_rom_codes[i]);
        if(ds18b20_devices>1)sprintf(lcd_b,"temp %d: %.2f\xdf""C",i+1,temp[i]);
        else  sprintf(lcd_b,"temp is: %.2f\xdf""C",temp[i]); 
        lcd_gotoxy(0,0);
        lcd_puts(lcd_b);
        }
       }
      }
}

نقد و بررسی‌ها

هیچ دیدگاهی برای این محصول نوشته نشده است.

اولین کسی باشید که دیدگاهی می نویسد “راهندازی چند سنسور دما بر روی یک خط ۱w”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *