You are on page 1of 16

Khi mch ca chng ta gm 3 phn: +''IN'':LM35-dng o nhit v xut ra gi tr in p tng ng +"X L":PIC16F877A-dng chuyn i gi tr in p c xut ra t LM35 bng cch

cch dng b ADC ca PIC. +Hin th:LCD v LED 7 on. o nhit ta dng b ADC trong PIC16F877A,mnh s trnh by c th di y:

o nhit dng LM35 + PIC16F877A + Hin th ting Vit trn LCD v LED 7 on

I.ADC trong CCS:


Nhng s la chn ny cho php ngi s dng nh hnh th v s dng b chuyn i t tn hiu tng t sang tn hiu s.Chng ch c sn trn thit b vi phn cng ADC.S la chn cho nhng chc nng v ch dn thay i ph thuc vo con chip v c lit k trong phn header file ca thit b.Trn 1 vi thit b c 2 b ADC c lp. i vi nhng chip ny b ADC th 2 c nh hnh th s dng chc nng ci t ADC th cp(V d setup_ADC2) Nhng chc nng c lin quan: Setup_adc(mode):Ci t ch ADC C php: setup_adc (mode); setup_adc2(mode); Thng s:mode-ch tn hiu tng t sang tn hiu s.S la chn hp l thay i ph thuc vo thit b.Xem nhng thit b c tp tin .h cho tt c s la chn.Mt vi s la chn tiu biu bao gm: ADC_OFF ADC_CLOCK_INTERNAL ADC_CLOCK_DIV_32 Tr v:Khng c nh ngha Chc nng: nh hnh th chuyn t tn hiu tng t sang tn hiu s Tin li:Ch c trong nhng thit b c b chuyn i tn hiu tng t sang tn hiu s Yu cu:Nhng hng s c nh ngha trong tp tin .h ca thit b V d: setup_adc_ports( ALL_ANALOG ); setup_adc(ADC_CLOCK_INTERNAL ); set_adc_channel( 0 ); value = read_adc(); setup_adc( ADC_OFF ); V d nhng tp tin: ex_admm.c Xem thm: setup_adc_ports(), set_adc_channel(), read_adc(), #device, ADC overview,xem tp tin header ca thit b c chn setup_adc_ports(value):Thit lp nhng chn ADC c sn chuyn t tn hiu tng t sang tn hiu s C php: setup_adc_ports (value) Thng s: value -Mt hng s c nh ngha trong tp tin .h ca thit b Tr v:Khng c nh ngha Chc nng:Ci t nhng chn ADC l tn hiu tng t,tn hiu s hoc mt s kt hp v in p tham chiu s dng khi tnh tan gi tr ADC.S kt hp cc chn tn hiu tng t c cho php thay i ph thuc vo con chip v c nh ngha bng cch s dng tng bit OR ghp nhng chn c chn cng vi nhau.Kim tra thit b bao gm tp tin cc chn v in p tham chiu c sp t trong danh sch han chnh.Hng s ALL_ANALOG v NO_ANALOG l hp l cho tt c con chip.Mt vi v d khc nh ngha chn l : ANALOG_RA3_REF- Kch hat tt c cc chn tn hiu tng t v chn RA3 l in p tham chiu RA0_RA1_RA3_ANALOG- Ch c chn RA0,RA1,RA3 l tn hiu tng t Tin li:Chc nng ny c sn trong cc thit b vi phn cng Analog/Digital Yu cu: Nhng hng s c nh ngha trong tp tin .h ca thit b V d: //Tt c cc chn analog setup_adc_ports( ALL_ANALOG ); Chn A0,A1,A3 l analog,v tt c cc chn cn li l digital. in p +5V c s dng nh in p tham chiu setup_adc_ports( RA0_RA1_RA3_ANALOG ); //Chn A0,A1 l analog,chn A3 c s dng cho in p tham chiu v tt c cc chn cn li l digital setup_adc_ports( A0_RA1_ANALOGRA3_REF ); V d nhng tp tin: ex_admm.c Xem them: setup_adc(), read_adc(), set_adc_channel(), ADC overview set_adc_channel(channel):Ch r nhng knh dung s dng cho vic gi Analog/Digital C php: set_adc_channel (chan) Thng s:Chn l s knh c chn.S chn bt u ti 0 v c t nhn trong datasheet AN0,AN1 Tr v:Khng c nh ngha Chc nng:Ch r nhng knh c s dng cho vic gi lnh READ_ADC().Hy bit rng bn phi ch 1 khang thii gian ngn sau khi thay i knh trc khi bn c th nhn c gi tr c hp l.Thi gian thay i ph thuc vo tr khng ca ngun u vo.Khang 10us ni chung l tt cho hu ht cc ng dng.Bn khng cn thay i knh trc mi ln c nu knh khng thay i Tin li:Chc nng ny c sn trong cc thit b vi phn cng Analog/Digital Yu cu:Khng cn th g V d: set_adc_channel(2); delay_us(10);

