Tải bản đầy đủ (.docx) (25 trang)

Thiết kế kế volmet điện từ hiển thị led 7 đoạn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (622.59 KB, 25 trang )

Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

ĐỒ ÁN MÔN VI ĐIỀU KHIỂN
Lời nói đầu
Ngày nay cùng sự phát triển không ngừng của khoa học kỹ thuật, nó đã đem
lại cho con người những thành tựu to lớn cho xã hội, giúp cho con người dễ dàng
tiếp cận với nhiều máy móc, thiết bị hiện đại giúp nâng cao năng suất lao động.
Hoà nhập cùng xu hướng đó, vi điều khiển đã khẳng định được vị thế vững chắc
của mình trong mọi ứng dụng. Điển hình trong công nghệ đo lường và điều khiển
và đặc biệt trong hệ thống đo lường, vi điều khiển đã đóng một vai trò quan trọng
và không thể thiếu trong các thiết bị đòi hỏi có độ chính xác cao, vi điều khiển có
mặt trong hầu hết các thiết bị đo lường như đo quãng đường, đo vận tốc, đo điện
áp, dòng điện… và 1 trong số đó là ứng dụng dùng đo điện áp với độ chính xác cao
đã được ứng dụng rộng rãi với nhiều thiết bị đa dạng, phong phú.
Qua một thời gian nghiên cứu, tìm hiểu đề tài ” Thiết kê mô hình Voltmet
điện tử, hiển thị bằng led 7 đoạn” chúng em đã hoàn thành được đề tài và đạt được
một số kết quả. Do thời gian có hạn nên đề tài của chúng em có thể còn có chỗ
thiếu sót, mong các thầy cô góp ý để đề tài của chúng em được hoàn thiện hơn nữa.
Chúng em xin chân thành cảm ơn các thầy cô và các bạn đã giúp đỡ chúng
em trong quá trình thực hiện. Chúng em xin chân thành cảm ơn!
Nhóm sinh viên

Page 1


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

PHẦN 1: CƠ SỞ LÝ THUYẾT
Chương 1: Tìm hiểu Vi điều khiển Atmega8
Những Tính Năng Chính Của ATmega8:
o Có 8 Kbyte bộ nhớ flash


