gia thiet bi ve sinh chinh hang, doc truyen truyện tranh cười Việt Nam doc truyen ma kinh di truyen tinh yeu lãng mạn, tin tuc onlinethiet bi nha ve sinh Việt Nam - Voi hoa sen

Hướng dẫn sử dụng Visual Basic 6.0

Được đăng bởi NetVN Chủ Nhật, ngày 29 tháng 4 năm 2012 2 nhận xét
Chương I - Chào mừng bạn đến với Visual Basic

Dùng VB6 là cách nhanh và tốt nhất để lập tŕnh cho Microsoft Windows. Cho dù bạn là chuyên nghiệp hay mới mẻ đối với chương tŕnh Windows, VB6 sẽ cung cấp cho bạn một bộ công cụ hoàn chỉnh để đơn giản hóa việc triển khai lập tŕnh ứng dụng cho MSWindows.
Visual Basic là gì ? Phần "Visual" đề cập đến phương pháp được sử dụng để tạo giao diện đồ họa người dùng (Graphical User Interface hay viết tắc là GUI) . Có sẵn những bộ phận hình ảnh, gọi là controls, bạn tha hồ sắp đặt vị trí và quyết định các đặc tính của chúng trên một khung màn hình, gọi là form. Nếu bạn đă từng sử dụng chương trình vẽ chẳng hạn như Paint, bạn đă có sẵn các kỹ năng cần thiết để tạo một GUI cho VB6.
Phần "Basic" đề cập đến ngôn ngữ BASIC (Beginners All-Purpose Symbolic Instruction Code), một ngôn ngữ lập tŕnh đơn giản, dễ học ,được chế ra cho các khoa học gia (những người không có thời giờ để học lập trình điện toán) dùng.

Visual Basic đă được ra từ MSBasic, do Bill Gates viết từ thời dùng cho máy tính 8 bits 8080 hay Z80. Hiện nay nó chứa đến hàng trăm câu lệnh (commands), hàm (functions) và từ khóa (keywords). Rất nhiều commands, functions liên hệ trực tiếp đến MSWindows GUI. Những người mới bắt đầu có thể viết chương tŕnh bằng cách học chỉ một vài commands, functions và keywords. Khả năng của ngôn ngữ này cho phép những người chuyên nghiệp hoàn thành bất kỳ điều gì nhờ sử dụng ngôn ngữ lập tŕnh MSWindows nào khác.

Người mang lại phần "Visual" cho VB là ông Alan Cooper. Ông đă gói môi trường hoạt động của Basic trong một phạm vi dễ hiểu, dễ dùng, không cần phải chú ư đến sự tinh xảo của MSWindows, nhưng vẫn dùng các chức năng của MSWindows một cách hiệu quả. Do đó, nhiều người xem ông Alan Cooper là cha già của Visual Basic.

Visual Basic còn có hai dạng khác: Visual Basic for Application (VBA) và VBScript. VBA là ngôn ngữ nằm phía sau các chương tŕnh Word, Excel, MSAccess, MSProject, .v.v.. còn gọi là Macros. Dùng VBA trong MSOffice, ta có thể làm tăng chức năng bằng cách tự động hóa các chương trình VBScript được dùng cho Internet và chính Operating System. Dù cho mục đích của bạn là tạo một tiện ích nhỏ cho riêng bạn, trong một nhóm làm việc của bạn, trong một công ty lớn, hay cần phân bố chương trình ứng dụng rộng răi trên thế giới qua Internet, VB6 cũng sẽ có các công cụ lập tŕnh mà bạn cần thiết.

Có ba ấn bản VB6: Learning, Professional và Enterprise. Chúng ta hăy gát qua ấn bản Learning. Bạn có thể dùng ấn bản Professional hay Enterprise.

Ấn bản Professional cung cấp đầy đủ những ǵ bạn cần để học và triển khai một chương tŕnh VB6, nhất là các control ActiveX, những bộ phận lập tŕnh tiền chế và rất hữu dụng cho các chương tŕnh ứng dụng (application programs) của bạn trong tương lai. Ngoài đĩa compact chính cho VB6, tài liệu đính kèm gồm có sách Visual Studio Professional Features và hai đĩa CD Microsoft Developer Network (MSDN).

Ấn bản Enterprise là ấn bản Professional cộng thêm các công cụ Back Office chẳng hạn như SQL Server, Microsoft Transaction Server, Internet Information Server.

Cài đặt VB6

Để cài đặt VB6, máy tính của bạn cần phải có một ổ đĩa CD-ROM (CD drive) . Bạn cần ít nhất 32 MB RAM, 2 GB hard disk và CPU Pentium II. Khi bỏ VB6 CD vào CD drive, nó sẽ tự khởi động để display menu cho bạn chọn những thứ ǵ cần Setup, hăy click Install Visual Basic 6.0 để cài VB6. Ngoại trừ các file hệ điều hành (Operating System) trong thư mục (folder) \Os, các file trong đĩa compact đều không bị nén. Vì thế, bạn có thể sử dụng chúng trực tiếp từ đĩa. Ví dụ, có nhiều công cụ và thành phần trong folder \Tools vốn có thể được cài đặt trực tiếp từ CD-ROM.

Ngoài ra, bạn có thể chạy Setup khi nào cần thiết. Ví dụ, bạn có thể chạy Setup để cài đặt lại Visual Basic trong folder khác, hoặc để cài đặt thêm bớt các phần của VB6.

Nếu vì lí do hệ thống không install các đĩa compact MSDN (bạn sẽ khám phá ra điều nầy khi thấy Help không có mặt lúc chạy VB6), bạn có thể cài đặt chúng trực tiếp từ đĩa số 1 của bộ MSDN.

Để bổ xung và xóa các thành phần VB:
1. Bỏ đĩa compact vào CD drive.
2. Nếu menu không tự động hiện lên thì chạy chương tŕnh Setup có sẵn trong folder gốc trên đĩa compact.
3. Chọn nút Custom trong hộp thoại (dialog) Microsoft Visual Basic 6.0 Setup.
4. Chọn hay xóa các thành phần bằng cách check hay uncheck các hộp danh sách Options của dialog
Custom.
5. Thực hiện các chỉ dẫn Setup trên màn hình

Ghi chú: Trong lúc cài VB6, nhớ chọn Graphics nếu không bạn sẽ thiếu một số h́nh ảnh như icons, bitmaps v.v... Đáng lẽ Microsoft cho tự động cài đặt Graphics, tức là Default (không có nói gì) thì cài đặt Graphics.


Integrated Development Environment (IDE) của VB6

Khi khởi động VB6 bạn sẽ thấy mở ra nhiều cửa sổ (windows), scrollbars, v.v.. và nằm chồng lên là New Project dialog. Ở đây VB6 cho bạn chọn một trong nhiều loại công trình

Chọn Standard EXE. Một lát sau trên màn ảnh sẽ hiện ra giao diện của môi trường phát triển tích hợp (Integrated Development Environment - IDE ) giống như dưới đây:

IDE của VB6 bao gồm các yếu tố sau:

Menu Bar

Chứa đầy đủ các commands mà bạn sử dụng để làm việc với VB6, kể cả các menu để truy cập các chức năng đặc biệt dành cho việc lập tŕnh chẳng hạn như Project, Format, hoặc Debug. Trong Menu Add-Ins có Add-Ins Manager cho phép bạn gắn thêm những menu con nhiệm ý để chạy các chương tŕnh lợi ích cho việc lập trình.

Trong Add-Ins Manager dialog bạn chọn một Add-In rồi check một hay nhiều hộp trong khung Load behavior:


Toolbars (Debug, Edit, form Editor, Standard)

Các toolbars có h́nh các icons cho phép bạn click để thực hiện công việc tương đương với dùng một menu command, nhưng nhanh và tiện hơn. Bạn dùng menu command View | Toolbars (click lên menu command View cho popupmenu hiện ra rồi click command con Toolbars) để làm cho các toolbars hiện ra hay biến mất đi. Bạn có thể thay đổi vị trí một toolbar bằng cách nắm vào hai gạch vertical nằm bên trái toolbar rồi dời
toolbar đi chỗ khác (nắm ở đây nghĩa là để pointer của mouse lên chỗ chấm đỏ trong h́nh phía dưới rồi bấm xuống và giữ nút bên trái của mouse, trong khi kéo pointer đi nơi khác).