value = read_adc(); V d nhng tp tin: ex_admm.c Xem thm: read_adc(), setup_adc(), setup_adc_ports(), ADC overview read_adc(mode):Bt u qu trnh chuyn i v c gi tr.Ch ny c th cng iu khin chc nng. C php: value = read_adc ([mode]) Thng s: mode l mt thng s khng bt buc.Nu c s dng gi tr c th: ADC_START_AND_READ (Lin tc c,v y l mc nh ) ADC_START_ONLY (Bt u qu trnh chuyn i v tr v gi tr) ADC_READ_ONLY (c kt qu chuyn i cui cng ) Tr v:8 bit hoc 16 bit s nguyn ph thuc vo #DEVICE ADC= directive (directive:li ch dn,8 hoc 16). Chc nng: y l chc nng c gi tr s t b chuyn i tn hiu tng t sang tn hiu s.Gi lnh setup_adc(), setup_adc_ports() and set_adc_channel() nn c lm vi ln trc khi chc nng ny c gi.Dy gi tr tr v ph thuc vo s lng bit tb chuyn i Analog/Digital trong con chip v s sp t trong DEVICE ADC= directive nh sau: #DEVICE 8 bit 10 bit 11 bit 12 bit 16 bit ADC=8 00-FF 00-FF 00-FF 00-FF 00-FF ADC=10 x 0-3FF X 0-3FF x ADC=11 x x 0-7FF x x ADC=16 0-FF00 0-FFC0 0-FFEO 0-FFF0 0-FFFF Lu :X khng c nh ngha Tin li:Chc nng ny c sn trong cc thit b vi phn cng Analog/Digital Yu cu: Nhng chn c nh c nh ngha trong tp tin .h ca thit b V d: setup_adc( ADC_CLOCK_INTERNAL ); setup_adc_ports( ALL_ANALOG ); set_adc_channel(1); while ( input(PIN_B0) { delay_ms( 5000 ); value = read_adc(); printf("A/D value = %2x\n\r", value); } read_adc(ADC_START_ONLY); sleep(); value=read_adc(ADC_READ_ONLY); V d tp tin: ex_admm.c, ex_14kad.c Xem thm : setup_adc(), set_adc_channel(), setup_adc_ports(), #DEVICE, ADC overview ADC_done():Tr v 1 nu b chuyn i han thnh vic chuyn i ca n Tin x l c lin quan: #DEVICE ADC=xx : nh hnh th read_adc ri tr v knh thc.V d, s dng 1 con PIC vi 10 bit A/D bn c th s dng 8 hoc 10 cho xx- 8 s tr v bye c trng s cao nht,10 s tr v tan b gi tr c A/D 10 bit Cc ngt c lin quan: INT_AD: Ngt xy ra khi qu trnh chuyn i han tt INT_ADOF: Ngt xy ra khi qu trnh chuyn i trong thi gian ch Cc tp tin c lin quan: Khng c,tt c chc nng c ci t sn Cc thng s getenv() c lin quan: ADC_CHANNELS : S knh Analog/Digital ADC_RESOLUTION : S lng bit tr v bi lnh read_adc

II.LM35

y l cm bin nhit LM35 c 3 chn : 2 chn cp ngun v 1 chn xut in p ra ty theo nhit Nhit tng 1C th in p xut ra chn out ca LM35 tng 10mV

III. LCD
y l LCD 2 hng, mi hang 16 k t s dng LCD , ta hy c file LCD.C trong th vin Driver ca CCS. CCS hng dn cch ta i dy cho cc chn ca LCD, ng thi CCS vit sn cho ta cc hm thao tc cho LCD:

Cch ni dy:
// // // // // // // // // As defined in the following structure the pin connection is as follows: D0 enable D1 rs D2 rw D4 D4 D5 D5 D6 D6 D7 D7 LCD pins D0-D3 are not used and PIC D3 is not used.

Cc hm thng dng lcd_init() : l hm phi c bo rng s s dng LCD lcd_putc( char c) : hm xut k t ra LCD lcd_gotoxy( BYTE x, BYTE y) : hm cho php con tr nhy ti v tr (x,y) trn LCD M phng v d dng LCD bng Proteus: Code : #define <16f877a.h> #include "16F877A.h" #device *=16 adc=8 //#device PIC16F877A *=16 #use delay(clock=20000000) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=9) #include <LCD.C>

void main () { lcd_init(); lcd_putc("Do an ky thuat"); }

Kt qu:

IV.M rng:Hin th ting Vit trn LCD


Datasheet LCD vit bng ting Vit

Click here to download


Ti liu hng dn vit ting Vit ln LCD

Click here to download V.S nguyn l: y l s hin th nhit ra LCD:

y l s hin th nhit ra LED 7 on:

VI.S mch in PCB:

VII.Code o nhit dng LM35+PIC16F877A+hin th ting Vit trn LCD


Code:
#define<16f877a.h> #include"16f877A.h" #device adc=8 #use delay(clock=12000000) #FUSES NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT #include<lcd.c> int8 read; int8 ketqua[10]; int8 dem[10]; byte const CGRAM[24]={ 0X0E,0X00,0X0E,0X11,0X1F,0X10,0X0E,0X04, 0X01,0X03,0X01,0X07,0X09,0X09,0X07,0X00, 0X0E,0X00,0X0E,0X11,0X11,0X11,0X0E,0x04,}; byte const LED[10]={ 0b00000011, 0b10011111, 0b00100101, 0b00001101, 0b10011001, 0b01001001,

0b01000001, 0b00011111, 0b00000001, 0b00001001, }; void main() { int8 i,j,max,tam; int8 solan; set_tris_a(0xFF); set_tris_d(0x00); set_tris_b(0x00); set_tris_c(0x00); lcd_init(); lcd_send_byte(0,0x2D);// viet cau lenh lcd 4 bit , 2 hang , 5*10dots lcd_send_byte(0,0x40); // viet cau lenh , ra lenh cho lcd chi toi cgram //lcd_send_byte(0,0x07);// Dich sang trai khi co hanh dong ghi vao CGRAM for(i=0;i<24;i++) lcd_send_byte(1,CGRAM[I]);// viet du lieu vao cgram co dia chi la 0x00 ++ while(TRUE) { setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); for(i=0;i<10;i++) { if(adc_done()) { ketqua[i]=read_adc(); delay_us(20); } } setup_adc( ADC_OFF ); //Sau khi lay 10 gia tri xong thi tat ADC for(i=0;i<10;i++) { dem[i]=0; for(j=0;j<9;j++) { if(ketqua[i]==ketqua[j]) dem[i]++; } } tam=dem[0]; max=ketqua[0]; for(i=0;i<9;i++) { if(tam<=dem[i+1]) { tam=dem[i+1]; max=ketqua[i+1]; } } lcd_gotoxy(1,1); max=max/0.51; printf(lcd_putc,"Nhiet do max: %u",max); delay_us(20); //ting trung binh tam=0; for(i=0;i<10;i++) { tam=tam+ketqua[i]; } max=tam/10/0.51; LCD_GOTOXY(3,0); LCD_SEND_BYTE(1,'N'); LCD_SEND_BYTE(1,'h'); LCD_SEND_BYTE(1,'i'); LCD_SEND_BYTE(1,0x00); LCD_SEND_BYTE(1,'t'); LCD_SEND_BYTE(1,' '); LCD_SEND_BYTE(1,0x01); LCD_SEND_BYTE(1,0x02); LCD_SEND_BYTE(1,' '); LCD_SEND_BYTE(1,'T'); LCD_SEND_BYTE(1,'B');

LCD_SEND_BYTE(1,':'); printf(lcd_putc,"%u",max); lcd_send_byte(0,0x1c); delay_ms(1000); } }

VIII.Code o nhit dng LM35+PIC16F877A+Hin th LED 7 on


Code:
#define<16f877a.h> #include"16f877A.h" #device adc=8 #use delay(clock=12000000) #FUSES NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT int8 read; byte const LED[10]={ 0b00001001,//0 0b00111111,//1 0b10010001,//2 0b00010011,//3 0b00100111,//4 0b01000011,//5 0b01000001,//6 0b00011111,//7 0b00000000,//8 0b00000010,//9 }; void main() { int8 chuc,donvi; int1 done; int8 i; set_tris_a(0xFF); set_tris_d(0x00); set_tris_b(0x00); set_tris_c(0x00); setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); while(TRUE) { setup_adc(ADC_START_ONLY); done=adc_done(); while(!done) { done=adc_done(); } delay_ms(100); READ=READ_ADC(); for(i=0;i=200;i++) { chuc=read/10; donvi=read%10; output_low(pin_c0); output_b(led[chuc]); delay_ms(10); output_high(pin_c0); output_low(pin_c1); output_b(led[donvi]); delay_ms(10); output_high(pin_c1); } } }

IX.Thnh qu thc t:

c l cu dy (do nhm ln chn linh kin gia datasheet trn mng v linh kin ngoi thc t)

THE END CHC CC BN HC TT


Last edited by trongtuan_1109; 10-01-2011 at 10:36 PM.

You might also like