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 Bài Trong Ngày 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 02-04-2008, 08:18 PM   #1
nghean
Nhập môn đệ tử
 
Tham gia ngày: Feb 2008
Bài gửi: 3
:
Trong ví dụ 2-4.c - Tutorial 2 của anh Nam đó có dòng khai báo bảng hằng số trong ROM là
const unsigned __attribute__ ((space(psv), address (0x0200)))
LED_PAT[10] = {0xFFFE, 0xFFFD, 0xFFFB, 0xFFF7, 0xFFEF, 0xFFDF, 0xFFEF, 0xFFF7, 0xFFFB, 0xFFFD};
anh cho em hỏi là mình muốn khai báo bảng sin gồm 2000 phần tử float (tức cần khoảng 8Kbyte) thì có được không? cách truy cập nó như thế nào?
nghean vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-04-2008, 09:07 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
Trích:
Nguyên văn bởi nghean View Post
Trong ví dụ 2-4.c - Tutorial 2 của anh Nam đó có dòng khai báo bảng hằng số trong ROM là
const unsigned __attribute__ ((space(psv), address (0x0200)))
LED_PAT[10] = {0xFFFE, 0xFFFD, 0xFFFB, 0xFFF7, 0xFFEF, 0xFFDF, 0xFFEF, 0xFFF7, 0xFFFB, 0xFFFD};
anh cho em hỏi là mình muốn khai báo bảng sin gồm 2000 phần tử float (tức cần khoảng 8Kbyte) thì có được không? cách truy cập nó như thế nào?
Tất nhiên là được, miễn là dsPIC của bạn có đủ chỗ trống trong bộ nhớ chương trình cho bảng hằng số đó. Bạn chỉ cần khai báo tương tự như trên, thay từ khóa unsigned bằng từ khóa float, và dùng một biến float để truy cập các phần tử của bảng, theo cách mà tôi đã minh họa trong tutorial.

PSV là một cửa sổ 32 kB, về nguyên tắc là bạn có thể thực hiện yêu cầu trê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 02-04-2008, 09:54 PM   #3
nghean
Nhập môn đệ tử
 
Tham gia ngày: Feb 2008
Bài gửi: 3
:
Em đã thử khai báo
float __attribute__ ((space(psv), address (0x0200)))
Sin[2001];
bởi vì đang cần tính các giá trị sin sau mới đưa vào bảng
nhưng khi biên dịch báo lỗi
Link Error: Could not allocate section .data_0x200 at 0x200
Link Error: Could not allocate program memory
vậy có cách nào khai báo môt mảng như trên tính các giá trị rồi lưu vào ROM k anh?
cảm ơn anh

thay đổi nội dung bởi: nghean, 03-04-2008 lúc 12:08 AM.
nghean vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2008, 06:18 PM   #4
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 nghean View Post
Em đã thử khai báo
float __attribute__ ((space(psv), address (0x0200)))
Sin[2001];
bởi vì đang cần tính các giá trị sin sau mới đưa vào bảng
nhưng khi biên dịch báo lỗi
Link Error: Could not allocate section .data_0x200 at 0x200
Link Error: Could not allocate program memory
vậy có cách nào khai báo môt mảng như trên tính các giá trị rồi lưu vào ROM k anh?
cảm ơn anh
Để lưu bảng vào flash, các phần tử của bảng phải là hằng số vào thời điểm biên dịch mã nguồn. Do đó, bạn nên dùng một công cụ khác để tạo ra bảng giá trị trước (Excel chẳng hạn), rồi copy các giá trị đó vào khai báo bảng hằng số của bạn.

Trong khai báo trên, bạn đã bỏ mất từ khóa const, do đó thông báo lỗi đầu tiên cho thấy trình biên dịch thông báo không thể cấp phát bộ nhớ dữ liệu cho bạn ở địa chỉ 0x200 (vì trình biên dịch hiểu là bạn cần RAM cho 2001 ô nhớ kiểu float, bắt đầu ở địa chỉ 0x200).

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-04-2008, 05:52 PM   #5
chukhivuitinh
Đệ tử 2 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 27
:
bác nam cho em hỏi ,làm sao để set mức xung là 5Mips or 8Mips khi sử dụng dao động nội ??? em chỉ thấy set mỗi cái FRC_PLL4
chukhivuitinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2008, 06:28 PM   #6
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 chukhivuitinh View Post
bác nam cho em hỏi ,làm sao để set mức xung là 5Mips or 8Mips khi sử dụng dao động nội ??? em chỉ thấy set mỗi cái FRC_PLL4
Tôi cho là không thể thiết lập 5 MIPS khi dùng bộ dao động nội của dsPIC, vì các FRC của dsPIC30F có tần số 7.37 hoặc 8 MHz, và để dùng tần số thực thi lệnh từ 2 MIPS trở lên với bộ dao động nội, chúng ta sẽ cần dùng bộ PLL. Lấy ví dụ dsPIC30F4012, chúng ta chỉ có thể dùng PLL x4, x8 hoặc x16.

Nếu tần số của FRC là 8 MHz, để có tần số thực thi lệnh là 8 MIPS thì chỉ cần dùng FRC với PLL x4 (chính là cấu hình FRC_PLL4).

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 28-04-2008, 01:22 AM   #7
chukhivuitinh
Đệ tử 2 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 27
:
Em thắc mắc bởi vì trong vd 2_1 có dòng :
"Hai dòng lệnh 26 và 27 đặt ngưỡng tràn tương ứng với 0,5
giây ở tần số thực thi lệnh là 5 MHz (tức là chip có clock bằng 20 MHz)."
rồi xuống cuối ví dụ a có dòng :
"điều chỉnh ngưỡng tràn để LED sẽ nhấp nháy
đúng 1 Hz (với mã hiện tại thì LED sẽ nhấp nháy ở 1,6 Hz, vì tần số thực thi lệnh
của chip sẽ là 8 MHz với bộ dao động nội 8 MHz và PLLx4 được kích hoạt) "

Sau khi đọc câu trả lời của a thì em đã hiểu ý nghĩa của dòng cuối này ,chứ trước đó em ko hiểu tại sao cùng set PLL4 mà sao trên thì 5MHz ,dưới thì 8 Mhz .Nhưng em đọc trong cái dsPIC Manual thì thấy FRC là 7,37 Mhz ,vậy PLLx4 = 29.48Mhz ,PLLx8 = 58.96 Mhz ,PLLx16 = 117.92 Mhz ,vậy đâu dùng 8Mhz được ,và giá trị nhỏ nhất của bộ dao động nội là 29.48Mhz ??? mà sao người ta để lẻ thế nhỉ ???

Ah ,anh giải thích thêm dùm em về cách khai báo biến :
ở vd 2-3 :
_ .bss cho đoạn chứa các dữ liệu không khởi tạo giá trị
(.data cho đoạn chứa các dữ liệu khởi tạo giá trị <<< là hằng số ??? )
_ .align 2 << ???
_ count: .space 2 << khai bao biến count 16bit
ở vd 2-4 :
_ .section Table,psv, address(0x0200) <<< khai báo bảng Table có địa chỉ 0x0200 ,vậy psv ở đây nghĩa là jì ???Trong cái tag Output em chẳng thấy cái psv này đâu cả :
Trích:
section address length (PC units) length (bytes) (dec)
------- ------- ----------------- --------------------
.reset 0 0x4 0x6 (6)
.ivt 0x4 0x7c 0xba (186)
.aivt 0x84 0x7c 0xba (186)
.text 0x100 0x4c 0x72 (114)
.dinit 0x14c 0x2 0x3 (3)
.isr 0x14e 0x2 0x3 (3)
Table 0x200 0x14 0x1e (30)
__FOSC 0xf80000 0x2 0x3 (3)
__FWDT 0xf80002 0x2 0x3 (3)
__FBORPOR 0xf80004 0x2 0x3 (3)
__FGS 0xf8000a 0x2 0x3 (3)

Total program memory used (bytes): 0x21c (540) 1%
Tiếp tục ^_^ ,trong vd 2-4 PSV là bit 2 trong thanh ghi Core Control Register CORCON
vậy dòng :
_ mov #psvpage(Table),W0 <<< xác định địa chỉ trang chứa Table vào W0 ???
_ mov W0, PSVPAG <<< ghi cái địa chỉ này vào thanh ghi PSVPAG
_ mov #psvoffset(Table),W1 <<< ghi vị trí các số hạng vào W1 ???
_ mov W1, W2 <<< lấy vị trí đầu bảng ,em coi watch thì thấy vị trí này là 0x8200 ???
_ add W1,#(1082), W3 <<< lấy vị trí cuối bảng ,10*2 = 10 giá trị 2byte ??? em koi watch thì vị trí này là 0x8214 ???? 10 giá trị mà sao lại 0x8214 ??
_ #psvpage với #psvoffset em kiếm trong datasheet với cái 70157C mà ko thấy nói .Cái này do định nghĩa sẵn trong chip ah ???

Típ nữa ^_^ :
dòng:
_ mov [W1++], W0 <<< [] là lấy giá trị thứ W1 ,ghi vào W0 sau đó tăng giá trị W1 ??? ,em koi watch thì sau dòng lệnh này W1 từ 0x8200 -> 0x8202 (tăng 2 giá trị) ,W0 thì gán giá trị đầu tiên của Table .Sau đó W1 từ 0x8202 ->0x8204 (tăng 2 giá trị) ,W0 thì đc gán giá trị thứ 2 ,vậy ++ ở đây là tăng 2 giá trị àh ???

em mới học nên hem bit nhìu @_@ ,a giúp em hen ^_^ ,thanks a

thay đổi nội dung bởi: chukhivuitinh, 28-04-2008 lúc 01:59 AM.
chukhivuitinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2008, 02:43 AM   #8
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
Về việc tại sao tần số là 8 MHz mà không phải là 7.37 MHz như trong tài liệu, bạn đọc post #15 ở luồng sau:
http://www.picvietnam.com/forum//showthread.php?t=553