Ngoài ra bạn cũng có thể sửa đổi các toolbars theo ư thích bằng cách dùng Menu command View | Toolbars | Customize...
Toolbox
Đây là hộp đồ nghề với các công cụ, gọi là controls, mà bạn có thể đặt lên các form trong lúc thiết kế (design). Nếu Toolbox biến mất, bạn có thể display nó trở lại bằng cách dùng menu command View | Toolbox. Bạn có thể khiến toolbox display nhiều controls hơn bằng cách chọn Components... từ context menu (chọn Toolbox rồi bấm nút phải của mouse để display context menu) hay dùng menu command Project | Components. Ngoài việc tŕnh bày Toolbox mặc định, bạn có thể tạo cách tŕnh bày khác bằng cách chọn Add Tab... từ context menu và bổ sung các control cho tab từ kết quả.

Project Explorer
Sẽ liệt kê các forms và các modules trong project hiện hành của bạn. Một project là sự tập hợp các files mà bạn sử dụng để tạo một tŕnh ứng dụng. Tức là, trong VB6, khi nói viết một program có nghĩa là triển khai một project.
Properties windowLiệt kê các đặc tính của các forms hoặc controls được chọn. Một property là một đặc tính của một object chẳng hạn như size, caption, hoặc color. Khi bạn sửa đổi một property bạn sẽ thấy hiệu quả ngay lập tức, thí dụ thay đổi property Font của một Label sẽ thấy Label ấy được display bằng Font chữ mới. Khi bạn chọn một Property của control hay form trong Properties window, phía bên phải ở chỗ value của property có thể display ba chấm (. . .) hay một tam giác chỉa xuống. Bấm vào đó để display một dialog cho bạn chọn value. Thí dụ dưới đây là dialog để chọn màu cho property ForeColor của control Label1.

Form Layout
Bạn dùng form Layout để chỉnh vị trí của các forms khi form hiện ra lần đầu lúc chương tŕnh chạy. Dùng context command Resolution Guides để thấy nếu dùng một màn ảnh với độ mịn (resolution) tệ hơn, thí dụ như 640 X 480, thì nó sẽ nhỏ như thế nào.


Form Designer
Dùng để thiết kế giao diện lập tŕnh. Bạn bổ sung các controls, các đồ họa (graphics), các h́nh ảnh và một form để tạo sự ma sát mà bạn muốn. Mỗi form trong tŕnh ứng dụng của bạn có designer form riêng của nó. Khi bạn maximise một form designer, nó chiếm cả khu làm việc. Muốn làm cho nó trở lại cở b́nh thường và đồng thời để thấy các form designers khác, click nút Restore Window ở góc bên phải, phía trên.
Immediate Window
Dùng để gở rối (debug) tŕnh ứng dụng của bạn. Bạn có thể display dữ kiện trong khi chạy chương tŕnh ứng dụng. Khi chương tŕnh đang tạm ngừng ở một break point, bạn có thể thay đổi giá trị các variables hay chạy một ḍng chương tŕnh.

View Code button
Click lên đôi vào form để xem code của một form mà bạn đă chọn. Window
của code giống như dưới đây:

Trong Code window bạn có thể chọn display tất cả Sub của code cùng một lúc như trong h́nh hay display mỗi lần chỉ một Sub bằng cách click button có hình ba dạng nằm ở góc bên trái phía dưới.

View form button
Click đôi lên vào form muốn xem để xem form của một form mà bạn đă chọn.

Ghi chú: Nhiều windows trong IDE như Toolbars, Toolbox, Project Explorer .v.v..có thể trôi ĺnh b́nh (floating) hay đậu ở bến (docked). Bạn có thể thay đổi vị trí chúng bằng cách nắm vào Title Bar của window rồi dời đi. Dĩ nhiên bạn cũng có thể mở rộng hay làm nhỏ một window bằng cách dời một cạnh vertical hay horizontal của nó. Khi để một window lên trên một window khác chúng có thể t́m cách dính nhau.
Trong hình dưới đây, Properties Window và Form Layout đă được kéo ra ngoài cho floating.

Source: http://www.caulacbovb.com

Cấu tạo LED ma trận 16x32 trên thị trường - Module P10

Được đăng bởi NetVN Thứ Bảy, ngày 28 tháng 4 năm 2012 0 nhận xét
I - LED Matrix – Module P10 
1. Giới thiệu chung về LED Matrix 
Dựa trên nguyên tắc như quét màn hình tivi, máy tính, ta có thể thực hiện việc hiển thị ma trận đèn bằng cách quét theo hàng và quét theo cột. Mỗi Led trên ma trận Led có thể coi như một điểm ảnh. Địa chỉ của mỗi điểm ảnh này được xác định đồng thời bởi mạch giải mã hàng và giải mã cột, điểm ảnh này sẽ được xác định nhờ dữ liệu đưa ra từ mạch điều khiển. Như vậy tại mỗi thời điểm chỉ có trạng thái của một điểm ảnh xác định. Tuy nhiên khi xác định địa chỉ và trạng thái của điểm ảnh tiếp theo thì các điểm ảnh còn lại sẽ chuyển về trạng thái tắt.Vì thế để hiển thị được toàn bộ hình ảnh mà ta muốn thì ta phải quét ma trận nhiều lần với tốc độ quét rất lớn, lớn hơn nhiều lần thời gian kịp tắt của đèn. Mắt người chỉ nhận biết được tối đa 24 hình/s do đó nếu tốc độ quét lớn mắt người sẽ không nhận biết được sự gián đoạn hay là nhấp nháy của đèn Led(đánh lừa cảm giác mắt). Ứng dụng trong hiển thị Led matrix để đảm bảo phù hợp các thông số về điện của từng Led đơn người ta không điều khiển theo chu trình như màn hình tivi (CRT) bởi như vậy để đảm bảo độ sáng của toàn bộ bảng led thì dòng tức thời qua từng led là vô cùng lớn do đó có thể đánh thủng lớp tiếp giáp của led .Trên thực tế người ta có thể ghép chung anot hoặc catot của 1 hàng hoặc 1 cột . Khi đó công việc điều khiển sẽ là chuyển dữ liệu ra các cột và cấp điện cho hàng .Như vậy tài 1 thời điểm sẽ có 1 hàng được điều khiển sáng theo dữ liệu đưa ra. Ngoài ra để đảm bảo độ sáng của bảng thông tin là tốt nhất, đặc biệt với những bảng cỡ lớn theo chiều dọc ( có nhiều hàng), thời gian sáng của 1 hàng lúc này sẽ bị giảm đi rất nhiều nếu dữ nguyên kiểu quét 1 hàng .Để khác phục điều này người ta sử dụng phương pháp điều khiển cho 2 hoặc 4 hàng cùng sáng, từ đó giúp giảm dòng tức thời qua từng led mà vẫn đảm bảo độ sáng tối ưu .Và trong đồ án này module P10 được sử dụng hoạt động trên phương pháp điều khiển cùng lúc 4 hàng cùng sáng tại 1 thời điểm, sau 4 lần quét ta sẽ có 1 khung hình hoàn thiện. 2. Module P10 a.
Thông số Module LED 16x32:
Mã sản phẩm : BW-PH10-4SS
Cách sử dụng Bảng ngoài trời Độ phân giải (mm) 10mm Module dày 30,5mm Kích thước (mm) 320 * 160 Pixel Density (pexel / m) 10.000 Hiển thị một màu Màu đỏ Độ phân giải (pixel) 32 * 16 Trọng lượng (G) 425 Khoảng cách (m) ≥ 12,5 Góc nhìn (°) lựa chọn Nghiêng 110 ± 5 độ, thẳng 60 độ. Nhiệt độ hoạt động (° C) Làm việc Nhiệt độ: -20 °C ~ 50°C Nhiệt độ lưu trữ: -40°C ~ 85 ° C Độ ẩm hoạt động 10 ~ 95% Công suất Trung bình (W / m²) 100 ~ 300 Công suất tiêu thụ tối đa (W / m²) ≤ 500 Chế độ kiểm soát Không đồng bộ Chế độ quét 1/4 quét bởi áp Constant Cân bằng trắng Độ sáng (cd / m²) ≥ 2000 Lớp chống thấm nước IP51 MTTF ≥ 10.000 Tuổi thọ (giờ) ≥ 100,000 Nguồn điện sử dụng 5V/20A chuyên dụng 
 Hình ảnh thực tế:
 Mặt trước:












Mặt sau: 















b. Nguyên lý hoạt động. 
 Giản đồ xung điều khiển mudue : Các đường điều khiển gồm : - Tín hiệu OE : tích cực mức logic cao (5V) cho phép chốt hàng ( hàng tương ứng với 2 tín hiệu A,B được nối đất ) - Tín hiệu chọn hàng : A,B là 2 đường tín hiệu cho phép chọn hàng hiển thị

- Tín hiệu CLK : Tín hiệu cho phép chốt dữ liệu ra cột . - Tín hiệu SCK : xung đưa dữ liệu ra IC ghi dịch . - Tín hiệu DATA: đưa dữ liệu cần hiển thị ra bảng led. - Sơ đồ quét của mudule : + Quét theo tỉ lệ ¼ + Tất cả module có 16 dòng,32 cột .Tại 1 thời điểm nhất định sẽ có 4 dòng đồng thời được nối với nguồn Vcc (được cho phép sáng )

Sơ đồ dịch dữ liệu :



c. Lí do lựa chọn loại module này : 
+ P10 – 1R là loại module LED rất phổ biến trên thị trường và đang được sử dụng rộng rãi tại Việt Nam. +Cách điều khiển đơn giản. +Phù hợp với các bảng thông tin điện tử cỡ vừa và nhỏ. + Cấu tạo đơn giản, rễ dàng lắp đặt , sửa chữa . + Mở rộng kích thước bảng đơn giản, không cần thay đổi phần cứng . + Độ sáng phù hợp với các bảng thông tin ngoài trời . +Sử dụng, lắp đặt đơn giản. +Giá thành không quá đắt (245.000VND / 1module - giá bán lẻ )

Đo được nhiệt độ từ LM35 hiển thị lên LCD

Được đăng bởi NetVN 0 nhận xét


ADC với LM35
1.Yêu cầu:
Đo được nhiệt độ từ LM35 hiển thị lên LCD.
2.Lý thuyết:
Đối với ATMEGA 16L: 8 chân của PORTA sử dụng làm 8 kênh đầu vào ADC. Để sử dụng tính năng ADC của Atmega 16L chúng ta cần phải thiết kế phần cứng của Vi điều khiển như sau :
* Chân AVCC chân này bình thường khi thiết kế mạch chúng ta đưa lên Vcc(5V) nhưng khi trong mạch có sử dụng các kênh ADC của phần cứng thì chúng ta phải nối chân này lên Vcc qua 1 cuộn cảm nhằm mục đích cấp nguồn ổn định cho các kênh (đầu vào) của bộ biến đổi.
* Chân AREF chân này cần cấp 1 giá trị điện áp ổn định được sử dụng làm điện áp tham chiếu, chính vì vậy điện áp cấp vào chân này cần ổn định vì khi nó thay đổi làm giá trị ADC ở các kênh thu được bị trôi (thay đổi ) không ổn định với 1 giá trị đầu vào chúng ta có công thức tính như sau:
ADCx=(V_INT*1024)/ AREF
chỉ dựa vào công thức chúng ta củng có thể thấy giá trị ADCx tỉ lệ thuận với điện áp vào V_INT. Giá trị ADC thu được từ các kênh được lưu vào 2 thanh ghi ADCH và ADCL khi sử dụng chúng ta phải đọc giá trị từ các thanh ghi này, khi sử dụng ở ché độ 8 bít thì chỉ lưu vào thanh ghi ADCL.
3.Mô tả:
Đầu ra của LM35 và chân 2 biến trở 1K trên Kit được nối vơi 2 jump chờ. Với AMEGA16L có 8 kênh ADC là chức năng thứ 2 của PORTA. Do đó để ADC ta dung dây nối 2 chân đó với 2 bit của PORTA là bit 0 và bit 1..
  
Theo datasheet LM35 thì cứ 10mV tương ứng với 10C, ở 00C điện áp ra là 0V, tương ứng với giá trị ADC là 0. Với Vref=5V, giá trị của ADC từ 0 đến 256, lấy tròn 250 mức. Mỗi giá trị ADC ứng với 5V/250= 20 mV. Vậy 1 giá trị ADC ứng với 20C. Muốn tăng độ phân giải ADC ta giảm Vref.
4.Thực hành: Các bước khởi tạo code như sau:
Trong tab ADC check vào ADC enable:
       Cấu hình ADC.                                              Khởi tạo LCD.

Ta check vào Use 8 bít, để ADC trả về giá trị 8 bít, và ta ADC dùng ngắt check vào Interrupt, về điện áp tham khảo AREF thì lấy điện áp của chân AREF của AVR được nối với 5V. Tần số ADC tùy các bạn thích nhanh hoặc chậm chọn giá trị phù hợp. Trong box Automatically Scan Inputs các bạn check vào Enabled. Vì chúng ta cần ADC 2 kênh, 1 kênh dùng biến trở để test ADC, một kênh từ LM35 đấu với 2 bit 0 và 1 của PORTA do đó chọn First 0, Last 1.
Khởi tạo cho LCD vào PORTB như hình bên cạnh.
Chọn Generate, Save and Exit. Đê hiển thị được một số bất kỳ lên LCD, trong thư viện hàm không có và ta phải tự viết hàm . Đầu vào là một biến unsigned char, ta phải tách lấy hàng trăm, hàng chục, hàng đơn vị và đưa lần lượt lên LCD.
void lcd_putnum(unsigned char so,unsigned char x,unsigned char y)
{
unsigned char a,b,c;
a=so/100;
// lay fan tram
b=(so-100*a)/10;
// lay fan chuc
c=(so-100*a-10*b);
// lay hang don vi
lcd_gotoxy(x,y);
// ve vi tri x,y
lcd_putchar(a+48);
// day ra hang tram, ma ascii
lcd_putchar(b+48);
// day ra hang chuc, ma ascii
lcd_putchar(c+48);
// day ra hang don vi, ma ascii
}
Trong vòng while(1) trong hàm main ta viết như sau:
while (1)
{
// Place your code here
lcd_putnum(2*adc_data[1],0,0);
// dua gia tri ADC tu LM35*2= nhiet do
lcd_putnum(adc_data[0],0,1);
// dua gia tri ADC tu bien tro
delay_ms(3000);
// tre 3 s, cap nhat du lieu mot lan
};Đo nhiệt độ bằng LM35 qua ADC thường có sai số và độ trôi, do đó ta cần hiệu chỉnh nhiệt độ bằng cách so sánh với nhiệt kế.

Mạch LED hào quang

Được đăng bởi NetVN 0 nhận xét
mạch hào quang dùng led, 32 tia, 12 vòng với nhiều chương trình đẹp:

Led ma trận 3i & Led nháy theo nhạc

Được đăng bởi NetVN Thứ Ba, ngày 24 tháng 4 năm 2012 0 nhận xét
Sản phẩm gần đây của nhóm:
Led ma trận 3i


Phần mềm giao diện tiếng việt thân thiện ,cài đặt và sử dụng đơn giản .Cung cấp sản phẩm bảng giá vàng bằng led ma trận,cập nhật dữ liệu tự động từ website,mang lại khả năng thông tin đa dạng

Led nháy theo nhạc - led equalizer:

Led nháy theo điệu nhạc (Led equalizer) .Trang bị cho các dàn âm thanh , karaoke

Nghiên cứu ứng dụng PIC

