PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 21-03-2008, 04:46 PM   #1
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bài 2: Delay

Khi lập trình bằng C30, hoặc các trình dịch từ gcc, chúng ta chú ý rằng gcc không cung cấp hàm delay( ). Do vậy, chúng ta phải tự viết các hàm này.

Sau đây là một thí dụ, các bạn hãy thử phân tích thí dụ này để hiểu được cách viết một hàm delay như thế nào, tất nhiên các bạn hoàn toàn có thể sử dụng luôn hàm này.

Lưu ý khi sử dụng, hãy tính toán một cách kỹ lưỡng các giá trị đặt cho cấu hình của mình.


File delay.h:
Code:
// Thay đổi giá trị FCY để phù hợp với cấu hình của chip, tính bằng MIPS
#define FCY  16000000					//16 MIPS

void Delay( unsigned int delay_count );
void Delay_Us( unsigned int delayUs_count );

// Những cấu hình này thường dùng để khởi tạo LCD, nên để ở đây
#define Delay200uS_count  (FCY * 0.0002) / 1080
#define Delay_1mS_Cnt     (FCY * 0.001) / 2950
#define Delay_2mS_Cnt     (FCY * 0.002) / 2950
#define Delay_5mS_Cnt     (FCY * 0.005) / 2950
#define Delay_15mS_Cnt    (FCY * 0.015) / 2950
#define Delay_1S_Cnt      (FCY * 1) / 2950

File delay.c:
Code:
#include "delay.h"

unsigned int temp_count;

void Delay( unsigned int delay_count ) 
{
	temp_count = delay_count +1;
	asm volatile("outer: dec _temp_count");	
	asm volatile("cp0 _temp_count");
	asm volatile("bra z, done");
	asm volatile("do #3200, inner" );	
	asm volatile("nop");
	asm volatile("inner: nop");
	asm volatile("bra outer");
	asm volatile("done:");
}
	

void Delay_Us( unsigned int delayUs_count )
{
	temp_count = delayUs_count +1;
	asm volatile("outer1: dec _temp_count");	
	asm volatile("cp0 _temp_count");
	asm volatile("bra z, done1");
	asm volatile("do #1500, inner1" );	
	asm volatile("nop");
	asm volatile("inner1: nop");
	asm volatile("bra outer1");
	asm volatile("done1:");
}

thay đổi nội dung bởi: falleaf, 22-03-2008 lúc 06:22 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-04-2008, 01:22 AM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bài 3: ADC 10/12-bit

Hoạt động ADC của các chip MCHP đều được mô tả như hình sau:


Quá trình lấy mấu ADC được thực hiện thông qua 2 quá trình: Sample (Lấy mẫu) và Conversion (Biến đổi). Quá trình này được mô tả đơn giản bằng việc dsPIC sẽ đóng khóa K để điện áp bên ngoài tích đủ vào một con tụ, sau đó mở khoá K để phân cách với mạch ngoài, và bắt đầu quá trình biến đổi từ Analog thành Digital.

Quá trình biến đổi được mô tả như hình dưới đây:



Vấn đề này quá đơn giản, vậy chúng ta cần tìm hiểu gì?

Chúng ta cần tìm hiểu:
  1. Làm thế nào để cấu hình hoạt động cho Module ADC để nó hoạt động theo ý ta muốn?
  2. Khi nào thì bắt đầu quá trình Sample (lấy mẫu), khi nào thì bắt đầu quá trình Conversion (biến đổi). Có những cách nào để tác động vào quá trình này?
  3. Sau khi chuyển đổi xong, làm thế nào ta lấy được kết quả và bỏ vào một thanh ghi bất kỳ mà ta muốn?

Thực tế là chúng ta muốn thế, nhắm mắt lại và kệ xừ mọi thứ, cái quan trọng là khi kết quả nằm trong một biến nào đó là xong. Người lập trình C lúc nào cũng mong muốn điều này, bởi nếu không thì họ đã lập trình với ASM30 mất rồi. Chúng ta sẽ tìm hiểu ở đây theo kiểu tư duy của người lập trình bằng ngôn ngữ cấp cao, nhưng sẽ hiểu đủ sâu để có thể làm việc với ASM30.

F đặt ra những câu hỏi theo thứ tự tư duy như bên dưới đây:

1. Thời gian Sample (Lấy mẫu) và Conversion (Biến đổi) là bao nhiêu?

