سلام دوستان
توی تایپیک مربوط به pic هر چی گشتم درباره ی سنسور ds18b20 مطلبی نبود.
من می خواستم 4 تا از این سنسورها را همزمان به یک پین میکرو متصل کنم. توی سایت های خارجی یه برنامه برای راه اندازی سنسور پیدا کردم. با کمی تغییرات تست کردم درست جواب داد. اما نمی دونم برای 4 سنسور باید چکار کنم.
این کتابخانه سنسور برای ccs
اینم کد برنامه اصلی:
با تشکر
توی تایپیک مربوط به pic هر چی گشتم درباره ی سنسور ds18b20 مطلبی نبود.
من می خواستم 4 تا از این سنسورها را همزمان به یک پین میکرو متصل کنم. توی سایت های خارجی یه برنامه برای راه اندازی سنسور پیدا کردم. با کمی تغییرات تست کردم درست جواب داد. اما نمی دونم برای 4 سنسور باید چکار کنم.
این کتابخانه سنسور برای ccs
کد:
#define DS1820_WIRE_PIN PIN_A0 //ds1820 data baca?? //sens?r için sabitler #define DS1820_SKIP_ROM 0xCC #define DS1820_READ_SCRATCHPAD 0xBE #define DS1820_CONVERT_T 0x44 static char g_shiftBit, g_dataOut; static long g_temperature, g_dataInput; void resetDS1820(void) { output_low(DS1820_WIRE_PIN); //1-wire resetleme için s?f?ra çekilir delay_us(500); // sens?rün haz?rlanmas? için beklenir. output_float(DS1820_WIRE_PIN); //1-wire bir yap?l?r delay_us(500); // sens?rün haz?rlanmas? için beklenir. } void writeDS1820(void) { for (g_shiftBit = 1; g_shiftBit <= 8; ++g_shiftBit) { output_low(DS1820_WIRE_PIN); // Sens?re yazma i?lemine ba?lamak için 1-wire s?f?ra çekilir. delay_us(2); output_bit(DS1820_WIRE_PIN, shift_right(&g_dataOut, 1, 0)); // yaz?lacak bilgi 1-wire'da delay_us(60); // Yazma i?lemi zaman? doldurulur. output_float(DS1820_WIRE_PIN); // 1-wire bir yap?l?r, delay_us(2); // 1us'den fazla beklenir. } } void readDS1820(void) { g_dataInput = 0; for ( g_shiftBit = 1; g_shiftBit <= 16; ++g_shiftBit ) { output_low(DS1820_WIRE_PIN); //Sens?rden okuma i?lemi içinl 1-wire s?f?ra çekilir. delay_us(2); output_float(DS1820_WIRE_PIN); //1-wire(data) bir yap?l?r, delay_us(8); // Sens?rün kendine gelmesi beklenir, shift_right ( &g_dataInput, 2, input ( DS1820_WIRE_PIN )); // sonuc bilgisi al?n?r delay_us(120); //Okuma i?lemi zaman? doldurulur. } } void waitForConversion (void) { while(TRUE) { output_low(DS1820_WIRE_PIN); delay_us(5); output_float(DS1820_WIRE_PIN); delay_us(5); if (input(DS1820_WIRE_PIN) == 1) { break; } delay_us(55); } } long ds1820_read() { resetDS1820(); g_dataOut = DS1820_SKIP_ROM; writeDS1820(); g_dataOut = DS1820_CONVERT_T; writeDS1820(); waitForConversion(); resetDS1820(); g_dataOut = DS1820_SKIP_ROM; writeDS1820(); g_dataOut = DS1820_READ_SCRATCHPAD; writeDS1820(); readDS1820(); g_temperature = g_dataInput ; //ds18s20 için bu de?er 2 olacakt?r return g_temperature; }
کد:
#include <16F887.h> #use delay(clock=20000000) #FUSES NOWDT,HS #define use_portD_lcd True #include <lcd.c> #include "ds18b20_1.c" void main(void) { float temperature; lcd_init(); printf(lcd_putc,"start"); while(1) { temperature = ds1820_read(); temperature=(float)temperature/16; printf(lcd_putc,"\f%.4f",temperature); } }
دیدگاه