o Có thể xóa lập trình được và có thể chịu được 10000 lần ghi xóa.
o Có 32 thanh ghi đa năng 8 bit,
o Có 512 byte bộ nhớ EEPROM tích hợp trên chíp,
o Ccó 1 kbyte SRAM nội.
o Có hai bộ Timer/counter 8 bit và một bộ timer/counter 16 bit với bộ chia tần
lập trình được.
o Có ba kênh điều xung, 6 kênh lối vào chuyển đổi ADC với độ phân giải 10
bit.
o Atmega8 có 28 chân, trong đó có 23 cổng vào ra.
o Nguồn nuôi từ 2.7 đến 5.5 đối với Atmega8L và từ 4.5 đến 5.5 đối với
Atmega8,
o Làm việc tiêu thụ dòng 3.6mA.
o Sử dụng mạch dao động ngoài từ 0 đến 8 Mhz với Atmega8L và từ 0 đến 16
Mhz với Atmega8.
o Ngoài ra chíp Atmega8 còn có bộ xung nội bên trong có thể lập trình chế độ
xung nhịp
Vi điều khiển AVR do hãng Atmel ( Hoa Kì ) sản xuất được gới thiệu lần đầu
năm
1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR ( như AT tiny 13,
AT
tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR ( chẳn
hạn
AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình và mạnh
hơn là
dòng Mega ( như ATmega32, ATmega128,…) với bộ nhớ có kích thước vài Kbyte
đến vài trăm Kb cùng với các bộ ngoại vi đa dạng được tích hợp trên chip, cũng có
dòng tích hợp cả bộ LCD trên chip ( dòng LCD AVR ). Tốc độ của dòng Mega
cũng cao hơn so với các dòng khác. Sự khác nhau cơ bản giữa các dòng chình là
cấu trúc ngoại vi, còn nhân thì vẫn như nhau,
Hình 1.1 Block Diagram


Page 2


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

Page 3


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
. Đặt biệt, năm 2008, Atmel lại tiếp tục cho ra đời dòng AVR mới là XmegaAVR,
với những tính năng mạnh mẽ chưa từng có ở các dòng AVR trước đó. Có thể nói
XmegaAVR là dòng MCU 8 bit mạnh mẽ nhất hiện nay.

1.1 Các dòng AVR khác nhau: Tiny, AVR và Mega
� Bộ Nhớ Dữ Liệu : Bộ nhớ dữ liệu của AVR chia làm 2 phần chính là bộ
nhớ
SRAM và bộ nhớ EEPROM. Tuy cùng là bộ nhớ dữ liệu nhưng hai bộ nhớ này lại
tách biệt
nhau và được đánh địa chỉ riêng.
� Bộ nhớ SRAM có dụng lượng 1 K bytes, Bộ nhớ SRAM có hai chế độ
hoạt động
là chế độ thông thường và chế độ tương thích với ATmega103, muốn thiết lập bộ
nhớ
SRAM hoạt động theo chế độ nào ta sử dụng bit cầu chì M103C ( M103C fuse bit
(9) ).
Atmega8 là vi điều khiển 8 bit dựa trên kiến trúc RISC. Với khả năng thực hiện
mỗi lệnh trong vòng một chu kỳ xung clock, Atmega8 có thể đạt được tốc độ
1MIPS trên mỗi MHz (1 triệu lệnh/s/MHz).
Dưới đây là sơ đồ khối của Atmega8


Page 4


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

Sơ đồ cấu trúc Atmega8
ATmega 8 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như:
trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,..
1.

CẤU TRÚC CHUNG AVR
CPU của AVR có chức năng bảo đảm sự hoạt động chính xác của các
chương trình. Do đó nó phải có khả năng truy cập bộ nhớ, thực hiện các quá
trình tính toán, điều khiển các thiết bị ngoại vi và quản lý ngắt.

2.1.Cấu trúc tổng quát
AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình
và dữ liệu. Các lệnh được thực hiện chỉ trong một chu kỳ xung clock. Bộ nhớ
chương trình được lưu trong bộ nhớ Flash.
2.2. ALU
Page 5


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
ALU làm việc trực tiếp với các thanh ghi chức năng chung. Các phép toán được
thực hiện trong một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại:
đại số, logic và theo bit.
2.3. Thanh ghi trạng thái
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính

số học và logic.

Thanh ghi trạng thái SREG
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù
2)
V, For signed tests (S=N XOR V) S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung
gian trong các lệnh BLD,BST).
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt. Nếu
bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.)
2.4. Các thanh ghi chức năng chung

Page 6


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

Thanh ghi chức năng chung
Tiệp ghanh ghi ( register file ) : Tiệp 32 thanh ghi đa chức năng ( $0000 $001F )
đã được nói ở trên, ngoài chức năng là các thanh ghi đa chức năng, thì các thanh
ghi từ R26 tới R31 từng đôi một tạo thành các thanh ghi 16 bit X, Y, Z được dùng
làm con trỏ trỏ tới bộ nhớ chương trình và bộ nhớ dữ liệu .Thanh ghi con trò X, Y
có thể dùng làm con trỏ trỏ tới bộ nhớ dữ liệu, còn thanh ghi Z có thể dùng làm con
trỏ trỏ tới bộ nhớ chương trình. Các trình biên dịch C thường dùng các thanh ghi
con trỏ này để quản lí Data stack của chương trình C.


Chức năng con trỏ của các thanh ghi R26 –R31
Page 7


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

2.5. Con trỏ ngăn xếp (SP)
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức
năng đặc biệt 8 bit. Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E
(Trong bộ nhớ RAM là $5E). Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn
xếp.

Thanh ghi con trỏ ngăn xếp
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu
vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ
giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn
xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2.
Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn
xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục
vụ. Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hoặc bằng 60H (0x60) vì 5FH trỏ
lại là vùng các thanh ghi.