Đơn giản cực, đôi khi các bạn không để ý, nhưng nó có ngay trong datasheet. F lấy thí dụ datasheet của dòng dsPIC33FJxxxMCxxx (DS70287A-page 319)





Vậy ở đây xuất hiện thêm một số khái niệm mà sau này để đơn giản, F viết là TAD và Tcy. Mối quan hệ giữa chúng? Làm sao để đặt được? Đây là câu hỏi tiếp theo và chúng ta sẽ giải quyết ngay dưới đây.


(còn tiếp, vì F chưa có thời gian viết xong)

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2009, 11:09 PM   #3
laiquangtuyen
Đệ tử 4 túi
 
laiquangtuyen's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 83
:
Send a message via Yahoo to laiquangtuyen
Thumbs down

Luồng này đang hay chỗ giới thiệu bài giảng về DSPIC33, các bác hỏi lung tung cuối cùng đứt đoạn giữa chừng không ai chỉ nữa rồi! Tiếp tục đi, còn về phần DMA tui muốn tìm hiểu nhưng hok có ai chỉ nữa!
__________________
LẠI QUANG TUYẾN
Phone: 0906.189.269
laiquangtuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-02-2010, 11:32 PM   #4
heavenlylove
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 8
:
Smile ADC của dspic33fj12gp202

Trích:
Nguyên văn bởi falleaf View Post
Bài 3: ADC 10/12-bit

Hoạt động ADC của các chip MCHP đều được mô tả như hình sau:


Quá trình lấy mấu ADC được thực hiện thông qua 2 quá trình: Sample (Lấy mẫu) và Conversion (Biến đổi). Quá trình này được mô tả đơn giản bằng việc dsPIC sẽ đóng khóa K để điện áp bên ngoài tích đủ vào một con tụ, sau đó mở khoá K để phân cách với mạch ngoài, và bắt đầu quá trình biến đổi từ Analog thành Digital.

Quá trình biến đổi được mô tả như hình dưới đây:



Vấn đề này quá đơn giản, vậy chúng ta cần tìm hiểu gì?

Chúng ta cần tìm hiểu:
  1. Làm thế nào để cấu hình hoạt động cho Module ADC để nó hoạt động theo ý ta muốn?
  2. Khi nào thì bắt đầu quá trình Sample (lấy mẫu), khi nào thì bắt đầu quá trình Conversion (biến đổi). Có những cách nào để tác động vào quá trình này?
  3. Sau khi chuyển đổi xong, làm thế nào ta lấy được kết quả và bỏ vào một thanh ghi bất kỳ mà ta muốn?

Thực tế là chúng ta muốn thế, nhắm mắt lại và kệ xừ mọi thứ, cái quan trọng là khi kết quả nằm trong một biến nào đó là xong. Người lập trình C lúc nào cũng mong muốn điều này, bởi nếu không thì họ đã lập trình với ASM30 mất rồi. Chúng ta sẽ tìm hiểu ở đây theo kiểu tư duy của người lập trình bằng ngôn ngữ cấp cao, nhưng sẽ hiểu đủ sâu để có thể làm việc với ASM30.

F đặt ra những câu hỏi theo thứ tự tư duy như bên dưới đây:

1. Thời gian Sample (Lấy mẫu) và Conversion (Biến đổi) là bao nhiêu?

Đơn giản cực, đôi khi các bạn không để ý, nhưng nó có ngay trong datasheet. F lấy thí dụ datasheet của dòng dsPIC33FJxxxMCxxx (DS70287A-page 319)





Vậy ở đây xuất hiện thêm một số khái niệm mà sau này để đơn giản, F viết là TAD và Tcy. Mối quan hệ giữa chúng? Làm sao để đặt được? Đây là câu hỏi tiếp theo và chúng ta sẽ giải quyết ngay dưới đây.


(còn tiếp, vì F chưa có thời gian viết xong)

Chúc vui
Anh viết tiếp đi anh. Anh có thể nói kỹ hơn về chuyển đổi tín hiệu am thanh sàng số được không?
heavenlylove vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2010, 02:42 PM   #5
musashi17
Nhập môn đệ tử
 
Tham gia ngày: Sep 2010
Bài gửi: 1
:
Anh F đang viết mọi người hỏi sao không ra topic khác ạ. Anh F viết tiếp đi anh. Cảm ơn anh về bài giảng của anh.
musashi17 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
configuration, dspic30f, dspic33f

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 12:09 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam