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 03-05-2006, 11:39 PM   #1
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
dsPIC Tutorial 2-Các kỹ thuật cơ bản

Tutorial 2 cho dsPIC, viết trong ASM30. Bà con đừng nôn nóng nhé, sẽ có các tutorial viết bằng C30. Những vấn đề cơ bản về dsPIC nên được viết bằng ASM30, để hiểu rõ hơn cấu trúc của chip.

Tutorial này chỉ có các ví dụ về LED, nhưng có nhiều kỹ thuật cơ bản và khá nhiều lệnh cơ bản được đề cập, do đó các bạn đừng bỏ qua nó. Tôi sẽ dựa vào những kỹ thuật và lệnh cơ bản này để viết tiếp các tutorial khác.

Các tập tin nguồn và .hex nằm trong tập tin .zip nhé.

Chúc thành công nhé!

Thân,
File Kèm Theo
File Type: pdf TUT02_01_PVN_NQNT_160306.pdf (192.0 KB, 9360 lần tải)
File Type: zip Vidu2-dsPIC-ASM30.zip (8.7 KB, 2673 lần tải)
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-08-2006, 07:58 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Như đã thông báo, dưới đây là link để download các mã nguồn viết trong C30 (và các tập tin .hex đã được dịch ra) cho các ví dụ của tutorial này. Các mã nguồn C30 được chuyển đổi từ các mã nguồn ASM30, với chú thích khá chi tiết, do đó tôi sẽ không viết tutorial cho phiên bản C30.
http://picvietnam.com/download/uploa...n/Vidu2C30.zip

Chúc thành công!

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-11-2006, 06:49 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Của em đây!

Thân,
File Kèm Theo
File Type: zip Vidu2C30.zip (7.4 KB, 2111 lần tải)
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-11-2006, 10:01 PM   #4
typhn
Đệ tử 1 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 19
:
Chào bác nam.trước em có làm với pic6F877A,bây giờ em chuyển sang học về DSPIC.
Bác có thể nói rõ hơn về thanh ghi LATX được ko bác.
Con 877A ko có thanh ghi này và em đọc trong datasheet thì ko hiểu lắm.
Thanh ghi TrisX thì vẫn giống 877A,để định ngiã cổng vào/ra
Còn thanh ghi PortX trong 877A để xuất dữ liệu ra là mức cao hay thấp.
Còn trong các ví dụ của bác,em chưa thấy được vai trò của PortX
Và dường như bác toàn sử dụng LatX.
Bác nói rõ hơn cho em được ko
Thanks bác
typhn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-11-2006, 02:25 AM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi typhn View Post
Chào bác nam.trước em có làm với pic6F877A,bây giờ em chuyển sang học về DSPIC.
Bác có thể nói rõ hơn về thanh ghi LATX được ko bác.
Con 877A ko có thanh ghi này và em đọc trong datasheet thì ko hiểu lắm.
Thanh ghi TrisX thì vẫn giống 877A,để định ngiã cổng vào/ra
Còn thanh ghi PortX trong 877A để xuất dữ liệu ra là mức cao hay thấp.
Còn trong các ví dụ của bác,em chưa thấy được vai trò của PortX
Và dường như bác toàn sử dụng LatX.
Bác nói rõ hơn cho em được ko
Thanks bác
Trong các PIC cấp thấp (chẳng hạn như PIC16F877A), chỉ có một thanh ghi xuất nhập, và do hiệu ứng read-modify-write, các thao tác đối với các thanh ghi ngõ vào/ngõ ra có thể gây ra những khó khăn, buộc người dùng phải thực hiện các chuỗi thao tác nhất định để tránh những rắc rối có thể có. Tôi đã nói về read-modify-write ở một luồng khác, bạn hãy dùng chức năng Search của diễn đàn để tìm.

Kể từ dòng PIC cấp cao (PIC18), Microchip đã sử dụng hai thanh ghi đệm cho các thao tác xuất nhập, là LATx và PORTx. Như vậy, khi ghi ra các ngõ ra, chúng ta sẽ thao tác thanh ghi LATx, còn khi đọc vào từ các ngõ vào, chúng ta sẽ thao tác thanh ghi PORTx, và sẽ tránh được các rắc rối liên quan đến hiệu ứng read-modify-write.