5 .Các cổng vào ra (I/O)
Vi điều khiểnATmega8 có 23 đường vào ra chia làm 2 nhóm 8 bit,một nhóm 7
bit . Các đường vào ra này có rất nhiều tính năng và có thể lập trình được. Ở đây ta
sẽ xét chúng là các cổng vào ra số. Nếu xét trên mặt này thì các cổng vào ra này là
cổng vào ra hai chiều có thể định hướng theo từng bit. Và chứa cả điện trở pull-up
(có thể lập trình được). Mặc dù mỗi port có các đặc điểm riêng nhưng khi xét
chúng là các cổng vào ra số thì dường như điều khiển vào ra dữ liệu thì hoàn toàn
như nhau. Chúng ta có thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là :

thanh ghi dữ liệu cổng ( PORTB, PORTC, PORTD), thanh ghi dữ liệu điều khiển
cổng (DDRB, DDRC, DDRD) và cuối cùng là địa chỉ chân vào của cổng (PINB,
PINC, PIND).
Page 8


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

13.BỘ BIẾN ĐỔI A/D( Analog/Digital)
Vi điều khiểnAtmega8 có một bộ biến đổi ADC tích hợp trong chip với các đặc
điểm:









Độ phân giải 10 bit
Sai số tuyến tính: 0.5LSB
Độ chính xác +/-2LSB
Thời gian chuyển đổi:65-260μs
6 Kênh đầu vào có thể được lựa chọn
Có hai chế độ chuyển đổi free running và single conversion
Có nguồn báo ngắt khi hoàn thành chuyển đổi
Loại bỏ nhiễu trong chế độ ngủ

Page 9



Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
Sơ đồ bộ biến đổi A/D
Tám đầu vào của ADC là tám chân của PORTA và chúng được chọn thông qua
một MUX.
Để điều khiển hoạt động vào ra dữ liệu của ADC và CPU chúng ta có 3 thanh
ghi: ADMUX là thanh ghi điều khiển lựa chọn kênh đầu vào cho ADC, ADCSRA
là thanh ghi điều khiển và thanh ghi trạng thái của ADC, ADCH và ADCL là 2
thanh ghi dữ liệu.
13.1. ADMUX: Multiplexer select register
Đây là thanh ghi điều khiển 8 bit.

Hình 7.2. Thanh ghi ADMUX
Với 4 bit được định nghĩa là MUX3, MUX2, MUX1,và MUX0, ứng với các tổ
hợp logic ta có thể chọn kênh đầu vào. Cụ thể:

Page 10


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
Các bit REFS1 và REFS0 dùng để chọn giá trị điện áp tham khảo cho ADC,
như sau:

Chú ý: Nếu như ta thay đổi kênh trong thời điểm mà ADC đang chuyển đổi thì khi
quá trình chuyển đổi đã hoàn thành thì kênh vào mới được thay đổi.
13.2. ADCSR-ADC control and status register
Đây là thanh ghi điều khiển và lưu trạng thái của ADC.

Hình 7.3. Thanh ghi điều khiển và trạng thái ADC

13.2.1. Bit 7-ADEN:ADC enable
Đây là bit điều khiển hoạt động của ADC.Khi bit này được set 1 thì ADC có thể
hoạt động và ngược lại.Nếu như ta ngừng hoạt động của ADC trong khi nó đang
chuyển đổi thì nó sẽ kết thúc quá trình chuyển đổi.Mặc dù chưa chuyển đổi xong.
13.2.2. Bit 6-ADSC: ADC start conversion
Trong chế độ chuyển đổi đơn thì bit này phải được set lên 1 để bắt đầu chuyển
đổi.Trong chế độ chuyển đổi tự do thì bit này cần được set lên 1 để bắt đầu lần
chuyển đổi đầu tiên.Bit này được giữ sốt trong quá trình chuyển đổi và được xóa
khi mà chuyển đổi xong.
13.2.3. Bit 5-ADATE :ADC Auto Trigger enable
Khi bit này được set thì ADC sẽ bắt đầu chuyển đổi mỗi khi có một nguồn kích
hoạt xuất hiện. Việc lựa chọn nguồn kích hoạt được thực hiện bằng cách set các bit
trong thanh ghi SFIOR.
Page 11


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
13.2.4. Bit 4-ADIF: ADC interrupt Flag
Bit này được set lên 1 bởi phần cứng khi quá trình chuyển đổi đã hoàn thành và
thanh ghi dữ liệu đã được cập nhật. Bit này được xóa bằng phần cứng nếu như ngắt
này được phép và được phục vụ. Hoặc nó có thể được xóa bằng cách ghi giá trị
logic “0”vào cờ này. Cụ thể khi ngắt bị cấm ta có thể sử dụng các lệnh sbi và cbi để
tác dụng lên bit này.
13.2.5. Bit 3-ADIE:ACD interrupt Enable
Nếu bit này set 1 và ngắt toàn cục được cho phép thì ngắt này được phép phục
vụ (khi chuyển đổi xong dữ liệu) và nếu bị xóa thì ngược lại.
13.2.6. Bit 2.1.0-ADPS2…ADPS0: Bit lựa chọn xung nhịp(Tốc độ)
Nguồn xung được lấy từ nguồn xung của Vi điều khiển(XTAL) và được chia tần
thông qua bộ chia tần.
Các bit ADPS có nhiệm vụ chọn số chia cho bộ chia tần theo bảng sau:


13.3. Thanh ghi dữ liệu ACDH và ADCL
Thanh ghi này chứa dữ liệu chuyển đổi từ tương tự sang số, được sắp xếp như hình
dưới đây.

Page 12


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

Thanh ghi dữ liệu ADC
13.4. Nguyên tắc hoạt động và lập trình điều khiển
ADC có nhiệm vụ chuyển đổi tín hiệu điện áp tương tự thành tín hiệu số có độ
phân giải 10 bit.Với giá trị nhỏ nhất của điện áp đặt ở chân AGND và giá trị cực
đại của điện áp tương tự được mắc vào chân AREF. Tám kênh tương tự đầu vào
được chọn lựa thông qua ADMUX và ADMUX này được điều khiển bởi thanh ghi
ADMUX.
ADC này có thể hoạt động được ở hai chế độ. Đó là chuyển đổi đơn: chỉ chuyển
đổi một lần khi có lệnh chuyển đổi và chế độ tự chuyển đổi (Free running mode)
đây là chế độ mà ADC tự động chuyển đổi khi được hoạt động và công việc
chuyển đổi có tính tuần hoàn (chỉ cần khởi động một lần).
ADC được phép hoạt động nhờ thiết lập bit ADEN. Quá trình chuyển đổi được
bắt đầu bằng việc ghi vào bit ADSC mức logic 1 và trong suốt quá trình chuyển đổi
bit này luôn được giữ ở mức cao. Khi quá trình chuyển đổi hoàn thành thì bit này
được xóa bằng phần cứng và cờ AIDF được bật lên.
Dữ liệu sau khi chuyển đổi được đưa ra thanh ghi dữ liệu ADCL và ADCH,
nhưng chú ý khi đọc dữ liệu từ hai thanh ghi này thì đọc ADCL trước rồi mới đọc
ADCH. Nếu đọc ADCH trước thì dữ liệu cập nhật có thể ghi đè lên ADCL (Vi điều
khiển nghĩ rằng đã đọc xong dữ liệu).
Để điều khiển vào ra dữ liệu với ADC, các bước thực hiện như sau:

Bước 1: Định nghĩa các cổng vào cho tín hiệu tương tự
Xóa bit tương ứng với chân đó trong thanh ghi DDRA. Sau đó loại bỏ điện trở treo
bằng cách xóa bit tương ứng ở thanh ghi PORTA.
Bước 2: Chọn kênh tương tự vào (chọn chân vào cho ADC) thông qua thanh ghi
ADMUX (có thể thay đổi trong quá trình hoạt động).
Page 13


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
Bước 3: Thiết lập các thông số cho ADC
Tốc độ chuyển đổi thông qua xung nhip chuyển đổi.
Chế độ chuyển đổi : đơn hoặc tự động.
Sử dụng ngắt hoặc không.
Bước 4: Bắt đầu chuyển đổi và đọc dữ liệu.

Chương 2: Tìm hiểu LED 7 thanh
1.

Cấu trúc và hiển thị trên led 7 đoạn
a. Hình ảnh thực tế

Led Anode chung

Page 14


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
Đối vớ i dạng Led anode chung, chân COM ph ả i có mứ c logic 1 và muốn
sáng Led thì tương ứng các chân a – f, dp sẽ ở mức logic 0.


Bảng mã cho Led Anode chung

