Xuất phần cứng

Một phần của tài liệu Điều khiển quạt theo nhiệt độ và chuyển động (Trang 89)

- Trang bị thêm cho mô hình để có độ bền và tính thẩm mĩ cao hơn. - Điều khiển và giám sát hệ thống qua điện thoại.

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 76 5.2.2 Đề xuất phần mềm

- Nâng cấp phần mềm để hệ thống thông minh hơn. - Tìm hiểu thêm về điều khiển các thiết bị xoay chiều.

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 77

TÀI LIỆU THAM KHẢO

1. GS.Phạm Văn Ất “Kỹ thuật lập trình C cơ sở và nâng cao”, NXB Giao thông vận tải Hà Nội – 2006.

2. Lập trình và ghép nối máy tính.Nhà xuất bản khoa học kĩ thuật - 2003.

3. KS. Trần Văn Hùng “Kỹ thuật ứng dụng vi điều khiển”, Tài liệu lưu hành nội bộ Đại học Nha Trang.

4. Nguyễn Tấn Phước “Giáo trình Linh kiện điều khiển”,NXB Thành phố Hồ Chí Mính – 1988.

5. Các website tham khảo: + www.microchip.com. + www.PICvietnam.com.vn.

+ www.dientuvietnam.net + www.alldatasheet.com.

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 78

PHỤ LỤC Chương trình điều khiển

/**********************************************************/ This program was produced by the

CodeWizardAVR V1.24.6 Professional Automatic Program Generator

© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:office@hpinfotech.com Project : Version : Date : 4/1/2013 Author : F4CG Company : F4CG Comments:

Chip type : ATmega32 Program type : Application

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 79

Clock frequency : 12.000000 MHz Memory model : Small

External SRAM size : 0 Data Stack size : 512

*****************************************************/ #include <mega32.h>

#include <delay.h> #include <stdlib.h> #include <math.h>

#define dk_quat PORTD.5 #define cb PINB.0

unsigned char k=45; #define CLK PORTA.1 #define DATA_W PORTA.0 #define DATA_R PINA.0 #define DATA_X DDRA.0 #define TEMP 0x03 #define HUMI 0x05 #define RESET 0x1E

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 80 float d1C = -40.1; // 14bit float d2C = 0.01; // 14bit float C1 = -4.0; // 12bit float C2 = 0.0405; // 12bit float C3 = -0.0000028; // 12bit float t1 = 0.01; // 12bit float t2 = 0.00008; // 12bit float tempt, humi;

float RH_linear, RH_true; char a;

int th,da,pw,t;

int i;

// Alphanumeric LCD Module functions #asm

.equ __lcd_port=0x15 ;PORTC #endasm

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 81

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void) {

// Place your code here delay_ms(i); dk_quat=0; delay_us(10); dk_quat=1; }

// Declare your global variables here

void khoitao(void) {

// 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

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 82

// 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

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 83

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

DDRD=0x20;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected 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.

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 84

// Noise Canceler: Off

// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 85

// Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: On

// INT0 Mode: Rising Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40;

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

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 86

// Analog Comparator initialization // Analog Comparator: Off

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

SFIOR=0x00;

// LCD module initialization lcd_init(16);

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

}

/////////////////////////////////////////////////////////////////////////

void Hienthi_LCD(unsigned int so,unsigned char x,unsigned char y) {

unsigned int a,b,c,d,nguyen,du; nguyen = so/100;

du = so%100;

a=nguyen/10; // lay fan tram

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 87

c=du/10; // lay hang don vi d= du%10 ;

lcd_gotoxy(x,y); // ve vi tri x,y

lcd_putchar(a+48); // day ra hang tram, ma ascii lcd_putchar(b+48); // day ra hang chuc, ma ascii lcd_putsf(".");

lcd_putchar(c+48); // day ra hang don vi, ma ascii lcd_putchar(d+48); // day ra hang don vi, ma ascii }

///////////////////////////////////////////////////////////////////////// unsigned int SHT_Measure(char CMD)

{

// int i,j,k,l; char i,j,f,l; char m = 128;

unsigned int temp = 0; DATA_X = 1; //DDRA DATA_W = 1; //PORTA DDRA.1=1;

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 88

CLK = 0;

// Connection reset sequence for(i=0; i<10; i++) { CLK = 1;

delay_us(15); CLK = 0; delay_us(15); }

// initial transmistion pluses DATA_W = 1; delay_us(15); CLK = 1; delay_us(15); DATA_W = 0; delay_us(15); CLK = 0; delay_us(15); CLK = 1; delay_us(15);

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 89 DATA_W = 1; delay_us(15); CLK = 0; delay_us(15); //Transmit command. for(j=0; j<8; j++) { if(!(m & CMD)) DATA_W = 0; else DATA_W = 1; CLK = 1; delay_us(15); CLK = 0; delay_us(15); m >>= 1; }

//Check acknowledge pulse. return 0 if no pulse. DATA_X = 0;

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 90 CLK = 1; delay_us(15); if(DATA_R) return 0; CLK = 0; delay_us(15); while(!DATA_R); // wait until data is ready while(DATA_R); // get first byte MSB for(f=0;f<8;f++) { temp <<= 1; CLK = 1; delay_us(15); if(DATA_R) temp |= 1; CLK = 0; delay_us(15);

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 91 } // acknowledge pluse DATA_X = 1; DATA_W = 0; delay_us(15); CLK = 1; delay_us(15); CLK = 0; delay_us(15); DATA_X = 0; delay_us(15); // get second byte LS B for(l=0; l<8; l++) { temp <<= 1; CLK = 1; delay_us(15); if(DATA_R) temp |= 1;

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 92

CLK = 0; delay_us(15); }

// return value without CRC return temp;

}

/*****************************************************/ void Tinh_SHT10(void)

{

//read adc temperature value from SHT

tempt = SHT_Measure(TEMP); //calculate temperature in Celsius from value, //formula t = d1 + d2*SOt

tempt = d1C + (tempt * d2C)-2; th=tempt*100 ;

lcd_gotoxy(0,0);

lcd_putsf("Nhiet Do:"); Hienthi_LCD(th,10,0);

humi = SHT_Measure(HUMI); //read adc humidity value from SHT //formula RHlinear = C1 + C2*SOrh + C3*SOrh*SOrh %RH

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 93

//formula RHtrue = (Tc-25)*(t1+t2*SOrh)+RHlinear RH_true = (tempt-25)*(t1+(t2*humi))+ RH_linear; da= RH_true*100; lcd_gotoxy(0,1); lcd_putsf("DO Am :"); Hienthi_LCD(da,10,1); } ///////////////////////////////////////////////////////////////////////// void main(void) { khoitao(); while (1) { Tinh_SHT10(); if(cb==1) { if(tempt<26) { i=8;

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 94

}

if(( tempt>=26 )&&(tempt<28)) {

i=7; }

if(( tempt>=28 )&&(tempt<30)) {

i=6; }

if(( tempt>=30 )&&(tempt<31)) {

i=5; }

if(( tempt>=31 )&&(tempt<32)) {

i=4; }

if(( tempt>=32 )&&(tempt<33)) {

Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 95

i=2; }

if(( tempt>=33 )&&(tempt<35)) { i=1; } if(tempt>=35) { i=0; } } if(cb==0) { i=9; } }; } /**********************************************************/

Một phần của tài liệu Điều khiển quạt theo nhiệt độ và chuyển động (Trang 89)

Tải bản đầy đủ (PDF)

(109 trang)