Giáo trình Kỹ thuật vi xử lý - Trường Cao đẳng Công nghiệp Hải Phòng

GIỚI THIỆU: Động cơ một chiều là loại động cơ có cấu tạo và cách điều khiển đơn giản nhất, tốc độ động cơ được điều khiển thông qua điện áp cấp vào 2 đầu động cơ. Động cơ một chiều được ứng dụng rất rộng rãi trong các hệ thống tự động. Trong bài này gồm có sơ đồ và điều khiển động cơ DC bằng ATMEGA. Mục tiêu: Sau khi học xong bài học này người học có khả năng: - Kiến thức: Trình bày được phương pháp kết nối điều khiển động cơ DC - Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển động cơ DC - Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập. Nội dung chính:

pdf75 trang | Chia sẻ: Tiểu Khải Minh | Ngày: 23/02/2024 | Lượt xem: 69 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Giáo trình Kỹ thuật vi xử lý - Trường Cao đẳng Công nghiệp Hải Phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
switch (n) { case 1: printf (“một\n”) ; break ; case 2: ; case 3: printf (“hai hoặc ba\n”) ; break ; case 4: printf (“bốn\n”) ; break ; } printf (“cuối switch\n”) ; Sẽ cho kết quả như sau: hai hoặc ba cuối switch Thực ra trong case 4 không cần lệnh break * Lệnh LÖnh For : Có ph¸p : for ( bt1; bt2 ; bt3) { lenh 1; lenh 2; lenhn; } - Gi¶i thÝch : + bt1: lµ to¸n tö g¸n ®Ó t¹o gi¸ trÞ ban ®Çu cho biÕn ®iÒu khiÓn. + bt2: biÓu thøc ®iÒu kiÖn ®Ó thùc hiÖn vßng lÆp. + bt3: biÓu thøc t¨ng gi¸ trÞ cña biÕn ®iÒu khiÓn cña vßng lÆp. * VÝ dô: void tre(x) { int i,j; 22 for(i=0;i<x;i++) for(j=0;j<1000;j++) { } } * C©u lÖnh while C©u lÖnh vßng lÆp while: Cú pháp: while( §iÒu kiÖn) { //C¸c c©u lÖnh } *Gi¶i thÝch: Thùc hiÖn lÆp c¸c c©u lÖnh khi ®iÒu kiÖn ®óng, nÕu điều kiện sai thi tho¸t khái vßng lÆp Đặc biệt: Tạo vòng lặp mãi mãi, rất hay đùng trong lập trình VXL. Chương trình chính sẽ được viết trong dấu ngoặc. while(1) { } 1.10 Khai báo thư viện Là nơi chứa thông tin về cấu hình cứng của loại vi điều khiển Ví dụ: #include Thư viện có thể thực hiện một số chức năng cụ thể và có thể sử dụng như một chương trình con Ví dụ: #include 1.11 Khai báo cổng vào ra Thiết lập cổng vào ra: Khi xem xét đến các cổng I/O của AVR thì ta phải xét tới 3 thanh ghi bit DDxn,PORTxn,PINxn. -Các bit DDxn để truy cập cho địa chỉ xuất nhập DDRx. Bit DDxn trong thanh ghi DDRx dùng để điều khiển hướng dữ liệu của các chân của cổng này.Khi ghi giá trị logic ‘0’ vào bất kì bit nào của thanh ghi này thì nó sẽ trở thành lối vào,còn ghi ‘1’ vào bit đó thì nó trở thành lối ra. -Các bit PORTxn để truy cập tại địa chỉ xuất nhập PORTx. Khi PORTx được ghi giá trị 1 khi các chân có cấu tạo như cổng ra thì điện trở kéo là chủ động(được nối với cổng).Ngắt điện trở kéo ra, PORTx được ghi giá trị 0 hoặc các chân có dạng như cổng ra.Các chân của cổng là 3 trạng thái khi 1 điều kiện reset là tích cực thậm chí xung đồng hồ không hoạt 23 động. -Các bit PINxn để truy cập tại địa chỉ xuất nhập PINx. PINx là các cổng chỉ để đọc,các cổng này có thể đọc trạng thái logic của PORTx.PINx không phải là thanh ghi,việc đọc PINx cho phép ta đọc giá trị logic trên các chân của PORTx.chú ý PINx không phải là thanh ghi,việc đọc PINx cho phép ta đọc giá trị logic trên các chân của PORTx. Nếu PORTxn được ghi giá trị logic ‘1’ khi các chân của cổng có dạng như chân ra ,các chân có giá trị ‘1’.Nếu PORTxn ghi giá trị ‘0’ khi các chân của cổng có dạng như chân ra thì các chân đó có giá trị ‘0’. Các cổng của AVR đều có thể đọc,ghi. Để thiết lập 1 cổng là cổng vào ,ra thì ta tác động tới các bit DDxn, PORTxn,PINxn.ta có thể thiết lập để từng bit làm cổng vào,ra cứ không chỉ với cổng,như vậy ta có thể sử lí tới từng bit,đây chính là điểm mạnh của các dòng Vi điều khiển 8 bit. - Các bit DDxn để truy cập cho địa chỉ xuất nhập DDRx. Bit DDxn trong thanh ghi DDRx dùng để điều khiển hướng dữ liệu của các chân của cổng này.Khi ghi giá trị logic ‘0’ vào bất kì bit nào của thanh ghi này thì nó sẽ trở thành lối vào,còn ghi ‘1’ vào bit đó thì nó trở thành lối ra. - Các bit PORTxn để truy cập tại địa chỉ xuất nhập PORTx. Khi PORTx được ghi giá trị 1 khi các chân có cấu tạo như cổng ra thì điện trở kéo là chủ động (được nối với cổng). Ngắt điện trở kéo ra, PORTx được ghi giá trị 0 hoặc các chân có dạng như cổng ra.Các chân của cổng là 3 trạng thái khi 1 điều kiện reset là tích cực thậm chí xung đồng hồ không hoạt động. 24 Ví dụ như trên hình:các bit 0,1,2,4,7 của PORTA làm chân ra có trở kéo,còn các bit còn lại làm chân vào. Khi đã thiết lập xong thì các bit 0,1,2,4,7 sẽ có thể xuất dữ liệu ra còn các bit còn lại có thể nhận dữ liệu vào. Ví dụ : Ta muốn ghi dữ liệu giá trị logic ’0’ ra PORTA.0 để bật tắt một Led thì: PORTA.0=1; Ta muốn đọc dữ liệu là một bit từ chân 3 của PORTA: Bit x; x=PINA.3; Cũng như vậy khi ta thiết lập PORTA làm cổng ra thì ta có thể xuất dữ liệu ra từ PORTA: PORTA=0xAA; Còn nếu ta thiết lập PORTA làm cổng vào và giá trị hiện thời của PORTA: Thì sau câu lệnh đọc giá trị từ PORTA: x=PORTA thì x=0x55. Khi thiết lập PORTA làm cổng ra thì khi reset giá trị của PORTA là PORTA=0xFF; Khi thiết lập PORTA làm cổng vào thì khi reset giá trị của PORTA là PORTA=0x00; PORTA Việc thiết lập cổng vào ra là một việc quan trọng vì tùy theo mục đích sử dụng các cổng nào làm cổng vào ra,thì ta phải thiết lập đúng thì mới có thể sử dụng được, động tác này khác với họ vi điều khiển 8051- AT8951. 2. SƠ ĐỒ ĐIỀU KHIỂN I/O VỚI LED ĐƠN 25 Sơ đồ 1: Sơ đồ 2: +5v + C15 Tu hoa R 3 1 0 K +5v SW3 S W X 2 1 2 0 0 0 0 0 0 C13 1 0 4 C16 1 0 4 DS1 LED0 R 2 3 3 0 PA2 3 8 PA3 3 7 PA4 3 6 PA5 3 5 PA6 3 4 PA7 3 3 PC0/SCL 2 2 PC1/SDA 2 3 PC2(TCK) 2 4 PC3(TMS) 2 5 PC4(TD0) 2 6 PC5(TDI) 2 7 PC6(TOSC1) 2 8 PD0/RX 1 4 PD1/TX 1 5 XTAL2 1 2 G N D 1 1 Vcc 1 0 RESET 9 PD2/SQW 1 6 PD3/IR 1 7 PD4/SPEAKER 1 8 PD5/PULSE 1 9 (XCK/T0)PB0 1 (T1)PB1 2 (INT2/AIN0)PB2 3 (OC0/AIN1)PB3 4 (SS)PB4 5 (MOSI)PB5 6 (MIS0)PB6 7 (SCK)PB7 8 XTAL1 1 3 AVCC 3 0 PC7(TOSC2) 2 9 AREF 3 2 G N D 3 1 PD6/DIR 2 0 PD7 2 1 PA1 3 9 PA0 4 0 U ? ATMEGA16 26 *Sơ đồ chân của ATMEGA16: AVR là theo công nghệ mới, với những tính năng rất mạnh được tích hợp trong chip của hãng Atmel .Do ra đời muộn hơn nên họ vi điều khiển AVR có nhiều tính năng mới đáp ứng tối đa nhu cầu của người sử dụng, khả năng tích hợp, sự mềm dẻo trong việc lập trình và rất tiện lợi. PB0/T0/XCK 1 PB1/T1 2 PB2/AIN0/INT2 3 PB3/AIN1/OC0 4 PB4/SS 5 PB5/MOSI 6 PB6/MISO 7 PB7/SCK 8 RESET 9 XTAL2 12 XTAL1 13 PD0/RXD 14 PD1/TXD 15 PD2/INT0 16 PD3/INT1 17 PD4/OC1B 18 PD5/OC1A 19 PD6/ICP1 20 PD7/OC2 21 PC0/SCL 22 PC1/SDA 23 PC2/TCK 24 PC3/TMS 25 PC4/TDO 26 PC5/TDI 27 PC6/TOSC1 28 PC7/TOSC2 29 PA7/ADC7 33 PA6/ADC6 34 PA5/ADC5 35 PA4/ADC4 36 PA3/ADC3 37 PA2/ADC2 38 PA1/ADC1 39 PA0/ADC0 40 AREF 32 AVCC 30 U1 ATMEGA16 - Chân 1 đến 8 : Cổng nhập xuất dữ liệu song song B ( PORTB ) nó có thể đc sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 D1 LED-BIBY D2 LED-BIBY D3 LED-BIBY D4 LED-BIBY D5D6 LED-BIBY D7 LED-BIBY D8 LED-BIBY 27 - Chân 9 : RESET để đưa chip về trạng thái ban đầu - Chân 10 : VCC cấp nguồn nuôi cho vi điều khiển - Chân 11,31 : GND 2 chân này được nối với nhau và nối đất - Chân 12,13 : 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngoài vào chip - Chân 14 đến 21 : Cổng nhập xuất dữ liệu song song D ( PORTD ) nó có thể đc sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu - Chân 22 đến 29 : Cổng nhập xuất dữ liệu song song C ( PORTC ) nó có thể đc sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu - Chân 30 : AVCC cấp điện áp so sánh cho bộ ADC - Chân 32 : AREF điện áp so sánh tín hiệu vào ADC - Chân 33 đến 40 : Cổng vào ra dữ liệu song song A ( PORTA ) ngoài ra nó còn đc tích hợp bộ chuyển đổi tín hiệu tương tự sang tín hiệu số ADC ( analog to digital converter. Kết nối phần cứng cho ATMEGA: Kết nối nguồn Nguồn 5V nối vào chân 30 và 10 Mass nối vào chân 11 và 31 Kết nối trên hai chân XTAL1 và XTAL2 Chân số 12 và 13 28 Kết nối chân RESET Chân RESET khi Vi điều khiển được cấp điện, hoặc đang hoạt động mà hệ thống bị lỗi cần tác động cho Vi điều khiển hoạt động trở lại, hoặc do người sử dụng muốn quay về trạng thái hoạt động ban đầu. Sơ đồ của ATMEGA128: PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 29 - Chân 44 đến 51 : PORTA - Chân 20 : RESET để đưa chip về trạng thái ban đầu - Chân 10 đến 17 : PORTB - Chân 35 đến 42 : PORTC - Chân 25 đến 32 : PORTD - Chân 2 đến 9 : PORTE - Chân 54 đến 61: PORTC - Chân 23,24 : 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngoài vào chip 3. ĐIỀU KHIỂN I/O VỚI LED ĐƠN 3.1 Hướng dẫn cài phần mềm CODE VISION AVR Më Forder cvavr1256_ok ta thÊy cã 3 file codevisionavr1256password.exe, codevisionavr1256password.txt vµ file setup.exe. Nh¸y ®óp vµo file setup.exe, Window sÏ cã th«ng b¸o sau: NhÊn OK ®Ó chän ng«n ng÷. Window sÏ th«ng b¸o tiÕp nh- sau: NhÊn next ®Ó tiÕp tôc. 30 Chän I accept the agreement, sau ®ã nhÊn next ®Ó tiÕp tôc. Window cã th«ng b¸o tiÕp nh- sau: Më file codevisionavr1256password.txt copy Password “whdf&fh&ujtro7w$hvg” . NhÊn next ®Ó tiÕp tôc. NhÊn next ®Ó tiÕp tôc. 31 NhÊn next ®Ó tiÕp tôc. NhÊn Install ®Ó tiÕp tôc. NhÊn next ®Ó tiÕp tôc. 32 NhÊn Finish ®Ó kÕt thóc. Sau khi cµi ®Æt xong ta tiÕn hµnh Crack nh- sau: Vµo thanh c«ng cô Start / Programs / Code Vision AVR. Window sÏ cã th«ng b¸o nh- sau: Ghi l¹i dßng code ë môc Your Serial Number is: Më file codevisionavr1256password.exe 33 NhËp Serial Number vµ nhÊn Make, l-u License vµo trong th- môc C:/cvavr. NhÊn OK ®Ó hoµn tÊt. Quay trë l¹i víi giao diÖn cña Code Vision AVR, click chuét vµo Import chän ®-êng dÉn ®Õn file License võa t¹o, nhÊn OK ®Ó hoµn tÊt viÖc Crack. Sau khi Crack xong th× giao diÖn chÝnh cña Code Vision AVR nh- sau: 3.2 Mở phÇn mÒm lËp tr×nh Code Vision AVR Tạo một Project trong Codevision AVR Khi tạo một project mới ta nên tạo một thư mục lưu tất cả file liên quan vào thư mục vì khi biên dịch cosevision sẽ tạo rất nhiều file liên quan khác nhau các file này sẽ tự động lưu trong thư mục. Đây cũng là quy tắc chung khi làm việc với tất cả các phần mềm lập trình. Từ giao diện chương trình ta chọn new có thông báo: Chọn Project, nhấn OK 34 Chọn Yes để tiếp tục, cửa sổ CodeWizardAVR hiện ra. Khai báo các cấu hình các thư viện cần sử dụng như loại chip, tần số thạch anh các cổng vào ra giao tiếp I2C, giao tiếp máy tính, timer sau khi khai báo xong ta lưu lại cấu hình như sau: Chọn file/Generate, Save and Exit Tạo một foder mới và lưu cả 3 định dạng file vào đó test.c, test.prj, test.cwp. 35 Sau khi save xong thì trong file test.c đã có các hàm mà ta đã đặt cấu hình trước Công việc của người lập trình là viết dòng code vào phần while{}. 3.3 Chương trình điều khiển I/O với LED đơn bằng ATMEGA: Sơ đồ 1: #include #include while (1) { PORTC.0=1; delay_ms(500); PORTC.0=0; delay_ms(500); }; Sơ đồ 2: #include #include while (1) { PORTC.0=1; delay_ms(500); PORTC.0=0; delay_ms(500); PORTC.1=1; delay_ms(500); PORTC.1=0; delay_ms(500); PORTC.2=1; delay_ms(500); PORTC.2=0; delay_ms(500); PORTC.3=1; delay_ms(500); 36 PORTC.3=0; delay_ms(500); PORTC.4=1; delay_ms(500); PORTC.4=0; delay_ms(500); PORTC.5=1; delay_ms(500); PORTC.5=0; delay_ms(500); PORTC.6=1; delay_ms(500); PORTC.6=0; delay_ms(500); PORTC.7=1; delay_ms(500); PORTC.7=0; delay_ms(500); }; 3.4 Biªn dÞch vµ n¹p ch-¬ng tr×nh. - Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng ISP. - Trªn thanh c«ng cô Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo « Program the chip, nhÊn OK ®Ó chÊp nhËn. 37 Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh. - Window sÏ cã th«ng b¸o sau: 38 - NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y - Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh. - NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau. 4. BÀI TẬP: B¸o lçi C¶nh b¸o 39 Câu 1 : Phân tích sơ đồ chân của ATMEGA 16? Câu 2 : Điều khiển I/O với 8 LED đơn bằng Atmega Câu 3: Điều khiển I/O với 32 LED đơn bằng Atmega 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 1 2 2 2 3 2 4 . 2 3 .2 2 . 2 1 . 2 0 . 1 9 . 1 8 . 1 7 . 2 4 D1 D3D4D5 D6 D7 D8 D16 LED-GREEN D17 LED-GREEN D18 LED-GREEN D19 LED-GREEN D20 LED-GREEN D21 LED-GREEN D22 LED-GREEN D24 LED-GREEN PB0/T0/XCK 1 PB1/T1 2 PB2/AIN0/INT2 3 PB3/AIN1/OC0 4 PB4/SS 5 PB5/MOSI 6 PB6/MISO 7 PB7/SCK 8 RESET 9 XTAL2 12 XTAL1 13 PD0/RXD 14 PD1/TXD 15 PD2/INT0 16 PD3/INT1 17 PD4/OC1B 18 PD5/OC1A 19 PD6/ICP1 20 PD7/OC2 21 PC0/SCL 22 PC1/SDA 23 PC2/TCK 24 PC3/TMS 25 PC4/TDO 26 PC5/TDI 27 PC6/TOSC1 28 PC7/TOSC2 29 PA7/ADC7 33 PA6/ADC6 34 PA5/ADC5 35 PA4/ADC4 36 PA3/ADC3 37 PA2/ADC2 38 PA1/ADC1 39 PA0/ADC0 40 AREF 32 AVCC 30 U5 ATMEGA16 PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 D1 LED-BIBY D2 LED-BIBY D3 LED-BIBY D4 LED-BIBY D5D6 LED-BIBY D7 LED-BIBY D8 LED-BIBY 40 BÀI 2: ĐIỀU KHIỂN VỚI LED 7 ĐOẠN Mà BÀI: MĐ25 – 02 GIỚI THIỆU: LED 7 đoạn được ứng dụng khá phổ biến khi cần hiển thị số, ứng dụng hiển thị tỷ giá vàng, đồng hồ, giờ lịch ga tàu, bến xe, Trong bài này gồm LED 7 đoạn, các bài điều khiển một LED 7 đoạn, hai LED 7 đoạn bằng ATMEGA Mục tiêu: Sau khi học xong bài học này người học có khả năng: - Kiến thức: Trình bày được phương pháp kết nối điều khiển với LED 7 đoạn - Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển khiển với LED 7 đoạn - Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập. Nội dung chính: 1. LED 7 đoạn: Có hai loại led 7 đoạn: Anode chung và Cathode chung Hình trên là sơ đồ chân của hai loại led 7 đoạn. Nó có cấu tạo như sau: 3 7 6 4 2 1 10 9 5 A B C D E F G DP 8 D12A Catot chung 3 7 6 4 2 1 10 9 5 8 D13A Anot chung Chỉ là 8 con led đấu chung 1 đầu: Anot hoặc Catot. 41 1.1 Các hệ đếm: Baát cöù moät soá nguyeân döông R (R>1) ñeàu coù theå ñöôïc choïn laøm cô soá cho moät heä thoáng soá. Neáu heä thoáng coù cô soá R thì caùc soá töø 0 ñeán (R-1) ñöôïc söû duïng. Ví duï: neáu R=8 thì caùc chöõ soá caàn thieát laø 0,1,2,3,4,5,6,7. Caùc heä thoáng cô soá thoâng duïng trong kyõ thuaät soá: • Thaäp phaân (cô soá 10). • Nhò phaân (cô soá 2). • Baùt phaân (cô soá 8). • Thaäp luïc phaân (cô soá 16). Một hệ thống với cơ số R được biểu diễn dưới dạng (a3a2a1a0 a-1a-2a-3)R Khai trieån theo haøm muõ cuûa R. N =(a3a2a1a0a-1a-2a-3)R = a3.R 3 + a2.R 2 + a1.R 1 + a0.R 0 + a-1.R -1 + a-2.R -2 + a-3.R -3 Vôùi caùc cô soá lôùn hôn 10 thì caàn phaûi theâm caùc kyù hieäu ñeå bieåu hieän caùc soá lôùn hôn 10. Ví duï heä thaäp luïc phaân (hex) coù cô soá 16 thì A bieåu thò 10, B bieåu thò 11,, F bieåu thò 15. * Đổi giữa các cơ số: Phần nguyên và phần thập phân được đổi một cách riêng biệt Phần nguyên được đổi bằng cách sử dụng phép chia lặp cho cơ số mới và sử dụng chuỗi các số dư phát sinh để tạo ra số mới. Phép tính số học được thực hiện trên các số hạng của cơ số cũ Phần thập phân được đổi bằng cách nhân lặp lại cho cơ số mới, sử dụng các số nguyên được tạo ra để biểu thị phân số được chuyển đổi, phép tính số học được thực hiện trên các cơ số cũ Ví dụ: Biến đổi phần nguyên trong hệ cơ số 10 sang hệ cơ số R N = (anan-1a2a1a0)R = an.R n + an-1.R n-1 + + a2.R 2 + a1.R 1 + a0 Neáu chia N cho R, nhaän ñöôïc soá dö laø a0 Chia Q1 cho R: Quaù trình treân ñöôïc thöïc hieän tieáp tuïc cho ñeán khi tìm ñöôïc taát caû caùc heä soá an Ví dụ: Biến đổi phần thập phân của hệ cơ số 10 sang hệ cơ số R 42 F = (a-1a-2a-3a-m)R = a-1.R -1 + a-2.R -2 + a-3.R -3 + + a-m.R -m Nhaân F vôùi R FR = a-1 + a-2.R -1 + a-3.R -2 + + a-m.R -m+1 = a-1 + F1 Vôùi a-1 laø phaàn nguyeân, F1 laø phaàn leû cuûa pheùp nhaân Tieáp tuïc nhaân R vôùi F1 F1.R = a-2 + a-3.R -1 + a-4.R -2 + + a-m.R -m+2 = a-2 + F2 Tieáp tuïc quaù trình cho ñeán khi xaùc ñònh heát caùc heä soá a-m Biến đổi giữa 2 cơ số không phải là cơ số 10 có thể thực hiện dễ dàng bằng cách đầu tiên biến đổi sang cơ số 10 rồi biến đổi tiếp từ cơ số 10 sang cơ số mới. *Hệ thập phân (hệ cơ số 10): Heä thaäp phaân ñöôïc keát hôïp bôûi 10 chöõ soá: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Moät chöõ soá trong heä thaäp phaân ñöôïc bieåu dieãn theo caùc soá muõ cuûa 10. Soá mang troïng soá lôùn nhaát goïi laø MSD (most significant digit) Soá mang troïng soá nhoû nhaát goïi laø LSD (least significant digit) Ví dụ: Soá 5346,72 bieåu dieãn nhö sau: 5346,72 = 5.10 3 + 3.10 2 + 4.10 + 6 + 7.10 -1 + 2.10 -2 Toång quaùt vôùi N chöõ soá coù theå ñeám ñöôïc 10 N soá khaùc nhau, bao goàm caû soá 0. Soá thaäp phaân lôùn nhaát laø 10 N - 1. *Hệ nhị phân (hệ cơ số 2): 43 Heä nhò phaân duøng hai chöõ soá 0, 1. Moät soá trong heä nhò phaân ñöôïc bieåu dieãn theo soá muõ cuûa 2. Moät chöõ soá nhò phaân goïi laø bit. Chuoãi 4 bit nhò phaân goïi laø nibble. Chuoãi 8 bit goïi laø byte. Chuoãi 16 bit goïi laø word. Chuoãi 32 bit goïi laø double word. Chöõ soá nhò phaân beân phaûi nhaát cuûa chuoãi bit goïi laø bit có ý nghĩa nhỏ nhất (least significant bit - LSB) Chöõ soá nhò phaân beân traùi nhaát cuûa chuoãi bit goïi laø bit có ý nghĩa lớn nhất (most significant bit - MSB). Thöôøng duøng chöõ B cuoái chuoãi bit ñeå xaùc ñònh ñoù laø soá nhò phaân. Ví dụ: Soá 1011,101B bieåu dieãn giaù trò soá: 1011,101B = 1.2 3 + 0.2 2 + 1.2 1 +1.2 0 + 1.2 -1 + 0.2 -2 + 1.2 -3 * Đếm trong hệ nhị phân: Xeùt boä ñeám 4 bit, baét ñaàu vôùi taát caû caùc bit = 0 Cuõng nhö trong heä thaäp phaân, neáu duøng N bit seõ ñeám ñöôïc 2 N laàn. 44 *Hệ bát phân (hệ cơ số 8): Heä baùt phaân ñöôïc keát hôïp bôûi 8 chöõ soá: 0, 1, 2, 3, 4, 5, 6, 7. Vò trí cuûa moãi chöõ soá coù troïng soá nhö sau: * Đếm trong hệ bát phân: Vôùi N chöõ soá baùt phaân, ta coù theå ñeám töø 0 ñeán 8 N -1, 8 N laàn ñeám khaùc nhau *Hệ thập lục phân (hệ cơ số 16): Trong heä thoáng naøy, ta duøng caùc soá 0..9 vaø caùc kí töï A..F ñeå bieåu dieãn cho moat giaù trò soá (töông öùng vôùi 10 ñeán 15 trong heä 10). Thoâng thöôøng, ta duøng chöõ H ôû cuoái ñeå xaùc ñònh ñoù laø soá thaäp luïc phaân. 45 Đếm trong hệ thập lục phân (hex): Khi ñeám trong heä thaäp luïc phaân moãi chöõ soá taêng töø 0 ñeán F sau ñoù veà 0 vaø chöõ soá coù troïng soá lôùn hôn keá tieáp seõ taêng leân 1. * Chuyển số hex sang thập phân: Ví dụ: 35616 = 3.16 2 + 5.16 1 + 6.16 0 = 85410 1.2 Chuyển đổi giữa các hệ đếm: * Chuyển số nhị phân thành số thập phân: Phương pháp: Coäng troïng soá caùc bit 1 Ví dụ: 1011,11B = 1.23 + 0.22 + 1.21 + 1 + 1.2-1 + 1.2-2 = 11,75 * Chuyển số thập phân thành số nhị phân: Phương pháp: 46 Phaàn nguyeân: Chia 2, nhôù laïi soá dö Phaàn thaäp phaân: Nhaân 2, nhôù laïi phaàn nguyeân Ví dụ: Chuyeån (25)10 ra soá nhò phaân Ví dụ: Chuyeån (0,625)10 thaønh soá nhò phaân 0,625 × 2 = 1,25 0,25 × 2 = 0,5 0,5 × 2 = 1,0 0,625 = 0,101B * Chuyển số hex sang thập phân: Ví dụ: 35616 = 3.16 2 + 5.16 1 + 6.16 0 = 85410 * Chuyển số hex sang nhị phân: Phương pháp: moãi chöõ soá hex ñöôïc bieán ñoåi thaønh soá nhò phaân 4 bit töông öùng. Ví dụ: 9F216 = 9 F 2 ↓ ↓ ↓ 1001 1111 0010 * Chuyển đổi số nhị phân sang số hex: Phương pháp: caùc bit nhò phaân ñöôïc nhoùm vaøo nhoùm 4 bit töø LSB, moãi nhoùm 4 bit ñöôïc bieán ñoåi sang soá hex töông öùng. Neáu soá bit khoâng ñuû 4, thì coäng theâm bit 0 vaøo MSB. 47 1.3 §¹i c-¬ng vÒ c¸c phÐp tÝnh sè häc trong hÖ nhÞ ph©n. Caùc pheùp toaøn soá hoïc treân soá nhò phaân chuû yeáu vaãn gioáng caùc pheùp toaùn treân soá thaäp phaân, ngoaïi tröø pheùp coäng vaø pheùp nhaân thì ñôn giaûn hôn. Baûng pheùp coäng cho soá nhò phaân 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 nhôù 1 cho soá haïng keá tieáp Ví dụ: coäng 1310 vôùi 1110 döôùi daïng nhò phaân * Bảng phép trừ cho số nhị phân: 0 - 0 = 0 0 - 1 = 1 möôïn 1 töø soá haïng keá tieáp 1 - 0 = 1 1 - 1 = 0 Möôïn1 töø 1 coät töông ñöông vôùi vieäc tröø 1 taïi coät ñoù Ví dụ: 48 * Bảng phép nhân cho số nhị phân: 0 x 0 = 0 0 x 1 = 0 1 x 0 = 0 1 x 1 = 1 Ví dụ: Nhaân 1310 vôùi 1110 ôû daïng nhò phaân Ñoái vôùi maùy tính, pheùp nhaân ñöôïc thöïc hieän baèng phöông phaùp coäng vaø dòch traùi: - Thaønh phaàn ñaàu tieân cuûa toång seõ chính laø soá bò nhaân neáu nhö LSB cuûa soá nhaân laø 1. Ngöôïc laïi, LSB cuûa soá nhaân baèng 0 thì thaønh phaàn naøy baèng 0. - Moãi thaønh phaàn thöù i keá tieáp seõ ñöôïc tính töông töï vôùi ñieàu kieän laø phaûi dòch traùi soá bò nhaân i bit. - Keát quaû caàn tìm chính laø toång caùc thaønh phaàn noùi treân. * Phép chia cho số nhị phân: Pheùp chia caùc soá nhò phaân cuõng töông töï nhö ñoái vôùi caùc soá thaäp phaân. Ví dụ: 30/6 Töông töï nhö ñoái vôùi pheùp nhaân, ta coù theå duøng pheùp tröø vaø pheùp dòch phaûi cho ñeán khi khoâng theå thöïc hieän pheùp tröø ñöôïc nöõa. * Số có dấu - không dấu: Heä thoáng soá ñöôïc chia laøm 2 loaïi: khoâng daáu vaø coù daáu. Trong heä thoáng coù daáu: ñeå bieåu thò soá nhò phaân coù daáu thöôøng söû duïng bit MSB ñeå chæ daáu: bit 0 chæ soá döông, bit 1 chæ soá aâm, caùc bit coøn laïi ñeå chæ ñoä lôùn Nhö vaäy, neáu ta duøng 8 bit ñeå bieåu dieãn thì seõ thu ñöôïc 256 toå hôïp öùng vôùi caùc giaù trò 0..255 (soá khoâng daáu) hay –127.. –0 +0 +127 (soá coù daáu). 49 Tuy nhieân, khoâng ñôn giaûn laø cöù thay ñoåi bit MSB baèng 1 ñeå bieåu dieãn giaù trò aâm, ví duï nhö 01000001 (+65) thaønh 11000001 (-65), caùc pheùp tính soá hoïc seõ khoâng coøn ñuùng. Giaù trò aâm ñöôïc moâ taû döôùi daïng soá buø 2. * Số bù 2 (2's component) Soá buø 2 cuûa moät soá nhò phaân xaùc ñònh baèng caùch laáy ñaûo caùc bit roài coäng theâm 1. Ví dụ: Trong heä thoáng coù daáu 8bit Soá +65 bieåu dieãn laø: 0100 0001 Soá buø 2 cuûa +65 laø: 1011 1110 + 1 = 1011 1111. (– 65) Nhöng neáu ñoåi ngöôïc 1011 1111 sang thaäp phaân seõ khoâng nhaän ñöôïc -65. Ñeå xaùc ñònh giaù trò tuyeät ñoái cuûa moät soá nhò phaân aâm, thöïc hieän laïi caùc böôùc treân -65 10111111 ñaûo bit 01000000 coäng 1 1 +65 01000001 Thöû laïi baèng caùch laáy toång cuûa +65 vaø –65, keát quaû phaûi baèng 0 Trong pheùp coäng vôùi soá buø 2, ta boû qua bit nhôù cuoái cuøng bôûi vì coù moät bit gaùn cho bit daáu neân keát quaû vaãn ñuùng Khi bieåu dieãn theo soá buø 2, neáu söû duïng 8 bit ta seõ coù caùc giaù trò soá thay ñoåi töø -128 127. * Phép trừ thông qua số bù 2: Ngoaøi caùch tröø nhö treân, ta cuõng coù theå thöïc hieän pheùp tröø thoâng qua soá buø 2 cuûa soá tröø: A-B=A+(-B) VD: Keát quaû 0011 1100, Bit MSB = 0 cho bieát keát quaû laø soá döông. Xeùt khoaûng thay ñoåi sau +3 00000011 50 +2 00000010 +1 00000001 0 00000000 -1 11111111 -2 11111110 -3 11111101 Thaáy raèng caùc bit 0 ôû soá nhò phaân aâm bieåu thò giaù trò thaäp phaân cuûa noù: tính giaù trò cuûa caùc bit 0 theo vò trí gioáng nhö vôùi bit 1, coäng caùc giaù trò laïi vaø coäng 1. 1.4 HiÓn thÞ LED 7 thanh tr-êng hîp Anode chung Chúng ta muốn sáng thanh nào th× chân vi điều khiển ë møc 0 nối với thanh đó vµ cÊp nguån cho LED 1.6 HiÓn thÞ LED 7 thanh tr-êng hîp Cathot chung Chúng ta muốn sáng thanh nào th× chân vi điều khiển ë møc 1 nối với thanh đó vµ nèi mass cho LED. Số dp g f e d c b a Mã HEX 0 0 0 1 1 1 1 1 1 3f 1 0 0 0 0 0 1 1 0 06 2 0 1 0 1 1 0 1 1 5b 3 0 1 0 0 1 1 1 1 4f 4 0 1 1 0 0 1 1 0 66 5 0 1 1 0 1 1 0 1 6d 6 0 1 1 1 1 1 0 1 7c 7 0 0 0 0 0 1 1 1 07 8 0 1 1 1 1 1 1 1 7f 9 0 1 1 0 1 1 1 1 6f 2. SƠ ĐỒ ĐIỀU KHIỂN VỚI LED 7 ĐOẠN 51 Sơ đô 1: Điều khiển với LED 7 đoạn đếm từ 0 đến 9 bằng Atmega Sơ đô 2: Điều khiển với LED 7 đoạn đếm từ 00 đến 99 bằng Atmega PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 Sơ đô 3: Điều khiển với LED 7 đoạn đếm từ 0000 đến 9999 bằng Atmega PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 52 P E 0 /R X D 0 /P D I 2 P E 1 /T X D 0 /P D O 3 P E 2 /X C K 0 /A IN 0 4 P E 3 /O C 3 A /A IN 1 5 P E 4 /O C 3 B /I N T 4 6 P E 5 /O C 3 C /I N T 5 7 P E 6 /T 3 /I N T 6 8 P E 7 /I C P 3 /I N T 7 9 P B 0 /S S 1 0 P B 1 /S C K 1 1 P B 2 /M O S I 1 2 P B 3 /M IS O 1 3 P B 4 /O C 0 1 4 P B 5 /O C 1 A 1 5 P B 6 /O C 1 B 1 6 P B 7 /O C 2 /O C 1 C 1 7 P G 3 /T O S C 2 1 8 P G 4 /T O S C 1 1 9 R E S E T 2 0 X T A L 2 2 3 X T A L 1 2 4 P D 0 /S C L /I N T 0 2 5 P D 1 /S D A /I N T 1 2 6 P D 2 /R X D 1 /I N T 2 2 7 P D 3 /T X D 1 /I N T 3 2 8 P D 4 /I C P 1 2 9 P D 5 /X C K 1 3 0 P D 6 /T 1 3 1 P D 7 /T 2 3 2 P G 0 /W R 3 3 P G 1 /R D 3 4 P C 0 /A 8 3 5 P C 1 /A 9 3 6 P C 2 /A 1 0 3 7 P C 3 /A 1 1 3 8 P C 4 /A 1 2 3 9 P C 5 /A 1 3 4 0 P C 6 /A 1 4 4 1 P C 7 /A 1 5 4 2 P G 2 /A L E 4 3 P A 7 /A D 7 4 4 P A 6 /A D 6 4 5 P A 5 /A D 5 4 6 P A 4 /A D 4 4 7 P A 3 /A D 3 4 8 P A 2 /A D 2 4 9 P A 1 /A D 1 5 0 P A 0 /A D 0 5 1 P F 7 /A D C 7 /T D I 5 4 P F 6 /A D C 6 /T D O 5 5 P F 5 /A D C 5 /T M S 5 6 P F 4 /A D C 4 /T C K 5 7 P F 3 /A D C 3 5 8 P F 2 /A D C 2 5 9 P F 1 /A D C 1 6 0 P F 0 /A D C 0 6 1 A R E F 6 2 A V C C 6 4 P E N 1 U1 ATMEGA128 3. ĐIỀU KHIỂN VỚI LED 7 ĐOẠN 2.1 Mở phÇn mÒm lËp tr×nh Code Vision AVR Tạo một Project trong Codevision AVR Khi tạo một project mới ta nên tạo một thư mục lưu tất cả file liên quan vào thư mục vì khi biên dịch cosevision sẽ tạo rất nhiều file liên quan khác nhau các file này sẽ tự động lưu trong thư mục. Đây cũng là quy tắc chung khi làm việc với tất cả các phần mềm lập trình. Từ giao diện chương trình ta chọn new có thông báo: Chọn Project, nhấn OK 53 Chọn Yes để tiếp tục, cửa sổ CodeWizardAVR hiện ra. Khai báo các cấu hình các thư viện cần sử dụng như loại chip, tần số thạch anh các cổng vào ra giao tiếp I2C, giao tiếp máy tính, timer sau khi khai báo xong ta lưu lại cấu hình như sau: Chọn file/Generate, Save and Exit 54 Tạo một foder mới và lưu cả 3 định dạng file vào đó test.c, test.prj, test.cwp. Sau khi save xong thì trong file test.c đã có các hàm mà ta đã đặt cấu hình trước Công việc của người lập trình là viết dòng code vào phần while{}. 2.2 Chương trình điều khiển Sơ đồ 1: #include #include unsigned int k; 55 unsigned char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main(void) {PORTC=0xff; DDRC=0xff; while (1) { for(k=0;k<10;k++) { PORTC=maled[k]; delay_us(10000); } }; } Sơ đồ 2: #include #include unsigned char a,b,e,k; unsigned char male[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main(void) { PORTA=0xff; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0xff; PORTD=0x00; DDRD=0x00; PORTE=0x00; DDRE=0x00; PORTF=0x00; DDRF=0x00; PORTG=0x00; DDRG=0x00; 56 while (1) { for(k=0;k<=99;k++){ a=k/10; b=k%10; for(e=0;e<=3;e++){ PORTA.0=1;PORTC=male[b];delay_ms(15); PORTA.0=0; PORTC=0xff; PORTA.1=1;PORTC=male[a];delay_ms(15); PORTA.1=0;PORTC=0xff; }} }; } Sơ đồ 3: #include #include unsigned int a,b,e,f,g,k,i,c; unsigned int maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main(void) {PORTA=0xff; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0xff; PORTD=0x00; DDRD=0x00; PORTE=0x00; DDRE=0x00; PORTF=0x00; DDRF=0x00; PORTG=0x00; DDRG=0x00; while (1) {for(k=0;k<=999999;k++) 57 {a=(k/100000)%10; b=(k/10000)%10; c=(k/1000)%10; e=(k/100)%10; f=(k/10)%10; g=(k/1)%10; for(i=0;i<=5;i++) { PORTA.0=1;PORTC=maled[a];delay_us(3); PORTA.0=0;PORTC=0xff; PORTA.1=1;PORTC=maled[b];delay_us(3); PORTA.1=0;PORTC=0xff; PORTA.2=1;PORTC=maled[c];delay_us(3); PORTA.2=0;PORTC=0xff; PORTA.3=1;PORTC=maled[e];delay_us(3); PORTA.3=0;PORTC=0xff; PORTA.4=1;PORTC=maled[f];delay_us(3); PORTA.4=0;PORTC=0xff; PORTA.5=1;PORTC=maled[g];delay_us(3); PORTA.5=0;PORTC=0xff; }} }; } 2.3 Biªn dÞch vµ n¹p ch-¬ng tr×nh. - Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng ISP. - Trªn thanh c«ng cô Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo « Program the chip, nhÊn OK ®Ó chÊp nhËn. Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh. 58 - Window sÏ cã th«ng b¸o sau: - NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y - Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh. - NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau. B¸o lçi C¶nh b¸o 59 3. BÀI TẬP Câu 1: Lập bảng mã Hexa cho LED 7 thanh trường hợp anode chung? Câu 2: Điều khiển với LED 7 đoạn đếm từ 0 đến 9 bằng Atmega Câu 3: Điều khiển với LED 7 thanh bằng Atmega hiển thị đèn giao thông PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 Q3 NPN Q4 NPN D1 LED-RED D3 LED-YELLOW D2 LED-BIRG PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 60 BÀI 3: ĐIỀU KHIỂN I/O SỬ DỤNG PHÍM ẤN Mà BÀI: MĐ25 – 03 GIỚI THIỆU: Điều khiển I/O sử dụng phím ấn bằng ATMEGA được sử dụng trong rất nhiều các thiết bị, để giúp người sử dụng lựa chọn các chức năng của thiết bị. Trong bài này gồm sơ đồ kết nối và điều khiển I/O sử dụng phím ấn bằng ATMEGA. Mục tiêu: Sau khi học xong bài học này người học có khả năng: - Kiến thức: Trình bày được phương pháp kết nối điều khiển I/O sử dụng phím ấn - Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển I/O sử dụng phím ấn - Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập. Nội dung chính: 1. Sơ đồ điều khiển I/O sử dụng phím ấn Ấn phím STRART thì LED sáng, ấn phím STOP thì LED tắt 2. ĐIỀU KHIỂN I/O SỬ DỤNG PHÍM ẤN 2.1 Mở phÇn mÒm lËp tr×nh Code Vision AVR Tạo một Project trong Codevision AVR Khi tạo một project mới ta nên tạo một thư mục lưu tất cả file liên quan vào thư mục vì khi biên dịch cosevision sẽ tạo rất nhiều file liên quan khác nhau các file này sẽ tự động lưu trong thư mục. Đây cũng là quy tắc chung khi làm việc với tất cả các phần mềm lập trình. 61 Từ giao diện chương trình ta chọn new có thông báo: Chọn Project, nhấn OK Chọn Yes để tiếp tục, cửa sổ CodeWizardAVR hiện ra. 62 Khai báo các cấu hình các thư viện cần sử dụng như loại chip, tần số thạch anh các cổng vào ra giao tiếp I2C, giao tiếp máy tính, timer sau khi khai báo xong ta lưu lại cấu hình như sau: Chọn file/Generate, Save and Exit Tạo một foder mới và lưu cả 3 định dạng file vào đó test.c, test.prj, test.cwp. Sau khi save xong thì trong file test.c đã có các hàm mà ta đã đặt cấu hình trước Công việc của người lập trình là viết dòng code vào phần while{}. 2.2 Chương trình điều khiển I/O sử dụng phím ấn bằng Atmega #include #include void main(void) { PORTA=0xff; DDRA=0x00; PORTC=0x00; 63 DDRC=0xff; while (1) { if (PINA.0==0) {PORTC.0=1; delay_us(5); } if (PINA.1==0) { PORTC.0=0; delay_us(5); } } } 2.3 Biªn dÞch vµ n¹p ch-¬ng tr×nh. - Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng ISP. - Trªn thanh c«ng cô Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo « Program the chip, nhÊn OK ®Ó chÊp nhËn. Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh. 64 - Window sÏ cã th«ng b¸o sau: - NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y - Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh. - NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau. B¸o lçi C¶nh b¸o 65 3. BÀI TẬP Câu 1: Nªu cÊu tróc mét ch-¬ng tr×nh viÕt b»ng ng«n ng÷ lập trình C cho vi ®iÒu khiÓn Atmega? Câu 2: Viết chương trình cho ATMEGA thực hiện ấn phím 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 hiển thị trên LED 7 thanh Anode chung BÀI 4: ĐIỀU KHIỂN I/O VỚI LCD Mà BÀI: MĐ25 – 04 GIỚI THIỆU: LCD là một thiết bị ngoại vi dùng để giao tiếp với người dùng. LCD có ưu điểm là hiển thị được tất cả các kí tự trong bảng mã ascci, nhưng LCD lại có nhược điểm là giá thành cao và khoảng cách nhìn gần. LCD là từ viết tắt của Liquid Crystal Display (màn hình tinh thể lỏng). Có nhiều loại màn hình LCD với các kích cỡ khác nhau, LCD 16x1 (16 cột và 1 hàng), LCD 16x2 (16 cột và 2 hàng) Mục tiêu: Sau khi học xong bài học này người học có khả năng: - Kiến thức: Trình bày được phương pháp kết nối điều khiển vào ra với LCD - Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển vào ra với LCD - Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập. Nội dung chính: 1. SƠ ĐỒ ĐIỀU KHIỂN I/O VỚI LCD 66 PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VS S 1 VD D 2 VE E 3 LCD2 LM016L Mét sè ®Æc ®iÓm cña LCD. - LCD cã hai chÕ ®é lµm viÖc: + ChÕ ®é 8 bÝt: ChÕ ®é nµy th-êng dïng cho 8051. + ChÕ ®é 4 bÝt: C¸ch nµy th-êng dïng cho c¸c lo¹i vi ®iÒu khiÓn cÊp cao nh- AVR, PIC hay dsPIC. - LCD cã 3 ®-êng ®iÒu khiÓn. + §-êng E khëi t¹o qu¸ tr×nh truyÒn d÷ liÖu tõ V§K tíi LCD:  NÕu E = 1 cho phÐp  NÕu E = 0 kh«ng cho phÐp. + §-êng RS quy ®Þnh göi lÖnh hay göi d÷ liÖu lªn LCD:  RS = 1 d÷ liÖu (ký tù) ®ang ®-îc viÕt lªn LCD.  RS = 0 lÖnh ®ang ®-îc viÕt lªn LCD. + §-êng R/W quy ®Þnh h-íng truyÒn d÷ liÖu.  R/W = 0 vi ®iÒu khiÓn ®ang viÕt d÷ liÖu lªn LCD.  R/W = 1 vi ®iÒu khiÓn ®ang ®äc d÷ liÖu tõ LCD. - §Ó viÕt d÷ liÖu lªn LCD cÇn thùc hiÖn c¸c b-íc sau: + §Æt R/W = 0. + §Æt RS = 0 hay RS = 1 tïy thuéc vµo môc ®Ých göi lÖnh hay göi d÷ liÖu. + §Æt d÷ liÖu vµo bus d÷ liÖu (P2) nÕu qu¸ tr×nh lµ qu¸ tr×nh viÕt. + §Æt E = 1. + §Æt E = 0. + §äc d÷ liÖu t¹i bus d÷ liÖu (nÕu qu¸ tr×nh lµ qu¸ tr×nh ®äc). ViÖc ®äc d÷ liÖu tõ LCD thùc hiÖn t-¬ng tù nh- trªn nh-ng tr-êng hîp nµy Ýt dïng. - C¸c ký tù hiÓn thÞ trªn LCD ®-îc l-u trong DDRAM (Display Data RAM). PA 67 - ViÖc ®äc viÕt ký tù lªn LCD tèn kho¶ng 40us ®Õn 120us. Trong kho¶ng thêi gian nµy LCD “bËn” , kh«ng giao tiÕp víi bªn ngoµi. Do vËy trong ch-¬ng tr×nh ta cÇn thùc hiÖn delay ®Ó chê LCD thùc hiÖn c«ng viÖc cña m×nh. - D-íi ®©y lµ b¶ng m· lÖnh cña LCD. M· HEXA LÖnh ®Õn thanh ghi LCD 1 Xãa mµn h×nh hiÓn thÞ 2 Trë vÒ ®Çu dßng 4 DÞch con trá sang tr¸i 6 DÞch con trá sang ph¶i 5 DÞch hiÓn thÞ sang ph¶i 7 DÞch hiÓn thÞ sang tr¸i 8 T¾t con trá, t¾t hiÓn thÞ A T¾t hiÓn thÞ, bËt con trá. C BËt hiÓn thÞ t¾t con trá E BËt hiÓn thÞ nhÊp nh¸y con trá F T¾t hiÓn thÞ nhÊp nh¸y con trá 10 DÞch vÞ trÝ con trá sang tr¸i 14 DÞch vÞ trÝ con trá sang tr¸i 18 DÞch toµn bé hiÓn thÞ sang tr¸i 1C DÞch toµn bé hiÓn thÞ sang ph¶i 80 §-a con trá vÒ ®Çu dßng thø 1 C0 §-a con trá vÒ ®Çu dßng thø 2 38 Hai dßng vµ ma trËn 5x7 2. ĐIỀU KHIỂN VÀO RA VỚI LCD 2.1 Mở phần mềm kết nối 68 Trong cửa sổ CodeWinzard, chọn tab LCD, trong list mặc định là None, các bạn chuyển thành PORTB cho phù hợp với phần cứng của KIT( thiết kế LCD ở PORTB). Chọn File � Generate, Save and Exit được như sau: Code cho LCD các bạn có thể tham khảo trong Help bằng cách chọn trên menu Help � Help Topic(hoặc ấn F1). Được cửa sổ Help như sau: 69 Trong tab Contents, click đúp chuột vào CodeVisionAVR C Compiller Library Functions được như bên cạnh. Nhấp đúp vào LCD Functions để tham khảo các hàm cho LCD. Trong vòng while(1) trong hàm main ta viết các câu lệnh như sau: while (1) { 70 // Place your code here lcd_gotoxy(0,0);// Dua con tro ve goc, dong 0, cot 0 lcd_putsf("DKS-MTC-JACKY");// Hien thi dong chu lcd_gotoxy(0,1);// Dua con tro ve dong 1, cot 0 lcd_putsf("Wellcome you"); // Hien thi dong chu delay_ms(3000); // Tre 3 s lcd_gotoxy(0,0); // Dua con tro ve dong 0 cot 0 lcd_putsf("embestdks.com"); // Hien thi dong chu delay_ms(3000); // Tre 3 s }; 2.2 Chương trình hiển thị LCD: #include #include #include // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include unsigned char display[16]={0}; // Declare your global variables here void main(void) { PORTA=0xff; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0xff; PORTD=0x00; DDRD=0x00; PORTE=0x00; DDRE=0x00; PORTF=0x00; 71 DDRF=0x00; PORTG=0x00; DDRG=0x00; // LCD module initialization lcd_init(16); while (1) { lcd_clear(); sprintf(display,"LE THANH BINH C6DT ",); lcd_puts(display); delay_us(10); } } 2.3 Biªn dÞch vµ n¹p ch-¬ng tr×nh. - Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng ISP. - Trªn thanh c«ng cô Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo « Program the chip, nhÊn OK ®Ó chÊp nhËn. Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh. - Window sÏ cã th«ng b¸o sau: 72 - NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y - Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh. - NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau. 3. BÀI TẬP: Câu hỏi: Giải thích chức năng của các chân LCD 16? B¸o lçi C¶nh b¸o 73 BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ DC Mà BÀI: MĐ25 – 05 GIỚI THIỆU: Động cơ một chiều là loại động cơ có cấu tạo và cách điều khiển đơn giản nhất, tốc độ động cơ được điều khiển thông qua điện áp cấp vào 2 đầu động cơ. Động cơ một chiều được ứng dụng rất rộng rãi trong các hệ thống tự động. Trong bài này gồm có sơ đồ và điều khiển động cơ DC bằng ATMEGA. Mục tiêu: Sau khi học xong bài học này người học có khả năng: - Kiến thức: Trình bày được phương pháp kết nối điều khiển động cơ DC - Kỹ năng: Thực hiện sử dụng phần mềm và lập trình điều khiển động cơ DC - Thái độ: Nghiêm túc trong giờ học, có ý thức tự giác trong học tập. Nội dung chính: 1. Sơ đồ điều khiển động cơ DC Giới thiệu về động cơ một chiều Động cơ một chiều là loại động cơ có cấu tạo và cách điều khiển đơn giản nhất, tốc độ động cơ được điều khiển thông qua điện áp cấp vào 2 đầu động cơ. Động cơ một chiều được ứng dụng rất rộng rãi trong các hệ thống tự động. Mạch cầu H Mạch cầu H là một trong những mạch phổ biến để điều khiển động cơ một chiều, sở dĩ gọi là mạch cầu H vì mạch có hình chữ H. Sơ đồ nguyên lí của mạch cầu H như sau : Có 4 khóa chuyển 1,2,3,4. Tại một thời điểm luôn luôn có 2 khóa mở và 2 khóa đóng. Giả sử khóa 1 và khóa 4 đóng, dòng điện chạy qua động cơ sẽ chạy từ trái qua phải, động cơ sẽ quay theo 1 chiều. 74 Nếu khóa 2 và 3 đóng, dòng điện đi qua động cơ sẽ có chiều từ phải qua trái, như vậy động cơ sẽ quay theo chiều ngược lại Tránh để hai khóa 1 và 3 hoặc 2 khóa 2 và 4 cùng đóng, như vậy sẽ gây ra hiện tượng đoản mạch. Như vậy với việc thay đổi việc đóng mở các van, chúng ta có thể thay đổi chiều quay của động cơ. Trong thực tế, các khóa chuyển trong hình trên có thể dùng các transistor, hay Mostfet, không nên dùng relay, vì relay có tốc độ đóng mở thấp. Sơ đồ 1: Sơ đồ 2: Thực hiện ấn phím QUAY PHAI động cơ quay phải ấn phím QUAY TRAI động cơ quay trái ấn phím DUNG động cơ dừng c1 c2 c2 c1c1 c2 R1 10k Q U A Y P H A I Q U A Y T R A I D U N G Q1 NPN Q3 NPN Q2 NPN Q4 NPN +88.8 R2 10k R3 10k DONG CO DC 5VDC 12VDC PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 c1 c1 PE0/RXD0/PDI 2 PE1/TXD0/PDO 3 PE2/XCK0/AIN0 4 PE3/OC3A/AIN1 5 PE4/OC3B/INT4 6 PE5/OC3C/INT5 7 PE6/T3/INT6 8 PE7/ICP3/INT7 9 PB0/SS 10 PB1/SCK 11 PB2/MOSI 12 PB3/MISO 13 PB4/OC0 14 PB5/OC1A 15 PB6/OC1B 16 PB7/OC2/OC1C 17 PG3/TOSC2 18 PG4/TOSC1 19 RESET 20 XTAL2 23 XTAL1 24 PD0/SCL/INT0 25 PD1/SDA/INT1 26 PD2/RXD1/INT2 27 PD3/TXD1/INT3 28 PD4/ICP1 29 PD5/XCK1 30 PD6/T1 31 PD7/T2 32 PG0/WR 33 PG1/RD 34 PC0/A8 35 PC1/A9 36 PC2/A10 37 PC3/A11 38 PC4/A12 39 PC5/A13 40 PC6/A14 41 PC7/A15 42 PG2/ALE 43 PA7/AD7 44 PA6/AD6 45 PA5/AD5 46 PA4/AD4 47 PA3/AD3 48 PA2/AD2 49 PA1/AD1 50 PA0/AD0 51 PF7/ADC7/TDI 54 PF6/ADC6/TDO 55 PF5/ADC5/TMS 56 PF4/ADC4/TCK 57 PF3/ADC3 58 PF2/ADC2 59 PF1/ADC1 60 PF0/ADC0 61 AREF 62 AVCC 64 PEN 1 U1 ATMEGA128 R1 10k +88.8 Q1 NPN 75 2. Điều khiển động cơ DC 2.1 Cấu trúc điều kiện: if và else. if (condition 1) { Khối lệnh 1 } else if (codition 2) { Khối lệnh 2 } else { Khối lệnh khác } 2.2 Phân tích sơ đồ kết nối và đưa ra giải pháp: M« t¶: B×nh th-êng c¸c ch©n PORT.A møc cao, khi nhÊn nót th× ®iÖn ¸p t¹i c¸c ch©n nµy chuyÓn xuèng møc thÊp. Vµ nhiÖm vô cña ch-¬ng tr×nh lµ kiÓm tra xem lóc nµo th× ®iÖn ¸p t¹i hai ch©n nµy xuèng møc 0. M« t¶: B×nh th-êng c¸c ch©n PORT.C møc thấp, khi nhÊn nót th× ®iÖn ¸p t¹i c¸c ch©n nµy chuyÓn møc cao. 2.3 Chương trình điều khiển động cơ DC bằng Atmega Sơ đồ 1: #include #include void main(void) { PORTA=0xff; DDRA=0x00; PORTC=0x00; DDRC=0xff; while (1) { if (PINA.0==0) {PORTC.0=1; delay_us(5); if(PINA.1==0) {PORTC.0=0; delay_us(5); } } } Sơ đồ 2: #include #include void main(void) 76 { PORTA=0xff; DDRA=0x00; PORTC=0x00; DDRC=0xff; while (1) { if (PINA.0==0) {PORTC.0=1; PORTC.1=0; delay_us(5); if(PINA.1==0) {PORTC.0=0; PORTC.1=1; delay_us(5); if(PINA.2==0) {PORTC.0=0; PORTC.1=0; delay_us(5); } } } 2.4 Biªn dÞch vµ n¹p ch-¬ng tr×nh. - Nèi m¹ch n¹p AVR 910 USB Programmer víi Main chÝnh AVR qua ®-êng ISP. - Trªn thanh c«ng cô Mét cöa sæ míi hiÖn ra, ta chän vµo Tab After Make, ®¸nh dÊu chän vµo « Program the chip, nhÊn OK ®Ó chÊp nhËn. Quay trë l¹i víi giao diÖn lµm viÖc, ta tiÕn hµnh dÞch vµ n¹p ch-¬ng tr×nh. 77 - Window sÏ cã th«ng b¸o sau: - NÕu ch-¬ng tr×nh cã lçi th× sÏ ®ù¬c th«ng b¸o ë ®©y - Click vµo Program the chip ®Ó n¹p ch-¬ng tr×nh. - NÕu qu¸ tr×nh dÞch thµnh c«ng th× window sÏ cã th«ng b¸o nh- sau. 3. BÀI TẬP: Câu hỏi: Nêu và giải thích cú pháp của lệnh If trong ngôn ngữ lập trình C viết cho vi điều khiển? B¸o lçi C¶nh b¸o 78 79 TÀI LIỆU THAM KHẢO 1. PIC16F8x Data Sheet MICROCHIP Technology Inc 2. Giáo trình vi điều khiển họ PIC - Trần văn Trọng 3. 8051 Mikrocontroller erfolgreich anwenden - Jurgen Maier-Wolf 4. Kỹ thuật lập trình C - Phạm Văn Ất 5. AT90S8535 Data Sheet ATMEL 6. Kỹ thuật vi điều khiển AVR - Ngô Diên Tập 7. Giáo trình vi điều khiển 80c51 - Nguyễn Xuân Phú

Các file đính kèm theo tài liệu này:

  • pdfgiao_trinh_ky_thuat_vi_xu_ly_truong_cao_dang_cong_nghiep_hai.pdf