Dùng phương pháp quét
Khi kết nối chung các đường dữ liệu của Led 7 đoạn, ta không
thể cho các Led này sáng đồng thờ i (do ảnh hưởng lẫn nhau giữa các Led)
mà ph ả i thực hiện phương pháp quét, nghĩa là tại mỗi thời điểm chỉ sáng
một Led và tắt các Led còn lại. Do hiện tượng lưu ảnh của mắt, ta sẽ thấ y
các Led sáng đồng thời.

Page 15


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

Page 16


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

PHẦN 2: THIẾT KẾ VÀ THI CÔNG
1.

sơ đồ nguyên lý

Page 17


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
2.


Sơ đồ mạch in

Page 18


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
3.

Sơ đồ bố trí linh kiện

4.

Nguyên lý hoạt động
a. Phần cung cấp nguồn cho toàn mạch hoạt động
Do các IC Atmega8 hoạt động với điện áp 5V nên ta cần cung cấp cho
mạch một điện áp ổn định 5V để mạch có thể hoạt động bình thường, ở
đây ta dùng IC ổn áp 7805 để tạo ra điện áp chuẩn 5V từ điện áp 12V đưa
vào mạch, IC này có thể cung cấp dòng tối đa 1A đảm bảo cho mạch hoạt
động bình thường trong mọi trường hợp.
b. Phần hiển thị dùng LED 7 thanh
Trong đề tài yêu cầu hiển thị giá trị đo được lên led 7 thanh nên chúng
em đã quyết định chọn led 7 thanh Anode chung với 4 led ghép nối với
nhau và sử dụng phương pháp quét led để hiện thị giá trị đo được lên led.
c. Phần chọn thang đo dùng Swich
Với yêu cầu đo được 3 dải với các thang đo từ 0-5V, 0-10V,0-50V nên
chúng em sử dụng Swich kết hợp với cầu phân áp để chọn kênh đo phù
hợp cho mạch, với thang đo thứ nhất điện áp cần đo được đưa trực tiếp
vào thang đo thứ nhất qua 1 điện trở 1K và 1 diode zener có tác dụng
Page 19



Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

5.

khống chế điện áp đưa vào không được vượt quá 5V tránh tính trạng đưa
điện áp qua lớn vào mạch gây hỏng IC atmega8
d. Phần điều khiển trung tâm
Trong mạch sử dụng 1 vi điều khiển atmega 8 có tác dụng đo điện áp ở 3
kênh độc lập đầu vào và xuất giá trị đo được hiển thị lên led 7 thanh.
e. Hiển thị chọn thang đo
Chúng em đã sử dụng 3 led đơn để hiển thị các giá trị thang đo lần lượt
0-5V, 0-10V, 0-50V
Chương trình điều khiển cho Atmega8
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

Project : DO AN MON VI DIEU KHIEN
Version : 2.0
Date : 7/27/2013
Author : NGUYEN HUU QUANG
Company : Ha Noi University Of Inductry
Comments: Do dien ap hien thi LED 7 thanh
Chip type
: ATmega8
Program type
: Application

AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
#define LED_DATA
#define LED_1
#define LED_2
#define LED_3

PORTD
PORTB.6
PORTB.4
PORTB.5