Được đăng bởi NetVN Thứ Hai, ngày 23 tháng 4 năm 2012 0 nhận xét
Bộ nguồn xung
Sơ đồ:


Bài 1: Điều khiển LED

  • Một bài ứng dụng đầu tiên đơn giản nhất để hiểu cách điều khiển IO của một MCU (PIC)

Code:

//========================================================
// Ten chuong trinh : dieu khien IO vdk
// Nguoi thuc hien : Le son trong Le
// Ngay thuc hien : 03/04/2012
// Phien ban : 1.0
//Trinh bien dich: CCS
// Mo ta phan cung : Dung PIC16F887 - thach anh 7.3728MHz
// ket noi LED (tich cuc [0])
//----------------------------------------------------------------
// Ngay hoan thanh :
// Ngay kiem tra :
// Nguoi kiem tra :
//----------------------------------------------------------------
//========================================================
#include <16f887.h> //khai bao chip cho trinh dich biet
#device *= 16 ADC = 10 //khai bao con tro chuong trinh la 16bit
#fuses HS, NOWDT, NOPROTECT,NOPUT, NOBROWNOUT, NODEBUG //config
#use delay (clock = 7.3728MHz) //khai bao nguon cap dao dong thach anh 7.3728MHz
#define LED PIN_D0 //dinh nghia Macro (ten thay the) cho pin RD0
void main (void)
{
while (true) //vong lap
{
output_low(LED); //xuat muc [0] ra pin RD0 (led off)
delay_ms(500); //lam tre 500ms
output_high(LED); //xuat muc [1] ra pin RD0 (led on)
delay_ms(500); //
}
}
Link download bai 1

Bài 2: Sử dụng ngắt timer



  • Bài này nhằm mục đích mô tả hoạt động của bộ đếm timer, sử dụng bộ định thời timer để điều khiển chu kỳ on/off của led_yelow. Từ ví dụ ta thấy hoạt động on/off của led_yelow hoàn toàn độc lập với led_red (led_red mô tả trạng thái hoạt động của chương trình chính)

Code:
//========================================================
// Ten chuong trinh : HD Su dung timer  
// Nguoi thuc hien : Le son trong Le
// Ngay thuc hien : 08/04/2012
// Phien ban : 1.0
//Trinh bien dich: CCS
// Mo ta phan cung : Dung PIC16F887 - thach anh 7.3728MHz
//                   ket noi LED_red (tich cuc [0]) bao trang thai hoat dong cua chuong trinh chinh
//                   ket noi LED_yelow (tich cuc [0]) bao trang thai hoat dong ham ngat timer
//----------------------------------------------------------------
// Ngay hoan thanh :
// Ngay kiem tra :
// Nguoi kiem tra :
//----------------------------------------------------------------
//========================================================
/*
   mo ta hoat dong cua ngat timer: Chuong trinh chinh (main) van miet mai thuc hien cong viec cua minh theo trinh tu song song voi do thi bo dem timer cung dang hoat dong.. nhung toi khi bo dem timer tran thi yeu cau ngat xay ra tuc thi chuong trinh chinh dung lai va nhay vao ham (void interrup_timer1 (void)) thuc hien sau khi phuc vu xong tro lai ctrinh chinh tiep tuc cong viec. 
*/

#include <16f887.h> //khai bao chip cho trinh dich biet
#device *= 16 ADC = 10 //khai bao con tro chuong trinh la 16bit
#fuses HS, NOWDT, NOPROTECT,NOPUT, NOBROWNOUT, NODEBUG //config
#use delay (clock = 7.3728MHz) //khai bao nguon cap dao dong thach anh 7.3728MHz (Tosc =0.5425us)
#define LED_red PIN_D0 //dinh nghia Macro (ten thay the) cho pin RD0
#define LED_yelow PIN_D1 //dinh nghia Macro (ten thay the) cho pin RD1

#INT_TIMER1
void interrup_timer1 (void)
{
   int1  x; //bien x gia tri 1bit
/*
   timer1 co bo dem 16bit = 65535
   lenh set_timer1(value); dat gia tri bat dau cho timer dem len den gia tri tran FFFF -> ngat timer xay ra tinh thoi gian ngat xay ra Tosc*(65535-535)
*/
   set_timer1(535); // 0.5425us*(65535-535)=~35.26ms
   x=!x;            //thuc hien dao (NOT) bit x va gan nguoc lai vao bien x
   output_bit(LED_yelow,x); //xuat muc [x] ra pin RD1

}
void main (void)
{
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
   enable_interrupts(int_timer1);
   enable_interrupts(global);
   set_timer1(535);
   while (true) //vong lap
   {
      output_low(LED_red); //xuat muc [0] ra pin RD0 (led on)
      delay_ms(1500); //lam tre 1500ms
      output_high(LED_red); //xuat muc [1] ra pin RD0 (led off)
      delay_ms(1500); //
   }
}

[Code mẫu 8051] Hiển thị trên matrix 8x8

Được đăng bởi NetVN Chủ Nhật, ngày 22 tháng 4 năm 2012 1 nhận xét


