توضیحات
دانلود رایگان پروژه راهندازی چند سنسور دما 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); } } } }
نقد و بررسیها
هیچ دیدگاهی برای این محصول نوشته نشده است.