Professional Documents
Culture Documents
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
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>
Kt qu:
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');
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)