Bạn có thể thấy tôi sử dụng các thanh ghi PORTx ở tutorial 3, khi đọc trạng thái của các switch.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-11-2006, 08:46 PM   #6
typhn
Đệ tử 1 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 19
:
ah,thì ra là vậy,cảm ơn bác.
Bác cho em hỏi câu nữa,nếu bác có thời gian.
Nếu 1 cổng định nghĩa là lối vào(như RE0) chẳng hạn thì nó ở trạng thái
trở kháng cao phải ko bác( tức là ko phải mức 0 mà cũng chả phải mức 1).
typhn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-11-2006, 01:25 AM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi typhn View Post
ah,thì ra là vậy,cảm ơn bác.
Bác cho em hỏi câu nữa,nếu bác có thời gian.
Nếu 1 cổng định nghĩa là lối vào(như RE0) chẳng hạn thì nó ở trạng thái
trở kháng cao phải ko bác( tức là ko phải mức 0 mà cũng chả phải mức 1).
Một chân được định nghĩa là ngõ vào sẽ có bộ đệm ngõ ra bị disable. Chân đó sẽ được dùng như một ngõ vào dạng CMOS, với đặc tính Schmitt Trigger cho đa số chân.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2007, 12:06 PM   #8
longho559
Nhập môn đệ tử
 
Tham gia ngày: Jan 2007
Bài gửi: 2
:
Code:
//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips
void Init_TMR1(void) {
	TMR1 = 0;		//Xoa so dem trong TMR1
	PR1 = 0x7A12;		//Nguong tran la 1 giay tuong ung voi clock = 32 MHz
	_T1IF = 0;		//Xoa co ngat cua Timer 1
	T1CON = 0x8030;		//Dung fcy lam clock, prescale = 1:256, bat Timer 1
	_T1IE = 1;		//Cho phep ngat Timer 1
}
Trong đoạn chương trình trên em ko hiểu phần nhập giá trị PR1 = 0x7A12; sao lại ra 1 giây và phần T1CON = 0x8030; anh Nam có thể giải thích rõ hơn được ko?

thay đổi nội dung bởi: namqn, 26-02-2007 lúc 05:47 PM.
longho559 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2007, 05:55 PM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
T1CON<5:4> = '11' sẽ cho prescale là 1:256 (nghĩa là 256 chu kỳ máy thì timer 1 mới đếm thêm 1 đơn vị), và T1CON<15> = '1' để bật timer. Vậy T1CON = 1000 0000 0011 0000 = 0x8030.

PR1 = 0x7A12 = 31250.

Với tần số thực thi lệnh (Fosc/4) = 8 MIPS = 8000000, thời gian để timer 1 tràn là 8000000/(256*31250) = 1 (giây).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2008, 05:51 PM   #10
ajack
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 6
:
Code:
// Timer 1 initialize: Internal Cycle Clock, với period_value = 16000, internal cycle là 16MIPs
void init_Timer1 (unsigned int Period_Value)
{
	T1CONbits.TON = 0;		// Disable Timer
	T1CONbits.TCS = 0;		// Select internal instruction cycle clock 
	T1CONbits.TGATE = 0;	// Disable Gated Timer mode
	T1CONbits.TCKPS = 0b00;	// Select 1:1 Prescaler
	TMR1 = 0x00; 			// Clear timer register
	PR1 = Period_Value; 	// Load the period value, 
	IPC0bits.T1IP = 0x01;	// Set Timer 1 Interrupt Priority Level
	IFS0bits.T1IF = 0;		// Clear Timer 1 Interrupt Flag
	IEC0bits.T1IE = 1;		// Enable Timer1 interrupt
	T1CONbits.TON = 1;		// Start Timer
}
Không hiểu tại sao mà mình không tạo được interrupt 1ms, mà lâu hơn 1ms
ajack vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2008, 06:41 PM   #11
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ajack View Post
Code:
// Timer 1 initialize: Internal Cycle Clock, với period_value = 16000, internal cycle là 16MIPs
void init_Timer1 (unsigned int Period_Value)
{
	T1CONbits.TON = 0;		// Disable Timer
	T1CONbits.TCS = 0;		// Select internal instruction cycle clock 
	T1CONbits.TGATE = 0;	// Disable Gated Timer mode
	T1CONbits.TCKPS = 0b00;	// Select 1:1 Prescaler
	TMR1 = 0x00; 			// Clear timer register
	PR1 = Period_Value; 	// Load the period value, 
	IPC0bits.T1IP = 0x01;	// Set Timer 1 Interrupt Priority Level
	IFS0bits.T1IF = 0;		// Clear Timer 1 Interrupt Flag
	IEC0bits.T1IE = 1;		// Enable Timer1 interrupt
	T1CONbits.TON = 1;		// Start Timer
}
Không hiểu tại sao mà mình không tạo được interrupt 1ms, mà lâu hơn 1ms
Mức độ lâu hơn ra sao: lâu hơn một chút, hay gấp đôi, gấp ba, hay nhiều hơn nữa? Bạn dựa vào đâu để cho rằng dsPIC chạy ở 16 MIPS?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2008, 07:11 PM   #12
ajack
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 6
:
mình đã config cho dsPIC chạy ở chế độ 16 MPIs như sau:
Code:
_FOSCSEL(FNOSC_FRC);   // Select Internal FRC at POR
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);   // Enable Clock Switching and Configure POSC in XT mode
_FWDT(FWDTEN_OFF);   // Disable Watchdog Timer