Code cho các bác tham khảo nhé, mún chỉnh nhanh chậm thì sửa 2 dòng delay hoặc delay vòng lập, muốn thêm port để đk 8x16 hay 8x24 thì gọi thêm thôi, chúc các bác thành công:
#include <REGX51.H>
/* Cot tu P1.0 den 1.7
Hang tu P2.0 den P3.7
De quet dua muc logic 0 lan luot ra cong 0
*/
/* Ham tre */
void delay(long time)
{
long n;
for(n=0; n<time; n++)
{
;
}
}
unsigned char kytu1[9];
unsigned char k=0;
/* Ham nap gia tri hien thi cac ky tu vao mang kytu1
co 8 gia tri dua ra va 1 gia tri khong bat den nao de cac ky tu cach nhau 1 cot */
void mahoa(unsigned char x)
{
switch(x)
{
case 0: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
case 1: { kytu1[0]=0x00; kytu1[1]=0x3E; kytu1[2]=0x0A; kytu1[3]=0x0E;
kytu1[4]=0x00; kytu1[5]=0x38; kytu1[6]=0x08; kytu1[7]=0x08; kytu1[8]=0x00;
break; }
case 2: { kytu1[0]=0x00; kytu1[1]=0x38; kytu1[2]=0x28; kytu1[3]=0x38;
kytu1[4]=0x00; kytu1[5]=0x38; kytu1[6]=0xA8; kytu1[7]=0xF8; kytu1[8]=0x00;
break; }
case 3: { kytu1[0]=0x00; kytu1[1]=0x38; kytu1[2]=0x08; kytu1[3]=0x08;
kytu1[4]=0x00; kytu1[5]=0x38; kytu1[6]=0x28; kytu1[7]=0x38; kytu1[8]=0x20;
break; }
case 4: { kytu1[0]=0x20; kytu1[1]=0x00; kytu1[2]=0x38; kytu1[3]=0x08;
kytu1[4]=0x38; kytu1[5]=0x08; kytu1[6]=0x38; kytu1[7]=0x00; kytu1[8]=0x38;
break; }
case 5: { kytu1[0]=0x38; kytu1[1]=0x08; kytu1[2]=0x38; kytu1[3]=0x08;
kytu1[4]=0x38; kytu1[5]=0x00; kytu1[6]=0x38; kytu1[7]=0x00; kytu1[8]=0x38;
break; }
case 6: { kytu1[0]=0x38; kytu1[1]=0x08; kytu1[2]=0x38; kytu1[3]=0x00;
kytu1[4]=0x38; kytu1[5]=0xA8; kytu1[6]=0xF8; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
case 7: { kytu1[0]=0x00; kytu1[1]=0x3C; kytu1[2]=0x0A; kytu1[3]=0x3C;
kytu1[4]=0x02; kytu1[5]=0x3E; kytu1[6]=0x02; kytu1[7]=0x00; kytu1[8]=0x3E;
break; }
case 8: { kytu1[0]=0x3E; kytu1[1]=0x2A; kytu1[2]=0x3E; kytu1[3]=0x00;
kytu1[4]=0x2E; kytu1[5]=0x2A; kytu1[6]=0x3E; kytu1[7]=0x00; kytu1[8]=0x3E;
break; }
case 9: { kytu1[0]=0x3E; kytu1[1]=0x22; kytu1[2]=0x22; kytu1[3]=0x00;
kytu1[4]=0x28; kytu1[5]=0x10; kytu1[6]=0x28; kytu1[7]=0x00; kytu1[8]=0x28;
break; }
case 10: { kytu1[0]=0x28; kytu1[1]=0x10; kytu1[2]=0x28; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
case 11: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
case 12: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
}
}
/* Ham quet led ma tran_ vua hien thi vua dich ky tu dan sang trai*/
void hienthi(void)
{
unsigned char n,m,lap;
unsigned char cot[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
for(m=0; m<8 ; m++)
{
for(lap=0; lap<10; lap ++)
{
for(n=0; n<8 ; n++)
{
if((n+m)<9 )
{
mahoa(k);
P0=cot[n];
P2=kytu1[n+m];
delay(45);
}
if((n+m) > 7)
{
mahoa(k+1);
P0=cot[n];
P2=kytu1[n+m-8];
delay(45);
}
P0=0xFF;
P2=0x00;
}
}
}
}
void main(void)
{
while(1)
{
hienthi();
k=k+1;
if(k==12) k=0;
}

[Code PIC] Mạch đo điện dung

Được đăng bởi NetVN 0 nhận xét
Code PIC mạch đo điện dung:
************************************************** *****************************
Project : Frequency Measurement
Author : pk
************************************************** *****************************/
#include <16f887.h>
#device *=16
#FUSES NOWDT, NOPUT,XT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock = 4M)


#define LCD_ENABLE_PIN PIN_D3
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

/*
#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_C3
#define LCD_DATA4 PIN_E2
#define LCD_DATA5 PIN_E1
#define LCD_DATA6 PIN_E0
#define LCD_DATA7 PIN_A5
*/

#include <lcd.c>
#use fast_io(c)
//************************************************** ****************************
int i;
float temp,verify;
//************************************************** ****************************

#INT_CCP1
void synchronous_re(){
temp = get_timer1();
set_timer1(0);
}
//------------------------------------------------------------------------------
#INT_CCP2
void synchronous_fe(){
temp = get_timer1();
set_timer1(0);
}
//************************************************** ****************************
void lcd_put_int(int num){
int temp;
unsigned char i = 0, c[5];
temp = num;
if (temp != 0) {
while(temp){
c[i++] = temp%10;
temp /= 10;
}
while(i) lcd_putc(c[--i] + '0');
}
else lcd_putc('0');
}
//************************************************** ****************************
void lcd_put_float(float num){
unsigned int temp;

temp = num/1;
lcd_put_int(temp);
temp = (num - temp)*100;
lcd_putc(',');
lcd_put_int(temp);

}
//************************************************** ****************************
void main(){
set_tris_c(0xff);
set_tris_b(0xff);

lcd_init();
lcd_putc("STARTING");
for(i = 1; i < 9; i++){
lcd_putc(".");
delay_ms(100);
}
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_4);
//SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1);

SETUP_CCP1(CCP_CAPTURE_RE);
SETUP_CCP2(CCP_CAPTURE_FE);

ENABLE_INTERRUPTS(INT_CCP1);
ENABLE_INTERRUPTS(INT_CCP2);
ENABLE_INTERRUPTS(global);

lcd_putc('\f');
lcd_putc("TAN SO HIEN TAI:");

while(1){
if(temp != verify){
verify = temp;
lcd_gotoxy(1,2);
lcd_putc(" ");
lcd_gotoxy(5,2);
lcd_put_float(500000/temp);
lcd_putc("Hz");
delay_ms(100);
}
}
}

Bộ Chuyển Đổi Số - Tương Tự : DAC

Được đăng bởi NetVN 0 nhận xét
Bộ Chuyển Đổi Số - Tương Tự : DAC - Trong kỹ thuật số, ta thấy đại lượng số có giá trị xác  định là một trong hai khả năng là 0 hoặc 1, cao hay thấp, đúng hoặc sai, vv… Trong thực tế chúng ta thấy rằng một đại lượng số (chẳng hạn mức điện thế) thực ra có thể có một giá trị bất kỳ nằm trong khoảng xác định và ta định rõ các giá trị trong phạm vi xác định sẽ có chung giá trị dạng số.
Ví dụ: Với logic TTL ta có: Từ 0V đến 0,8V là mức logic 0, từ 2V đến 5V là mức logic 1
Như vậy thì bất kỳ mức điện thế nào nằm trong khoảng 0 – 0,8V đều mang giá trị số là logic 0, còn mọi điện thế nằm trong khoảng 2 – 5V đều được gán giá trị số là 1.
Ngược lại trong kỹ thuật tương tự, đại lượng tương tự có thể lấy giá trị bất kỳ trong một khoảng giá trị liên tục. Và điều quan trọng hơn nữa là giá trị chính xác của đại lượng tương tự là là yếu tố quan trọng.
Hầu hết trong tự nhiên đều là các đại lượng tương tự như nhiệt độ, áp suất, cường độ ánh sáng, … Do đó muốn xử lý trong một  hệ thống kỹ thuật số, ta phải chuyển đổi sang dạng đại lượng số mới có thể xử lý và điều khiển các hệ thống được. Và ngược lại có những hệ thống tương tự cần được điều khiển chúng ta cũng phải chuyển đổi từ số sang tương tự. Trong phần này chúng ta sẽ tìm hiểu về quá trình chuyển đổi từ số sang tương tự -DAC (Digital to Analog Converter).
Chuyển đổi số sang tương tự là tiến trình lấy một giá trị được biểu diễn dưới dạng mã số ( digital code ) và chuyển đổi nó thành mức điện thế hoặc dòng điện tỉ lệ với giá trị số. Hình 5.1 minh họa sơ đồ khối của một bộ chuyển đổi DAC.

1.1 ÐỘ PHÂN GIẢI 
Độ phân giải (resolution) của bộ biến đổi DAC được định nghĩa là thay đổi nhỏ nhất có thể xảy ra ở đầu ra tương tự bởi kết qua của một thay đổi ở đầu vào số.
        Độ phân giải của DAC phụ thuộc vào số bit, do đó các nhà chế tạo thường ấn định độ phân giải của DAC ở dạng số bit. DAC 10 bit có độ phân giải tinh hơn DAC 8 bit. DAC có càng nhiều bit thì độ phân giải càng tinh hơn.
        Độ phân giải luôn bằng trọng số của LSB. Còn gọi là kích thước bậc thang (step size), vì đó là khoảng thay đổi của Vout khi giá trị của đầu vào số thay đổi từ bước này sang bước khác.
Dạng sóng bậc thang (hình 5.2) có 16 mức với 16 thạng thái đầu vào nhưng chỉ có 15 bậc giữa mức 0 và mức cực đại. Với DAC có N bit thì tổng số  mức khác nhau sẽ là 2N, và tổng số bậc sẽ là 2N – 1.
Do đó độ phân giải bằng với hệ số tỷ lệ trong mối quan hệ giữa đầu vào và đầu ra của DAC.
Đầu ra tương tự = K x đầu vào số
                Với K là mức điện thế (hoặc cường độ dòng điện) ở mỗi bậc.
Như vậy ta có công thức tính độ phân giải như sau:
Với   là đầu ra cực đại ( đầy thang )
                                     N là số bit
Nếu tính theo phần trăm ta có công thức như sau:
Ví dụ như hình 5.1 ta có
 

Ví dụ 1: Một ADC 10 bit có kích thước bậc thang = 10mV. Hãy xác định điện thế đầu ra cực đại ( đầy thang ) và tỷ lệ % độ phân giải.
Giải:
DAC có 10 bit nên ta có
Số bậc là 210 – 1 = 1023 bậc
Với mỗi bậc là 10mV nên đầu ra cực đại sẽ là 10mVx1023 = 10.23V
Từ ví dụ trên cho thấy tỷ lệ phần trăm độ phân giải giảm đi khi số bit đầu vào tăng lên. Do đó ta còn tính được % độ phân giải theo công thức:
 
            Với mã đầu vào nhị phân N bit ta có tổng số bậc là 2N – 1 bậc.

1.2 ĐỘ CHÍNH XÁC  
    Có nhiều cách đánh giá độ chính xác. Hai cách thông dụng nhất là sai số toàn thang (full scale error) và sai số tuyến tính (linearity error) thường được biểu biễn ở dạng phần trăm đầu ra cực đại (đầy thang) của bộ chuyển đổi.
    Sai số toàn thang là khoảng lệch tối đa ở đầu ra DAC so với giá trị dự kiến (lý tưởng), được biểu diễn ở dạng phần trăm.
    Sai số tuyến tính là khoảng lệch tối đa ở kích thước bậc thang so với kích thước bậc thang lý tưởng.
Điều quan trọng của một DAC là độ chính xác và độ phân giải phải tương thích với nhau.


1.3 SAI SỐ LỆCH 
    Theo lý tưởng thì đầu ra của DAC sẽ là 0V khi tất cả đầu vào nhị phân toàn là bit 0. Tuy nhiên trên thực tế thì mức điện thế ra cho trường hợp này sẽ rất nhỏ, gọi là sai số lệch ( offset error). Sai số này nếu không điều chỉnh thì sẽ được cộng vào đầu ra DAC dự kiến trong tất cả các trường hợp.
     Nhiều DAC có tính năng điều chỉnh sai số lệch ở bên ngoài, sẽ cho phép chúng ta triệt tiêu độ lệch này bằng cách áp mọi bit 0 ở đầu vào DAC và theo dõi đầu ra. Khi đó ta điều chỉnh chiết áp điều chỉnh độ lệch cho đến khi nào đầu ra bằng 0V.


1.4 THỜI GIAN ỔN ĐỊNH 
    Thời gian ổn định (settling time) là thời gian cần thiết để đầu ra DAC đi từ zero đến bậc thang cao nhất khi đầu vào nhị phân biến thiên từ chuỗi bit toàn 0 đến chuổi bit toàn là 1. Thực tế thời gian ổn định là thời gian để đầu vào DAC ổn định trong phạm vi ±1/2 kích thước bậc thang (độ phân giải) của giá trị cuối cùng.
    Ví dụ:  Một DAC có độ phân giải 10mV thì thời gian ổn định được đo là thời gian đầu ra cần có để ổn định trong phạm vi 5mV của giá trị đầy thang.
Thời gian ổn định có giá trị biến thiên trong khoảng 50ns đến 10ns. DAC với đầu ra dòng có thời gian ổn định ngắn hơn thời gian ổn định của DAC có đầu ra điện thế.


1.5 TRẠNG THÁI ĐƠN ĐIỆU 
    DAC có tính chất đơn điệu ( monotonic) nếu đầu ra của nó tăng khi đầu vào nhị phân tăng dần từ giá trị này lên giá trị kế tiếp. Nói cách khác là đầu ra bậc thang sẽ không có bậc đi xuống khi đầu vào nhị phân tăng dần từ zero đến đầy thang.
Tỉ số phụ thuộc dòng:
    DAC chất lượng cao yêu cầu sự ảnh hưởng của biến thiên điện áp nguồn đối với điện áp đầu ra vô cùng nhỏ. Tỉ số phụ thuộc nguồn là tỉ số biến thiên mức điện áp đầu ra với biến thiên điện áp  nguồn gây ra nó.
    Ngoài các thông số trên chúng ta cần phải quan tâm đên các thông số khác của một DAC  khi sử dụng như: các mức logic cao, thấp, điện trở, điện dung, của đầu vào; dải rộng, điện trở, điện dung của đầu ra; hệ số nhiệt, …


2.1 DAC dùng điện trở có trọng số nhị phân và bộ khuếch đại cộng.
Hình 5.3 là sơ đồ mạch của một mạch DAC 4 bit dùng điện trở và bộ khuếch đại đảo. Bốn đầu vào A, B, C, D có giá trị giả định lần lượt là 0V và 5V.
    Bộ khuếch đại thuật toán (Operational Amplifier – Op Amp) được dùng làm bộ cộng đảo cho tổng trọng số của bốn mức điện thế vào. Ta thấy các điện trở đầu vào giảm dần 1/2 lần điện trở trước nó. Nghĩa là đầu vào D (MSB) có RIN = 1k, vì vậy bộ khuếch đại cộng chuyển ngay mức điện thế tại D đi mà không làm suy giảm (vì Rf = 1k). Đầu vào C có R = 2k, suy giảm đi 1/2, tương tự đầu vào B suy giảm 1/4 và đầu vào A giảm 1/8. Do đó đầu ra bộ khuếch đại được tính bởi biểu thức:
dấu âm (-) biểu thị bộ khuếch đại cộng ở đây là khuếch đại cộng đảo. Dấu âm này chúng ta không cần quan tâm.
Như vậy ngõ ra của bộ khuếch đại cộng là mức điện thế tương tự, biểu thị tổng trọng số của các đầu vào. Dựa vào biểu thức (4) ta tính được các mức điện áp ra tương ứng với các tổ hợp của các ngõ vào (bảng 5.1).
Bảng 5.1  Đầu ra ứng với điều kiện các đầu vào thích hợp ở 0V hoặc 5V.
    Độ phân giải của mạch DAC hình 5.2 bằng với trọng số của LSB, nghĩa là bằng x 5V = 0.625V. Nhìn vào bảng 5.1 ta thấy đầu ra tương tự tăng 0.625V khi số nhị phân ở đầu vào tăng lên một bậc.
Ví dụ 2:
a. Xác định trọng số của mỗi bit đầu vào ở hình 5.2
b. Thay đổi Rf thành 500W.Xác định đầu ra cực đại đầy thang.
Giải:
a. MSB chuyển đi với mức khuếch đại = 1 nên trọng số của nó ở đầu ra là 5V. Tương tự như vậy ta tính được các trọng số của các bit đầu vào như sau:
MSB                     #   5V
MSB thứ 2             #   2.5V (giảm đi 1/2)
MSB thứ 3             #   1.25V (giảm đi 1/4)
MSB thứ 4  (LSB)    #   0.625V (giảm đi 1/8)
b. Nếu Rf = 500W giảm theo thừa số 2, nên mỗi trọng số đầu vào sẽ nhỏ hơn 2 lần so với giá trị tính ở trên. Do đó đầu ra cực đại ( đầy thang) sẽ giảm theo cùng thừa số, còn lại: -9.375/2 = -4.6875V

2.2 DAC R/2R ladder
Mạch DAC ta vừa khảo sát sử dụng điện trở có trọng số nhị phân tạo trọng số thích hợp cho từng bit vào. Tuy nhiên có nhiều hạn chế trong thực tế. Hạn chế lớn nhất đó là khoảng cách chênh lệch đáng kể ở giá trị điện trở giữa LSB và MSB, nhất là trong các DAC có độ phân giải cao (nhiều bit). Ví dụ nếu điện trở MSB = 1k trong DAC 12 bit, thì điện trở LSB sẽ có giá trị trên 2M. Điều này rất khó cho việc chế tạo các IC có độ biến thiên rộng về điện trở để có thể duy trì tỷ lệ chính xác.
Để khắc phục được nhược điểm này, người ta đã tìm ra một mạch DAC đáp ứng được yêu cầu đó là mạch DAC mạng R/2R ladder. Các điện trở trong mạch này chỉ biến thiên trong khoảng từ 2 đến 1. Hình 5.4 là một mạch DAC R/2R ladder cơ bản.
Từ hình 5.4 ta thấy được cách sắp xếp các điện trở chỉ có hai giá trị được sử dụng là R và 2R. Dòng IOUT phụ thuộc vào vị trí của 4 chuyển mạch, đầu vào nhị phân B0B1B2B3chi phối trạng thái của các chuyển mạch này. Dòng ra IOUT được phép chạy qua bộ  biến đổi dòng thành điện (Op-Amp) để biến dòng thành điện thế ra VOUT. Điện thế ngõ ra VOUT được tính theo công thức:
Với B là giá trị đầu vào nhị phân, biến thiên từ 0000 (0) đến 1111(15)
Ví dụ 3: Giả sử VREF = 5V của DAC ở hình 5.4. Tính độ phân giải và đầu ra cực đại của DAC này?
Giải
        Độ phân giải bằng với trọng số của LSB, ta xác định trọng số LSB bằng cách gán B = 00012 = 1. Theo công thức (5), ta có:
Đầu ra cực đại xác định được khi B = 11112 = 1510. Áp dụng công thức (5) ta có:


        Trong các thiết bị kỹ thuật số đôi lúc cũng đòi hỏi quá trình điều khiển bằng dòng điện. Do đó người ta đã tạo ra các DAC với ngõ ra dòng để đáp ứng yêu cầu đó. Hình 5.5 là một DAC với ngõ ra dòng tương tự tỷ lệ với đầu vào nhị phân. Mạch DAC này 4 bit, có 4 đường dẫn dòng song song mỗi đường có một chuyển mạch điều khiển. Trạng thái của mỗi chuyển mạch bị chi phối bởi mức logic đầu vào nhị phân.
Dòng chảy qua mỗi đường là do mức điện thế quy chiếu VREF và giá trị điện trở trong đường dẫn quyết định. Giá trị điện trở có trọng số theo cơ số 2, nên cường độ dòng điện cũng có trọng số theo hệ số 2 và tổng cường độ dòng điện ra IOUT sẽ là tổng các dòng của các nhánh.
DAC với đầu dòng ra có thể chuyển thành DAC có đầu ra điện thế bằng cách dùng bộ khuếch đại thuật toán (Op-Amp) như hình 5.6.
Ở hình trên IOUT ra từ DAC phải nối đến đầu vào “ – ” của bộ khuếch đại thuật toán. Hồi tiếp âm của bộ khuếch đại thuật toán buộc dòng IOUT phải chạy qua RF và tạo điện áp ngõ ra VOUT  và được tính theo công thức:
Do đó VOUT sẽ là mức điện thế tương tự, tỷ lệ với đầu vào nhị phân của DAC.


2.4 DAC  điện trở hình T
Hình 5.7 là sơ đồ DAC điện trở hình T 4 bit. Trong sơ đồ có hai loại điện trở là R và 2R được mắc thành 4 cực hình T nối dây chuyền. Các S3, S2, S1, S0 là các chuyển mạch điện tử. Mạch DAC này dùng bộ khuếch đại thuật toán (Op-Amp) khuếch đại đảo. VREF là điện áp chuẩn làm tham khảo. B3, B2, B1, B0 là mã nhị phân 4 bit. Vo là điện áp tương tự ngõ ra. Ta thấy các chuyển mạch chịu sự điểu khiển của số nhị phân tương ứng với các công tắc:  khi Bi = 1 thì công tắc Si đóng vào VREF, kho Bi = 0 thì Si nối đất.
Nguyên lý làm việc của DAC này cũng đơn giản. Người đọc có thể giải thích được hoạt động của mạch dựa trên hình vẽ và những kiến thức đã học. Chúng ta chỉ cần cho lần lượt các bit Bi bằng logic 1 và 0 ta sẽ tính được VOUT sau đó dùng nguyên xếp chồng ta sẽ tính được điện áp ra:
Biểu thức (7) chứng tỏ rằng biên độ điện áp tương tự đầu ra tỉ lệ thuận với giá trị tín hiệu số đầu vào. Chúng ta có thể thấy rằng đối với DAC điện trở hình T N bit thì điện áp tương tự đầu ra VOUT sẽ là:
Sai Số Chuyển Đổi
Đối với mạch DAC điện trở hình T thì sai số chuyển đổi do các nguyên nhân sau:
K     Sai lệch điện áp chuẩn tham chiếu VREF .
Từ công thức (8) ta có thể tính sai số chuyển đổi DA do riêng sai số lệch điện áp chuẩn tham chiếu VREF gây ra như sau:
Biểu thức trên cho thấy sai số của điện áp tương tự DVOUT tỉ lệ với sai lệch DVREF và tỉ lệ thuận với giá trị tín hiệu số đầu vào.
K     Sự trôi điểm 0 của khuếch đại thuật toán.
Sự trôi điểm 0 của bộ khuếch đại thuật toán ảnh hưởng như nhau đối với mọi giá trị tín hiệu số được biến đổi. Sai số DVOUT do trôi điểm 0 không phụ thuộc giá trị tín hiệu số.
K     Điện áp rơi trên điện trở tiếp xúc của tiếp điểm chuyển mạch.
Các chuyển mạch không phải là lý tưởng, thực tế điện áp rơi khi nối thông của mạch điện chuyển mạch không thể tuyệt đối bằng 0. Vậy điện áp rơi này đóng vai trò tín hiệu sai số đưa đến đầu vào mạng điện trở hình T.
K     Sai số của điện trở .
Sai số điện trở cũng gây ra sai số phi tuyến. Sai số của các điện trở không như nhau, tác động gây sai số chuyển đổi DA của những điện trở khác nhau về vị trí là khác nhau.
Tốc độ chuyển đổi:
DAC điện trở hình T công tác song song (các bit tín hiệu số đầu vào được đưa vào song song) nên có tốc độ chuyển đổi cao. Thời gian cần thiết cho một lần chuyển đổi gồm hai gai đoạn: thời gian trể truyền đạt của bit tín hiệu vào xa nhất đến bộ khuếch đại thuật toán và thời gian cần thiết để bộ khuếch đại thuật toán ổn định tín hiệu ra.


Có nhiều phương pháp và sơ đồ mạch giúp tạo DAC vận hành như đã giới thiệu. Sau đây là một số dạng mạch DAC cơ bản sẽ giúp chúng ta hiểu rõ và sâu hơn về quá trình chuyển đổi từ số sang tương tự.
Hình 5.3 là sơ đồ mạch của một mạch DAC 4 bit dùng điện trở và bộ khuếch đại đảo. Bốn đầu vào A, B, C, D có giá trị giả định lần lượt là 0V và 5V.
    Bộ khuếch đại thuật toán (Operational Amplifier – Op Amp) được dùng làm bộ cộng đảo cho tổng trọng số của bốn mức điện thế vào. Ta thấy các điện trở đầu vào giảm dần 1/2 lần điện trở trước nó. Nghĩa là đầu vào D (MSB) có RIN = 1k, vì vậy bộ khuếch đại cộng chuyển ngay mức điện thế tại D đi mà không làm suy giảm (vì Rf = 1k). Đầu vào C có R = 2k, suy giảm đi 1/2, tương tự đầu vào B suy giảm 1/4 và đầu vào A giảm 1/8. Do đó đầu ra bộ khuếch đại được tính bởi biểu thức:
dấu âm (-) biểu thị bộ khuếch đại cộng ở đây là khuếch đại cộng đảo. Dấu âm này chúng ta không cần quan tâm.
Như vậy ngõ ra của bộ khuếch đại cộng là mức điện thế tương tự, biểu thị tổng trọng số của các đầu vào. Dựa vào biểu thức (4) ta tính được các mức điện áp ra tương ứng với các tổ hợp của các ngõ vào (bảng 5.1).
Bảng 5.1  Đầu ra ứng với điều kiện các đầu vào thích hợp ở 0V hoặc 5V.
    Độ phân giải của mạch DAC hình 5.2 bằng với trọng số của LSB, nghĩa là bằng x 5V = 0.625V. Nhìn vào bảng 5.1 ta thấy đầu ra tương tự tăng 0.625V khi số nhị phân ở đầu vào tăng lên một bậc.
Ví dụ 2:
a. Xác định trọng số của mỗi bit đầu vào ở hình 5.2
b. Thay đổi Rf thành 500W.Xác định đầu ra cực đại đầy thang.
Giải:
a. MSB chuyển đi với mức khuếch đại = 1 nên trọng số của nó ở đầu ra là 5V. Tương tự như vậy ta tính được các trọng số của các bit đầu vào như sau:
MSB                        #   5V
MSB thứ 2             #   2.5V (giảm đi 1/2)
MSB thứ 3             #   1.25V (giảm đi 1/4)
MSB thứ 4  (LSB) #   0.625V (giảm đi 1/8)
b. Nếu Rf = 500giảm theo thừa số 2, nên mỗi trọng số đầu vào sẽ nhỏ hơn 2 lần so với giá trị tính ở trên. Do đó đầu ra cực đại ( đầy thang) sẽ giảm theo cùng thừa số, còn lại: -9.375/2 = -4.6875V

2.2 DAC R/2R ladder
Mạch DAC ta vừa khảo sát sử dụng điện trở có trọng số nhị phân tạo trọng số thích hợp cho từng bit vào. Tuy nhiên có nhiều hạn chế trong thực tế. Hạn chế lớn nhất đó là khoảng cách chênh lệch đáng kể ở giá trị điện trở giữa LSB và MSB, nhất là trong các DAC có độ phân giải cao (nhiều bit). Ví dụ nếu điện trở MSB = 1k trong DAC 12 bit, thì điện trở LSB sẽ có giá trị trên 2M. Điều này rất khó cho việc chế tạo các IC có độ biến thiên rộng về điện trở để có thể duy trì tỷ lệ chính xác.
Để khắc phục được nhược điểm này, người ta đã tìm ra một mạch DAC đáp ứng được yêu cầu đó là mạch DAC mạng R/2R ladder. Các điện trở trong mạch này chỉ biến thiên trong khoảng từ 2 đến 1. Hình 5.4 là một mạch DAC R/2R ladder cơ bản.
Từ hình 5.4 ta thấy được cách sắp xếp các điện trở chỉ có hai giá trị được sử dụng là R và 2R. Dòng IOUT phụ thuộc vào vị trí của 4 chuyển mạch, đầu vào nhị phân B0B1B2B3chi phối trạng thái của các chuyển mạch này. Dòng ra IOUT được phép chạy qua bộ  biến đổi dòng thành điện (Op Amp) để biến dòng thành điện thế ra VOUT. Điện thế ngõ ra VOUT được tính theo công thức:
Với B là giá trị đầu vào nhị phân, biến thiên từ 0000 (0) đến 1111(15)
Ví dụ 3: Giả sử VREF = 5V của DAC ở hình 5.4. Tính độ phân giải và đầu ra cực đại của DAC này?
Giải
        Độ phân giải bằng với trọng số của LSB, ta xác định trọng số LSB bằng cách gán B = 00012 = 1. Theo công thức (5), ta có:
Đầu ra cực đại xác định được khi B = 11112 = 1510. Áp dụng công thức (5) ta có:


2.3 DAC với đầu ra dòng
        Trong các thiết bị kỹ thuật số đôi lúc cũng đòi hỏi quá trình điều khiển bằng dòng điện. Do đó người ta đã tạo ra các DAC với ngõ ra dòng để đáp ứng yêu cầu đó. Hình 5.5 là một DAC với ngõ ra dòng tương tự tỷ lệ với đầu vào nhị phân. Mạch DAC này 4 bit, có 4 đường dẫn dòng song song mỗi đường có một chuyển mạch điều khiển. Trạng thái của mỗi chuyển mạch bị chi phối bởi mức logic đầu vào nhị phân.
Dòng chảy qua mỗi đường là do mức điện thế quy chiếu VREF và giá trị điện trở trong đường dẫn quyết định. Giá trị điện trở có trọng số theo cơ số 2, nên cường độ dòng điện cũng có trọng số theo hệ số 2 và tổng cường độ dòng điện ra IOUT sẽ là tổng các dòng của các nhánh.
DAC với đầu dòng ra có thể chuyển thành DAC có đầu ra điện thế bằng cách dùng bộ khuếch đại thuật toán (Op Amp) như hình 5.6.
Ở hình trên IOUT ra từ DAC phải nối đến đầu vào “ – ” của bộ khuếch đại thuật toán. Hồi tiếp âm của bộ khuếch đại thuật toán buộc dòng IOUT phải chạy qua RF và tạo điện áp ngõ ra VOUT  và được tính theo công thức:
Do đó VOUT sẽ là mức điện thế tương tự, tỷ lệ với đầu vào nhị phân của DAC.



2.4 DAC  điện trở hình T
Hình 5.7 là sơ đồ DAC điện trở hình T 4 bit. Trong sơ đồ có hai loại điện trở là R và 2R được mắc thành 4 cực hình T nối dây chuyền. Các S3, S2, S1, S0 là các chuyển mạch điện tử. Mạch DAC này dùng bộ khuếch đại thuật toán (Op Amp) khuếch đại đảo. VREF là điện áp chuẩn làm tham khảo. B3, B2, B1, B0 là mã nhị phân 4 bit. Vo là điện áp tương tự ngõ ra. Ta thấy các chuyển mạch chịu sự điểu khiển của số nhị phân tương ứng với các công tắc:  khi Bi = 1 thì công tắc Si đóng vào VREF, kho Bi = 0 thì Si nối đất.
Nguyên lý làm việc của DAC này cũng đơn giản. Người đọc có thể giải thích được hoạt động của mạch dựa trên hình vẽ và những kiến thức đã học. Chúng ta chỉ cần cho lần lượt các bit Bi bằng logic 1 và 0 ta sẽ tính được VOUT sau đó dùng nguyên xếp chồng ta sẽ tính được điện áp ra:
Biểu thức (7) chứng tỏ rằng biên độ điện áp tương tự đầu ra tỉ lệ thuận với giá trị tín hiệu số đầu vào. Chúng ta có thể thấy rằng đối với DAC điện trở hình T N bit thì điện áp tương tự đầu ra VOUT sẽ là:
Sai Số Chuyển Đổi
Đối với mạch DAC điện trở hình T thì sai số chuyển đổi do các nguyên nhân sau:
K     Sai lệch điện áp chuẩn tham chiếu VREF .
Từ công thức (8) ta có thể tính sai số chuyển đổi DA do riêng sai số lệch điện áp chuẩn tham chiếu VREF gây ra như sau:
Biểu thức trên cho thấy sai số của điện áp tương tự DVOUT tỉ lệ với sai lệch DVREF và tỉ lệ thuận với giá trị tín hiệu số đầu vào.
K     Sự trôi điểm 0 của khuếch đại thuật toán.
Sự trôi điểm 0 của bộ khuếch đại thuật toán ảnh hưởng như nhau đối với mọi giá trị tín hiệu số được biến đổi. Sai số DVOUT do trôi điểm 0 không phụ thuộc giá trị tín hiệu số.
K     Điện áp rơi trên điện trở tiếp xúc của tiếp điểm chuyển mạch.
Các chuyển mạch không phải là lý tưởng, thực tế điện áp rơi khi nối thông của mạch điện chuyển mạch không thể tuyệt đối bằng 0. Vậy điện áp rơi này đóng vai trò tín hiệu sai số đưa đến đầu vào mạng điện trở hình T.
K     Sai số của điện trở .
Sai số điện trở cũng gây ra sai số phi tuyến. Sai số của các điện trở không như nhau, tác động gây sai số chuyển đổi DA của những điện trở khác nhau về vị trí là khác nhau.
Tốc độ chuyển đổi:
DAC điện trở hình T công tác song song (các bit tín hiệu số đầu vào được đưa vào song song) nên có tốc độ chuyển đổi cao. Thời gian cần thiết cho một lần chuyển đổi gồm hai gai đoạn: thời gian trể truyền đạt của bit tín hiệu vào xa nhất đến bộ khuếch đại thuật toán và thời gian cần thiết để bộ khuếch đại thuật toán ổn định tín hiệu ra.
(Nguồn: vinacel)

Lưu trữ bài viết

Người theo dõi

Theo dõi qua email

Thống kê truy cập