//----khai bao bien----unsigned long so_hang_nghin,so_hang_tram,so_hang_chuc,so_hang_don_vi;
// khai bao ma cac so tuong ung 0 1 2 3 4 5 6 7 8 9
Page 20


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
unsigned char
ma_led_7_thanh[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char dem_ngat_timer0;
char i_kenh_1,i_kenh_2,i_kenh_3;

unsigned long
gia_tri_dien_ap,gia_tri_adc_kenh_1,gia_tri_adc_kenh_2,gia_tri_adc_kenh_3;
//----------ham doc gia tri ADC------------unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input;
// delay 1 khoang thoi gian nhat dinh cho on dinh dau vao
delay_us(10);
// bat dau chuyen doi
ADCSRA|=0x40;
// cho cho den khi chuyen doi xong bit ADIF se duoc set len de bao cho qua trinh chuyen
doi xong
while ((ADCSRA & 0x10)==0);
//xoa co ADIF de chuan bi cho qua trinh chyen doi tiep theo
//viec xoa co ADIF duoc thuc hien bang cach ghi
ADCSRA|=0x10;
//tra ve gia tri ADC doc duoc
return ADCW;
}
//---ham ngat time 0--//moi lan ngat 4ms
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0XE0;
dem_ngat_timer0++;
if(dem_ngat_timer0==1)
{
/*
- PORTB.0,PORTB.1,PORTB.2,PORTB.3 tuong ung voi
cac chan dieu khien quet led trong moi lan quet chi co
1 PORT sang trong khi cac chan con lai tat de quet led
*/

PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;
//chan du lieu cua led duoc gan bang cac ma led theo cac so
LED_DATA=ma_led_7_thanh[so_hang_nghin];
if(PINC.3==0)
PORTD.7=0; //hien thi dau cham
else PORTD.7=1;
}
//hien thi so hang tram
Page 21


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
else if(dem_ngat_timer0==2)
{
PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;
LED_DATA=ma_led_7_thanh[so_hang_tram];
if(PINC.4==0||PINC.5==0)
PORTD.7=0;
else PORTD.7=1;//hien thi dau cham
}
//hien thi so hang chuc
else if(dem_ngat_timer0==3)
{
PORTB.0=0;PORTB.1=0;PORTB.2=1;PORTB.3=0;
LED_DATA=ma_led_7_thanh[so_hang_chuc];
}
//hien thi so hang don vi
else if(dem_ngat_timer0==4)
{
PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=1;

LED_DATA=ma_led_7_thanh[so_hang_don_vi];
}
else
{
/*
------- Phan do ADC va quy ra dien ap thuc te------ tien hanh lay 16 mau ADC trong 1 lan do de tang do chinh xac
- gia tri do duoc de duoc cong don vao bien gi_tri_adc
- sau khi du 16 mau thi gia tri tong hop duoc tu cac lan do se duoc chia 16 de lay
trung binh
*/
dem_ngat_timer0=0;
PORTB.0=PORTB.1=PORTB.2=PORTB.3=0;
if(PINC.3==0) //thang thu nhat duoc chon - dai do tu 0-5V
{
LED_1=1;LED_2=0;LED_3=0;//sang LED 1 bao cho biet thang so 1 duoc su
dung
gia_tri_adc_kenh_1=gia_tri_adc_kenh_1+read_adc(0); //doc gia tri ADC cua
kenh 0
i_kenh_1++; //tang bien dem mau len sau moi lan lay mau
if(i_kenh_1==16) //neu du 16 mau(tu 0-15) thi chia gia tri do duoc cho 16 de lay
gia tri trung binh
{
i_kenh_1=0;//xoa bien dem mau
/*dich phai 4 bit tuong ung voi chia cho 2^4=16
- ta su dung phep dich bit de toi uu hoa cho thoi gian xu ly
vi trong vi dieu khien phep dich bit se ton it chu ky may hon trong
Page 22


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn

cac phep nhan chia thong thuong
*/
gia_tri_adc_kenh_1=gia_tri_adc_kenh_1>>4;
gia_tri_dien_ap=((gia_tri_adc_kenh_1*5000)>>10); //ADC 10 bit nen phai
chia cho 2^10=1024
so_hang_nghin=gia_tri_dien_ap/1000;
so_hang_tram=(gia_tri_dien_ap-(1000*so_hang_nghin))/100;
so_hang_chuc=(gia_tri_dien_ap-(1000*so_hang_nghin)(100*so_hang_tram))/10;
so_hang_don_vi=(gia_tri_dien_ap-(1000*so_hang_nghin)(100*so_hang_tram)-(so_hang_chuc*10));
gia_tri_adc_kenh_1=0;//sau khi tinh toan xong ta can xoa gia tri ADC de
chuan bi cho lan lay mau tiep theo
}
}
/*
Trong dai do nay ta se dung 4 so de hien thi, do vay se tach di so hang don vi
- so hang don vi duoc bot di vi nguong do max=25V=25000mv. vi vay ta chi co
the
hien thi 4 so
*/
else if(PINC.4==0)//thang thu hai duoc chon - dai do tu 0-25V
{
LED_1=0;LED_2=1;LED_3=0;
gia_tri_adc_kenh_2=gia_tri_adc_kenh_2+read_adc(1);
i_kenh_2++;
if(i_kenh_2==16)
{
i_kenh_2=0;
gia_tri_adc_kenh_2=gia_tri_adc_kenh_2>>4;
gia_tri_dien_ap=((gia_tri_adc_kenh_2*25000)>>10);
so_hang_nghin=gia_tri_dien_ap/10000;

so_hang_tram=(gia_tri_dien_ap-(10000*so_hang_nghin))/1000;
so_hang_chuc=(gia_tri_dien_ap-(10000*so_hang_nghin)(1000*so_hang_tram))/100;
so_hang_don_vi=((gia_tri_dien_ap-(10000*so_hang_nghin)(1000*so_hang_tram)-(so_hang_chuc*100))/10);
gia_tri_adc_kenh_2=0;
}
}
else if(PINC.5==0)//thang thu ba duoc chon - dai do tu 0-50V
{
LED_1=0;LED_2=0;LED_3=1;
gia_tri_adc_kenh_3=gia_tri_adc_kenh_3+read_adc(2);
i_kenh_3++;
Page 23


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
if(i_kenh_3==16)
{
i_kenh_3=0;
gia_tri_adc_kenh_3=gia_tri_adc_kenh_3>>4;
gia_tri_dien_ap=((gia_tri_adc_kenh_3*50000)>>10);
so_hang_nghin=gia_tri_dien_ap/10000;
so_hang_tram=(gia_tri_dien_ap-(10000*so_hang_nghin))/1000;
so_hang_chuc=(gia_tri_dien_ap-(10000*so_hang_nghin)(1000*so_hang_tram))/100;
so_hang_don_vi=((gia_tri_dien_ap-(10000*so_hang_nghin)(1000*so_hang_tram)-(so_hang_chuc*100))/10);
gia_tri_adc_kenh_3=0; //sau khi tach duoc cac so hang tram, chuc, don vi
thi xoa di de chuan bi luot do tiep theo
}
}
else//khong co thang do nao duoc chon
{

gia_tri_dien_ap=0;
so_hang_nghin=so_hang_tram=so_hang_chuc=so_hang_don_vi=0;
gia_tri_adc_kenh_1=gia_tri_adc_kenh_2=gia_tri_adc_kenh_3=0;
LED_1=LED_2=LED_3=0;
}
}
}
void main(void)
{
/*
----khai bao PORTB la PORT ra------PORTB.0 -> PORTB.3 dung dieu khien quet led 7 thanh
PORTB.4 -> PORTB.6 dung dieu khien led bao thang do
*/
PORTB=0x00;
DDRB=0xFF;
/*
---khai bao PORTC la PORT vao dung doc du lieu---PORTC.0 -> PORTC.2 dung de doc gia tri ADC
PORTC.3 -> PORTC.5 dung de doc xac dinh kenh do
*/
PORTC=0xF8;
//PORTC=0xFF;
DDRC=0x00;
//Khai bao PORTD la cong ra dung xuat du lieu dieu khien LED 7 thanh
PORTD=0x00;
Page 24


Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn
DDRD=0xFF;
//khai bao cho timer0 hoat dong

TCCR0=0x05;
TCNT0=0x00;
//khai bao ADC
ADMUX=0x00;
ADCSRA=0x83;
// cho phep ngat timer0
TIMSK=0x01;
//cho phep ngat toan cuc
#asm("sei") //cho phep ngat
while (1)
{
}
}

PHẦN 3: KẾT LUẬN
Qua đồ án “Thiết kê mô hình Voltmet điện tử, hiển thị bằng led 7 đoạn”
chúng em đã đạt được một số kết quả sau:
- Tìm hiểu về dòng vi điều khiển AVR của atmel và cụ thể là vi điều khiển
atmega8 được sử dụng trong đồ án.
- Phương pháp đo điện áp sử dụng vi điều khiển.
- Thực hành phương pháp quét led 7 thanh anode chung dùng vi điều
khiển.
- Thực hành lập trình cho vi điều khiển và làm mạch thực tế.
Do thời gian có hạn nên đồ án của chúng em còn nhiều hạn chế mong
thầy cô và các bạn góp ý để chúng em hoàn thiện đồ án hơn nữa.
Chúng em xin chân thành cảm ơn.

Page 25



×