Lap trinh vi dieu khien - Đo lường đa điểm với DS18b20 dùng AVR
XIN CHÀO CÁC BẠN...!Sau khi test thử nghiệm thành công, hôm nay lap trinh vi dieu khien xin giới thiệu với các bạn CODE sử dụng DS18b20 trong đo lường đa điểm (Version 1.0.0 ^^) cùng vi điều khiển Atmega 8. Cụ thể là mình sẽ đo nhiệt độ tại nhiều nơi sử dụng nhiều cảm biến DS18b20. Các cảm biến này cùng được kết nối trên 1 dây DATA (theo chuẩn 1 Wire):
- Trong code của mình các bạn có thể cấu hình lại số lượng DS18b20 tối đa ở trên Bus (mình đang cho là 8 con). Ở mạch thực tế, mình chỉ mới sử dụng 5 cảm biến DS18b20, giá trị nhiệt độ tại 5 điểm sẽ liên tục được cập nhật và hiển thị lên LCD1602.
- Mình dùng trình biên dịch CodeVisionAVR, các bạn vào CodeWizardAVR --> 1 Wire, sau đó chọn chân DATA và tích vào Enable, Multiple Devices để lấy thư viện sử dụng nhiều DS18b20 trên 1 Bus.
Code Test V1.0.0 (lap trinh c):
HTML:
#include <main.h> #include <var.h> void main(void) { unsigned char i,j; float Temp; char Lcd_Buffer[33]; // Input/Output Ports initialization // 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 // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0xff; 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=0xff; DDRD=0x00; // KHOI TAO CHUAN 1 WIRE // 1 Wire Data port: PORTC // 1 Wire Data bit: 5 // Note: 1 Wire port settings must be specified in the // Project|Configure|C Compiler|Libraries|1 Wire IDE menu. w1_init(); lcd_init(16); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(" MINHHAGROUP"); lcd_gotoxy(0,1); lcd_puts("1 WIRE BUS DEMO"); delay_ms(2000); lcd_clear(); // Xac dinh so IC DS18b20 co tren Bus ds18b20_devices = w1_search(0xf0,ds18b20_rom_codes); sprintf(Lcd_Buffer,"SO THIET BI\nDS18B20: %u",ds18b20_devices); lcd_puts(Lcd_Buffer); delay_ms(3000); /* //Hien thi ROM CODE cua tung IC tren Bus if (ds18b20_devices) { for (i=0;i<ds18b20_devices;i++) { sprintf(Lcd_Buffer," IC DS18b20 #%u\nROM CODE:",i+1); lcd_clear(); lcd_puts(Lcd_Buffer); delay_ms(2000); lcd_clear(); for (j=0;j<8;j++) { sprintf(Lcd_Buffer,"%02X ",ds18b20_rom_codes[i][j]); lcd_puts(Lcd_Buffer); if(j==3) lcd_gotoxy(0,1); }; delay_ms(2000); }; } else while (1); // Khong co IC tren Bus */ // Cau hinh do phan giai 12 Bit cho cac IC DS18b20 tren Bus for (i=0;i<ds18b20_devices;) if (!ds18b20_init(&ds18b20_rom_codes[i++][0],20,30,DS18B20_12BIT_RES)) { sprintf(Lcd_Buffer,"Init error for\ndevice #%u",i); lcd_clear(); lcd_puts(Lcd_Buffer); while (1); // Qua trinh khoi tao co loi }; /* lcd_clear(); lcd_gotoxy(0,0); lcd_puts("NHIET DO TAI:"); */ while (1) { j=1; // Cap nhat nhiet do tai cac diem va hien thi len LCD1602 for (i=0;i<ds18b20_devices;i++) { Temp = ds18b20_temperature(&ds18b20_rom_codes[i][0]); sprintf(Lcd_Buffer,"t%u=%2.2f\xdfC",j++,Temp); lcd_clear(); lcd_puts(Lcd_Buffer); delay_ms(1500); } } } // ------------------END OF FILE-------------------- // -------------------------------------------------
Chúc các bạn tu hoc lap trinh thành công!!!Nguồn Lap trinh vi dieu khien