int main (void)
{
             // Configure PLL prescaler, PLL postscaler, PLL divisor
	PLLFBD = 62;			// M = 64
	CLKDIVbits.PLLPOST = 1;	// N2 = 4	N2 = 2 x (PLLPOST+1)
	CLKDIVbits.PLLPRE = 2;	// N1 = 4	N1 = PLLPRE + 2

	// Fosc calculation equation:
	// Fosc = Fin x M/(N1+N2) = 8x64/(4x4) = 32MHz
	// Fcy = 0.5Fosc = 16MIPs

/******* Clock Switching *******/
	// Set New Oscillator Selection
	__builtin_write_OSCCONH(3);

	// Request Clock Switching by Setting OSWEN bit
	__builtin_write_OSCCONL(1);

	// Wait for Clock switch to occur
	while(OSCCONbits.LOCK != 1);
...
}
tại vì trong datasheet của dsPIC33F, mình thấy nó ghi là không nên thay đổi những thông số của PLL, nên để lúc đầu là internal FRC rồi chỉnh thông số, rồi sau đó hãy chuyển sang PriO w/ PLL
Nhưng bạn thấy trên phần init_Timer1 của mình intialize như vậy thì đúng là nếu như dsPIC chạy ở 16 MIPs thì timer sẽ interrupt ở 1ms chứ?
Hơn nữa, đây là intterupt trong timer1 để mình kiểm tra:
Code:
// Timer 1 Interrupt Routine
void __attribute__((__interrupt__)) _T1Interrupt( void )
{
	_count++;
	home_it();
	line_2();
	LATAbits.LATA4 = ~LATAbits.LATA4;
	if ( _count==1000 ) 
	{
		_count = 0;
		LATAbits.LATA5 = ~LATAbits.LATA5;   // PORTA.5 nối với đèn LED
	}

	IFS0bits.T1IF = 0;			// Clear Timer 1 flag
}
đáng lý ra thì cứ phải 1s là đèn LED sẽ nhấp nháy, vậy mà chắc cũng 10s...
ajack vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2008, 08:25 PM   #13
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Bạn thử comment các hàm home_it() và line2() xem. Ngắt của bạn xảy ra mỗi ms, không nên để các hàm xuất tín hiệu ra LCD (tôi đoán vậy) vào trình xử lý ngắt.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2007, 11:17 AM   #14
hoanf
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 51
:
Chào anh namqn!

Trong tài liệu của anh đưa, em có thấy sử dụng chương trình mô phỏng dsPIC30F4012. Anh có thể cho biết đó là chương trình mô phỏng gì và share chương trình đó được kô.

Thanks
hoanf
hoanf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2007, 06:06 PM   #15
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi hoanf View Post
Chào anh namqn!

Trong tài liệu của anh đưa, em có thấy sử dụng chương trình mô phỏng dsPIC30F4012. Anh có thể cho biết đó là chương trình mô phỏng gì và share chương trình đó được kô.

Thanks
hoanf
Có lẽ bạn nhìn vào sơ đồ nguyên lý của mạch nên nhận xét như vậy. Tôi chỉ tạo ra ký hiệu cho dsPIC4012 trong Proteus thôi, chứ ngoài MPLAB SIM ra thì tôi chưa biết có phần mềm nào có thể mô phỏng dsPIC.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
assembly language, led, stack

Ð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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Học CCS thông qua Tutorial PICVIETNAM FFGmember Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 105 08-09-2017 04:12 PM
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 92 19-02-2017 11:15 PM
dsPIC Tutorial 5-Module ADC và MCPWM namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 83 12-09-2013 10:33 PM
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 16 22-08-2012 12:35 AM
dsPIC Tutorial 4-Module UART và I2C namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 76 09-05-2012 10:55 AM


Múi giờ GMT. Hiện tại là 10:00 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