lap trinh AVR.docx

  • Upload
    qnu07

  • View
    243

  • Download
    1

Embed Size (px)

Citation preview

Bi 1. Lp trnh C trong CodeVisionAVRHm nay chng ta s tm hiu v C cho AVR, bi vit ny s lit k tt c cch khai bo C trongCodeVisionAVR.1. Khai bo th vinTa s dng khai bo #include, VD: #include Khai bo ny bo cho trnh bin dch bit ly file th vin trong th mc mc nh ca CAVRCch 2 l #include adc.hKhai bo ny trnh bin dch s tm file trong th mc Project ca ta.2. Khai bo tn thay thTa s dng khai bo #define BUT PINC.5TBUTs thay choPINC.5, tng t ta c th khai bo bt k d liu no bn mun #define Time 400.............3. Khai bo kiu d liu binKiuS ByteKhong gi tr

Char1-128 +127

Unsigned char10 255

Int2-32768 - +32767

Unsigned int20 - 65535

Long4-2147483648 - +2147483647

Unsigned long40 4294967295

Float4

VD:unsigned char time;hocunsigned int dem=1000; (Gn gi tr ban u cho bin, mc nh = 0)Khai bo nhiu bin chung mt kiu d liuunsigned char x=10, y=1, z, t;Lu : Khi s dng bin nu gi tr vt qu cho php s b trn v khng lu dc v d nh ta khai bo kiu 8bit unsigned char m ta mun lu gi tr 257 l b trn, ta phi dng kiu 16bit cha gi tr trn4. Khai d liu mng- Mng 1 chiu:unsigned char led[10];- Mng 2 chiu:unsigned char led[2][10];Cng thc d liu: 2x10 d liu- Mng 3 chiu:unsigned char led[5][2][10];Cng thc d liu: 5x2x10 d liu - Phc tp t s dng trong lp trnh...................Chn b nh lu mng, mc nh trong trnh bin dch lun lun l RAM nu bn khng khai bo g cho n, tit kim ti nguyn RAM cho cc bin khc ta s cho cc mng c nh vo trong ROM,lu ch mng c nh m ta khng thay i d liu trong qu trnh s dng.Rt n gin ta thm chflashvo trc khai bo ta s c nh sau:flashunsigned char led[10];Truy sut mng trong code kh l n gin, d liu u tin mang gi tr 0 v 0 l bt u ch khng phi l 1 u nha, VD:PORTD=led[0]; xuat gia tri u tin ca mngVi mng 2 chiu cng tng t ta xut theo cng thc (trc x,y)PORTD=led[1][2]; xuat gia tri th 13 ca mng theo khai boled[2][10]Nghe c v hi kh hiu ch ny ng k, ta hiu n gin nh sau nhm 10 d liu li thnh mt nhm ln y c 2 nhm ln, mi nhm ln s c 10 d liu bn trong nh vy ta s truy sutled[1][2] tc ly nhm ln th 2 v d liu trong nhm nm v tr th 3 trong mng.5. Khai bo b nh EEPROMy l khai bo c bit ch c trong CodeVisionAVR cc phn mm khc khng h tr, vi cc vit sau cc bn khng cn phi vit hm lu d liu vo EEPROM ni ca AVR na m trnh bin dch s t ng lm vic ny.n gin n ch l mt bin, tc ta cho th c v ghi vo bin ny nh cc bin bnh thng.Khai bo nh sau:eepromunsigned char abc;Tht l n gin ng khng, lc ny ta ch cn vitabc = 123;lu gi tr 123 vo eeprom ni, vy c ra th s nh th no. Qu n gin:data = abc; data l bin lu trong RAM v data s mang gi tr 123Cn bn mun ch nh a ch th thm@a_chVDeepromunsigned char abc@0x02;6. Khai bo chn giao tip xut nhpTrong AVR mi PORT ca n c ti 3 thanh ghi iu khin: DDRx, PINx, PORTx Trong khi 8051 ch c 1, PIC c 2 ph trch iu hng v xut nhp d liu.- Trong DDRx l thanh ghi iu hng, set ln 1 cho bit no l chn lm OUTPUT v set 0 l INPUT- Thanh ghi PINx l thanh ghi ly d liu v dng cho INPUT, ta s c d liu t thanh ghi ny- Thanh ghi PORTx l thanh ghi xut d liu ra chn vi iu khin, ta s ghi mc logic vo yVD:DDRD = 0xff; PORT D lm OUTPUTPORTD = 0xff; Xut mc 1 ra 8 chn caPORT Dabc = PIND; c trng thi logic trnPORT D lu vo bin abcTa c th s dng tr cu ni ca AVR trong trng hp lm INPUT bng cch khai bo set:DDRD = 0x00;PORTD = 0xff;Nu khng s dng tr cu ton b chn AVR s trng thi h. Khc hn vi 8051 ch P0 l hCodeVisionAVR cho php bn set bit cho tng chn ca PORTVD: PIND.6 , PORTD.2, DDRC.3Cc bn c th tm hiu thm mt s cch set bit trong thanh ghi cng nh kim tra bit no trong mt thanh ghi VD:while(!(UCSRA &(1 OK > Yes > OK

Chn chip v chn tn s dao ng cho chip y cc bn c th chn bt k th vin code sn no m bn mun CAVR s t ng to m v chn vo cho bn. Nh trn ta c th s dngLCD (LCD16x2...), ADC, Timer, PWM, WDT, I2C (DS1307), 1wire (DS18B20), SPI, UART, Analog Comparator....Cui cng ta tick vo biu tng hnh bnh rng lu cc file trong project li, lu tt c chung vo mt th mc:

Cc bn cn phi t tn cho 3 file quan trng khi to project:C, PRJ, CWP

B3. Dch code sang file HEX, ta bm vo biu tng Build trn thanh cng c

Trnh bin dch s hin ra mt bng thng bo, nu code khng vn g th nh sau:

Nu bo Errors th s ko to c file Hex, cn Warnings th vn to file hex. Nu c li ta ch cn click p vo tn li l n t tr ti dng b li:

B4. Ci t li mt s thng s cho project nh chn giao tip LCD, thch anh.... ta lm nh sau:Tick vo biu tng hnh ci c l

Hin ra hi thoi v cc bn chn cc Tab tng ng thay i:

Bi 3. Thit lp Fuse bit cho AVRCho cc bn hm nay chng ta s tm hiu v cch thit lp fuse bits cho vi iu khin AVR. Trong AVR c thit k sn mt s mch in v cc thit b h tr bn trong,chng c tc dng iu khin, debug, cp xung clock, lu tr.... iu khin cc mch in ny khi np chip chng ta phi cu hnh Fuse bit cho chng, hiu nm na l ng cu dao in hoc m cu dao in. VD nh ta thit lp ngun xung clock cho AVR: V trong AVR c tch hp mt mch in to dao ng cho chip ln n 8Mhz khi s dng mch ny cc bn khng cn phi mc thch anh cho chip.Mi loi chip avr u c mt cu hnh fuse khc nhau, y ta s ly v d cho mt s chip hay dng:ATmega8, ATmega16, ATmega32, .... Phn mm np Progisp:

Ch : Khi cu hnh Fuse bit l bit 0 s l kch hot, cn 1 l khng kch hotTa s set mt s Fuse ca cc chip trn:1. BODLEVERl bit chn mc in p tham chiu st p ngun, khi ta cu hnh kch hotBODEN.BODLEVER=0tc chn mc in p 4.0V, cn nuBODLEVER=1l chn mc in p 2.7VKhi in p ngun VCC m b st xung mc gii hn trn CHIP s t ng c RESET khng nh 8051 treo lun :)2. BODENl bit cho php mch pht hin st p ngun hot ng.3. JTAGENl bit cho php module JTAG hot ng, c tc dng kim tra hot ng trn chip v g li...Lu fuse ny vi chip ATmega32 khi mi mua v cc PIN:TCK, TMS, TDO v TDI ln ltPC2, PC3, PC4 v PC5 khng th s dng c, nu ta khng c vic g cn n ci ny th hy v hiu ha bng cch setJTAGEN=1 c th s dng cc chn trn nh cc PIN khc v nu ta cu hnhJTAGEN=0s khng s dng c cc chn trn.4. OCDENl bit cho php Debug, nu ta khng khai bo fuse ny thJTAGENv ngha khiJTAGEN=0. Khng dng Debug th ta setOCDEN=1, nu setOCDEN=0th chip s chy ch sleep mode (ng ng) v qu trnh debug bt u, ta khng th lm g vi chipTt nht ko s vo ci ny khng li c tng con chip ca mnh va mi mua v sao to ri th mt.5. EESAVEl bit cho php li (lu li) d liu EEPROM trong mi ln np li chip hay khng, nuEESAVE=0th ton b d liu trong EEPROM s khng b xa khi nap chip hoc ngc li.6. BOOT LOADERl chng trnh cho php np chip khng cn mch np, VD nh np qua UART.... cho php khch hng ca mnh c th t cp nht phn mm. lm c vic ny ta phi cu hnh fuse cho 3 bit sau:- BOOTRSTl fuse cho php chy chng trnh bootloader trong vng lu trbootloader.BOOTRST=1th a ch ca chng trnh s bt u t a ch 0x0000, cnBOOTRST=0th nh bt u l v tr u tin ca bootloader tc ctr bootloader c thc thi.- BOOTSZ1 vBOOTSZ0l 2 bit chn phn vng b nh chobootloader ta xem bng sau:BOOTSZ1BOOTSZ0Boot Size (words)Pagea ch

1125640x3F00- 0x3FFF

1051280x3E00- 0x3FFF

011024160x3C00-0x3FFF

002048320x3800 -0x3FFF

Trong cc ng dng khng i hi phi cp nht phn mm th ta mc nh, dnh b nh cho code.7. RSTDISBLl bit cho php s dng chn reset hay khng trn mt s chip nh ATmega8 c tch hp chung vi PINC.6. s dng chn ny lm chn RESET ta thit lp fuseRSTDISBL=1v ngc li nu ta mun s dng chn ny lm port xut nhp.8. WTDONcho php WTD9. SPIENcho php giao tip SPI10. Set xung nhip cho chip, gm 7 fuse:CKSEL3:0 (chn xung nhp), CKOPT (chn ch khuch i) vSUT1:0 (thi gian khi ng- ko dng, mc nh nh no SUT1:0=10 )CKSEL3:0Xung nhpNgun xung nhpCKOPT

00011MhzOnchip

00102MhzOnchip

00114MhzOnchip

01008MhzOnchip

10101-16MhzThch anh ngoi0

11111-16MhzThch anh ngoi0

10101-8MhzThch anh ngoi1

11111-8MhzThch anh ngoi1

Hng dn set fuse dng xung nhp RC onchip v thch anh ngoi

Cui cng sau khi cu hnh xong nh nhn nt Write ghi cu hnh vo chip nha!Qua bi vit ny cc bn c th yn tm khi np chng trnh cho AVR khng s b set nhm fuse.

Bi 4. Xut nhp Port n gin cho AVRCho cc bn, hm nay chng ta s tm hiu v lp trnh xut nhp port cho vi iu khin AVR. Vic xut nhp port rt n gin cc bn tham kho on code sau:Cc bn c ghi ch hiu cc cu lnh c tc dng ntn nha. (Ghi ch sau du // )1. iu khin xut d liu ra PORTD.0#include #include //Thu vien Ham delay chuan, Set clock CPU 8Mhz#define LED PORTD.0 //Chan PD0 gan LED/**************Ctr tao xung 1Hz dieu khien LED********************/void main(){ //Chuong trinh chinh DDRD.0=1; //Chan PD0 la chan xuat du lieu LED=0; //Cho LED tat delay_ms(2000); //Tao tre 2 giay while(1){ //Vong lap ctr - Vong lap vo tan LED=1; //LED sang delay_ms(500); //Tre 0.5 giay LED=0; //LED tat delay_ms(500); }}Mch nguyn l:

2. iu khin LED thng qua nt nhn:#include #include //Thu vien Ham delay chuan, Set clock CPU 8Mhz#define LED PORTD.0 //Chan PD0 gan LED#define BUT PINC.0 //Chan PC0 lam nut nhan/**************Ctr nhan nut dieu khien LED********************/void main(){ //Chuong trinh chinh DDRD.0=1; //Chan PD0 la chan xuat du lieu DDRC.0=0; //Chan PC0 la chan nhap du lieu PORTC.0=1; //Su dung tro cau chan PC0 LED=0; //Cho LED tat while(1){ //Vong lap ctr - Vong lap vo tan if(!BUT){ //Nhan nut thi LED chop 2 lan roi tat LED=1; //LED sang lan 1 delay_ms(200); LED=0; //LED tat delay_ms(500); LED=1; //LED sang lan 2 delay_ms(200); LED=0; //LED tat while(!BUT); //Neu nut van nhan thi ko lam gi ca } }}Mch nguyn l:

Qua bi vit ny cc bn s bit cu trc ca mt chng trnh trong C nh th no v cch iu khin port xut nhp vo ra ntn trc khi vo lp trnh nng cao.

Bi 5. Tng quan cc b Timer/Counter trn chip AVRVi iu khin AVR c thit k vi 3 bTimer/Countertheo th t Timer 0, Timer 1, Timer 2: C chc nng nh thi, m s kin, to xung iu rng PWM, cn chnh thi gian nh mt b RTC - Thi gian thc (ch c Timer 2)... Ta s xt tng b timer mt xem s khc nhau v ging nhau ca chng cc bn c th chn b timer tng thch vi ng dng ca bn:Ta s thay nh nghaTimer/Countergichung l Timer.1. Timer0:y l mt b nh thi c di 8bit, n hot ng tng t nh ch timer 8bit ca 8051 tc m t 0-255 v trn khi t 256 lc ny b m tr v 00H v c trn TOV0 c set ln 1, c th xy ra 1 ngt nu c khai bo ngt timer ny.Cc thanh ghi ph trch iu khin Timer0: Khi set bit ta ch set nhng bit no c gi tr bng 1 v ch set bng 0 khi bit ang mc 1 .TCCR0 (Timer/Counter Control Register):L thanh ghi iu khin qu trnh hot ng ca b timer076543210

- - - - - CS02CS01 CS00

Mc d l thanh ghi 8bit nhng ch c 3bit c s dng, c tc dng chn xung clock cho b timer0, c mi xung clock l b m c tng ln 1 n vTa c bng Set bit nh sauCS02CS01CS00Miu t chc nng

000Khng c xung clock - Timer0 Stop

001Fosc/1 - Bng xung nhp a vo chip

010Fosc/8 - Tn s thch anh chia 8

011Fosc/64- Tn s thch anh chia 64

100Fosc/256- Tn s thch anh chia 256

101Fosc/1024- Tn s thch anh chia 1024

110m s kin bn ngoi chn T0 cnh xung

111m s kin bn ngoi chn T0 cnh ln

TIMSK (Timer/Counter Interrupt Mask Register):L thanh ghi mt n ngt ta ch quan tm ti bitTOIE0, nu set bit ny ln 1 th s c ngt trn xy ra khi b m trn76543210

OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1 - TOIE0

TIFR (Timer/Counter Interrupt Flag Register):L thanh ghi lu trng thi c trn ca tt c cc timer, timer 0 ch c bitTOV0 l c trn v cng l c ch th ngtTCNT0:L thanh ghi cha gi tr m ca timer0, ta s ghi d liu khi to timer vo y, mc nh l 00H. Cch tnh gi tr da vo gi tr trn tr i gi tr cn t. thi gian tr ph thuc vo ngun xung clock a vo timer ci t thanh ghiTCCR0Code mu cch khi to timer0:TCCR0=(1