Về .bss, .align, .space, và .section, đề nghị bạn đọc tài liệu hướng dẫn của ASM30, link download dưới đây, nếu bạn chưa biết (tôi không muốn và cũng không thể giải thích tất cả những gì đã có trong tài liệu hướng dẫn):
http://ww1.microchip.com/downloads/e...Doc/51317G.pdf

Về các lệnh hợp ngữ của dsPIC, bạn đọc tài liệu tham khảo của dsPIC30F, link download dưới đây, nếu bạn chưa biết:
http://ww1.microchip.com/downloads/e...Doc/70046E.pdf

Bạn xem hình 4-7 của tài liệu trên để thấy được không gian PSV được ánh xạ vào vùng địa chỉ bắt đầu từ 0x8000, do đó bảng được khai báo ở 0x0200 sẽ có địa chỉ 0x8200 khi thực thi code.

Các toán tử psvpage() và psvoffset() do ASM30 cung cấp, đã được đề cập đến trong tutorial.

0x14 = 20

W1++ để chỉ đến ô dữ liệu kế tiếp, toán hạng đang dùng là word, địa chỉ được sử dụng là địa chỉ byte, do đó sẽ tăng 2 để chỉ đến word kế tiếp.

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 11-06-2008, 04:30 PM   #9
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Smile giả lập dsPIC

em mới có mấy con dsPIC nhưng chân bé quá, hàn ko nổi
cũng muốn học dùng MPLab và dsPIC nhưng ko có mạch
có chương trình nào có giả lập mấy con dsPIC ko anh Nam nhỉ?
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-06-2008, 07:05 PM   #10
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 hopeman View Post
em mới có mấy con dsPIC nhưng chân bé quá, hàn ko nổi
cũng muốn học dùng MPLab và dsPIC nhưng ko có mạch
có chương trình nào có giả lập mấy con dsPIC ko anh Nam nhỉ?
MPLAB IDE hỗ trợ mô phỏng các dsPIC, nhưng không mô phỏng tốt ngoại vi. Proteus có thể mô phỏng tốt ngoại vi cùng với vi điều khiển, nhưng chỉ hỗ trợ PIC24 vào thời điểm hiện tại. Tôi cũng tin rằng CCS PCD, HI-TECH PICC, và IAR Embedded Workbench có thể mô phỏng dsPIC, nhưng tôi không dùng các sản phẩm nà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 04-03-2009, 05:21 PM   #11
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Thầy Nam cho em hỏi: em lấy code (vidu2_1) và thay bởi 30F2010 (vì em đang dung con này) ở hàng :
" .equ __30F2010, 1 "
Thì khi biên dịch mplap báo lối là:
" Error: undefined symbol `FRC_PLL4' in operation "
Còn khi em thay hàng:
" config __FOSC, CSW_FSCM_OFF & FRC_PLL4 "
bởi hàng :
" config __FOSC, CSW_FSCM_OFF & XT_PLL16 "
thì lại biên dịch được.
Nên em nghĩ con 2010 nó không có chế độ dao đông nội !!! phải không thầy ?
Nếu nối vào 2 chân OSC1 với OSC2 bởi thạch anh 10 Mhz thì mình có được thiết lập chế độ dao động nội không hả thầy ? ý em là đối với dsPIC thì phần cứng phụ thuộc vào phần mềm hay ngược lại ?
cảm ơn thầy !
chúc vui !
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-10-2013, 10:49 PM   #12
truongbkauto
Nhập môn đệ tử
 
Tham gia ngày: Oct 2013
Bài gửi: 1
:
em muốn mô phỏng dòng dspic30f nhưng trên protus mà không có.em có biết đến MPLAB Sim nhưng nó không có các thành phần như điện trở hay là tụ điện...ý em là muốn mô phỏng 1 mạch hoàn chỉnh...bác có cách nào giúp em được không?
truongbkauto vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2013, 10:55 PM   #13
trinh819
Nhập môn đệ tử
 
Tham gia ngày: Oct 2013
Bài gửi: 4
:
Init_PORTS:
clr LATB
clr LATD ;Xoa thanh ghi chot cho cong D
mov #0xFFFD, W0 ;LED noi vao cong D, chan RD0
mov W0, TRISD
return
anh nam oi . tai sao trong vi du 2.1 em thay doi ngo ra la RD1 mà khi em thuc hien lai không nhấp nháy được như ngõ ra RD0 và em hay port xuat cung ko duoc . vd em thay la rb0 chi sang chu ko nhap nhay . CODE EM THAY DOI GIONG O TREN . CAM ON ANH
trinh819 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2013, 11:09 PM   #14
trinh819
Nhập môn đệ tử
 
Tham gia ngày: Oct 2013
Bài gửi: 4
:
E thay đổi ngõ ra la RD1 nhưng ko nhấp nhdduwwocwj. khi chuyển sang portb cung được. anh nam co thể em giup em dk ko. code em thay đổi .
Init_PORTS:

clr LATD ;Xoa thanh ghi chot cho cong D
mov #0xFFFD, W0 ;LED noi vao cong D, chan RD1
mov W0, TRISD
return
Cảm ơn anh.
trinh819 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


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à 01:59 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