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 16-03-2009, 05:15 PM   #31
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
Như thế nào là không chạy? Hoàn toàn không chạy hay chạy sai ở chỗ nào đó?

Tốc độ gửi dữ liệu của bạn ra sao? Mỗi giây một giá trị từ PC hay thế nào?

Hàm lcd_putstr() của bạn nhận đối số là một chuỗi ký tự, nhưng bạn lại gọi hàm với đối số là temp (có kiểu unsigned short). Lần trước tôi đã hướng dẫn bạn dùng hàm sprintf() để chuyển giá trị số thành một chuỗi ký tự trước khi xuất ra LCD rồi mà.

Thân,
em có sửa lại định nghĩa của biến temp là

char temp[1];

mà nó vẫn không chạy ; Không chạy ở đây là : Hyper terminal không detect được tốc độ truyền và định dạng truyền, em truyền 1 kí tự từ bàn phím , sau 2s hoặc lâu hơn em nhấn bàn phím 1 lần mà không thấy kết quả.
em cảm ơn thấy !
Trân trọng !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2009, 05:21 PM   #32
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
Bạn có thể kết hợp nhiều tập tin mã nguồn vào một project, những hàm nào nằm ở module biên dịch (tập tin mã nguồn) khác thì cần được khai báo trước khi sử dụng (thường dùng tập tin header để gộp các khai báo biến, prototype của hàm, ...).

Nếu bạn dùng "#include LCD.c" thì trình biên dịch chỉ đơn giản bê nguyên nội dung của "LCD.c" đặt vào tập tin mã nguồn hiện tại của bạn thôi. Tôi không cho đây là cách làm hay. Không rõ bạn có được học về lập trình C trong chương trình đại học hay không?

Thân,
ý của thầy là :
tạo một tập tin header nữa (ex: UartHeader.h), trong tập tin này có
#Include LCD.c;
Và trong file mã nguồn (UART.c) em dung lệnh
#include UartHeader.h
???
Em mới học VB còn C thì em đang học thầy ạ, nên có nhiều câu hỏi hơi "NGỖ" mong thầy thông cảm.
Em cảm ơn!
Trân trọng !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2009, 06:43 PM   #33
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 conglong View Post
em có sửa lại định nghĩa của biến temp là

char temp[1];

mà nó vẫn không chạy ; Không chạy ở đây là : Hyper terminal không detect được tốc độ truyền và định dạng truyền, em truyền 1 kí tự từ bàn phím , sau 2s hoặc lâu hơn em nhấn bàn phím 1 lần mà không thấy kết quả.
em cảm ơn thấy !
Trân trọng !.
PIC không phát dữ liệu gì cả thì làm sao HyperTerminal detect được tốc độ truyền. Bạn phải tự thiết lập tốc độ truyền của HyperTerminal cho phù hợp với tốc độ đã thiết lập của PIC.

Nếu bạn định nghĩa biến temp như trên thì temp tương thích với hàm lcd_putstr(), nhưng khi bạn dùng lệnh gán giá trị của U1RXREG vào temp thì kết quả sẽ khác với sự mong đợi của bạn (vì temp sẽ giống như một con trỏ, và giá trị của nó sẽ bị thay đổi, chứ không phải là nội dung của ô nhớ mà nó trỏ tới sẽ bị thay đổi).

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 16-03-2009, 06:47 PM   #34
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 conglong View Post
ý của thầy là :
tạo một tập tin header nữa (ex: UartHeader.h), trong tập tin này có
#Include LCD.c;
Và trong file mã nguồn (UART.c) em dung lệnh
#include UartHeader.h
???
Em mới học VB còn C thì em đang học thầy ạ, nên có nhiều câu hỏi hơi "NGỖ" mong thầy thông cảm.
Em cảm ơn!
Trân trọng !.
Ý của tôi là trong tập tin .h, bạn sẽ khai báo các hàm của module mã nguồn khác theo cú pháp của C30, và include tập tin đó vào module hiện thời của bạn. Ý của tôi không phải như trên.

Nếu bạn đang học C, bạn có thể đem những vấn đề này ra hỏi thầy dạy của bạn. Nếu bạn vẫn không nắm được vấn đề, đề nghị bạn tìm đọc một tài liệu hướng dẫn lập trình căn bản cho C.

Vì đây là diễn đàn về PIC/dsPIC, tôi chỉ hướng dẫn những vấn đề liên quan đến PIC/dsPIC (trong tầm hiểu biết của tôi), và tôi không có ý định hướng dẫn sử dụng các ngôn ngữ lập trình cấp cao.

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 16-03-2009, 09:36 PM   #35
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
PIC không phát dữ liệu gì cả thì làm sao HyperTerminal detect được tốc độ truyền. Bạn phải tự thiết lập tốc độ truyền của HyperTerminal cho phù hợp với tốc độ đã thiết lập của PIC.

Thân,
dạ vâng, nó chạy rồi thầy ạ tại con RS 232 bị lỏng chân cắm , nhưng vẫn chưa như ý muốn , chắc là tại ở biến :temp; cái nầy em giải quyết được với hàm Sprintf() như thầy chỉ hôm trước.Trong sơ đồ kết nối thầy dùng U1ATX và U1ARX pin mà tại sao trong hàm
void Init_UART1_Module(void)
Thầy lại config thanh ghi U1MODE là
U1MODE = 0x8000;
Em nghĩ phải là
U1MODE = 0x8400; chứ thầy?
Em cảm ơn!
Trân trọng!.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2009, 09:59 PM   #36
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trong TUTO về I2C (vidu4.3) thầy có dùng các lệnh sau em không hiểu lắm: (chố em không hiểu em có comment ở ngay sau lệnh) mong thầy nói rõ cho em với :


Wait_I2C(); //trong hàm này thầy dùng cờ ngắt là _MI2CIF vậy sao thầy
//không set bit enable _MI2CIE trong hàm void Init_PORTS(void)?

Send_I2C(0xD0);//tại sao đây là dịa chỉ của ds1307 số khác được khôngthầy ?



Send_I2C(0x67);
// trước khi ghi vào REG 02 của RTM thì phải gửi điạ //chỉ chứ (giống như các lệnh thao tác //trên //REG01?? con số hex 67 có nghĩa gì ?)

Send_I2C(0x01);
//Xuat số con số 01 nầy là chỉ Thứ 2 của tuần phài //không ?

Send_I2C(0x25); //Xuat noi dung cua thanh ghi 0x04 (dem ngay)
Send_I2C(0x08); //Xuat noi dung cua thanh ghi 0x05 (dem thang)
// hai số hex 25 và 08 có nghĩa gì?

em cảm ơn !
Trân trọng !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2009, 11:18 PM   #37
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 conglong View Post
dạ vâng, nó chạy rồi thầy ạ tại con RS 232 bị lỏng chân cắm , nhưng vẫn chưa như ý muốn , chắc là tại ở biến :temp; cái nầy em giải quyết được với hàm Sprintf() như thầy chỉ hôm trước.Trong sơ đồ kết nối thầy dùng U1ATX và U1ARX pin mà tại sao trong hàm
void Init_UART1_Module(void)
Thầy lại config thanh ghi U1MODE là
U1MODE = 0x8000;
Em nghĩ phải là
U1MODE = 0x8400; chứ thầy?
Em cảm ơn!
Trân trọng!.
Nếu bạn đọc trang 2 của tutorial, sẽ thấy tôi ghi là ví dụ 4-1 và 4-2 sẽ dùng main I/O của UART, và sẽ không thể hiện trong sơ đồ. Do vậy, sơ đồ mà tôi đã thể hiện trong tutorial là cho ví dụ 4-3 và 4-4 (bạn nên đọc kỹ lại), trong đó, chỉ có ví dụ 4-4 là có dùng UART, và tôi đã thiết lập U1MODE là 0x8400 trong ví dụ 4-4.

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 16-03-2009, 11:24 PM   #38
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 conglong View Post
Trong TUTO về I2C (vidu4.3) thầy có dùng các lệnh sau em không hiểu lắm: (chố em không hiểu em có comment ở ngay sau lệnh) mong thầy nói rõ cho em với :


Wait_I2C(); //trong hàm này thầy dùng cờ ngắt là _MI2CIF vậy sao thầy
//không set bit enable _MI2CIE trong hàm void Init_PORTS(void)?

Send_I2C(0xD0);//tại sao đây là dịa chỉ của ds1307 số khác được khôngthầy ?



Send_I2C(0x67);
// trước khi ghi vào REG 02 của RTM thì phải gửi điạ //chỉ chứ (giống như các lệnh thao tác //trên //REG01?? con số hex 67 có nghĩa gì ?)

Send_I2C(0x01);
//Xuat số con số 01 nầy là chỉ Thứ 2 của tuần phài //không ?

Send_I2C(0x25); //Xuat noi dung cua thanh ghi 0x04 (dem ngay)
Send_I2C(0x08); //Xuat noi dung cua thanh ghi 0x05 (dem thang)
// hai số hex 25 và 08 có nghĩa gì?

em cảm ơn !
Trân trọng !.
Việc dùng cờ ngắt _MI2CIF không liên quan đến việc ngắt MI2C có được cho phép hay không. Cờ ngắt _MI2CIF sẽ thay đổi trạng thái theo trạng thái của bộ đệm dữ liệu, chứ không phụ thuộc vào việc ngắt MI2C có được enable hay không.

Địa chỉ 0xD0 của DS1307 là do nhà sản xuất vi mạch DS1307 quy định, nếu không dùng đúng giá trị này thì DS1307 sẽ không đáp ứng với các yêu cầu đã được gửi ra bus I2C.

Những vấn đề liên quan đến các câu hỏi còn lại của bạn đều được mô tả trong datasheet của DS1307, đề nghị bạn đọc nó. Những thông tin điều khiển gửi đến một vi mạch ngoài PIC cần tuân thủ những yêu cầu đã đề ra trong datasheet của vi mạch đó.

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-04-2009, 06:52 PM   #39
KENJY
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 9
:
Thầy Nam có thể cho em sơ đồ mô phỏng trên Proteus cua tutorial này không?

Trích:
Nguyên văn bởi namqn View Post
Tutorial 4 cho dsPIC, viết bằng ASM30 lẫn C30, giới thiệu các module UART và I2C (chế độ master). Các ví dụ về module UART thực hiện giao tiếp với máy tính. Các ví dụ về module I2C thực hiện giao tiếp với vi mạch thời gian thực DS1307.

Tập tin "Vidu4.zip" gồm các tập tin nguồn hợp ngữ và .hex. Tập tin "Vidu4C30.zip" gồm các tập tin nguồn C và .hex.

Thân,
Thầy Nam có thể cho em sơ đồ mô phỏng trên Proteus cua tutorial này không?
KENJY vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-04-2009, 08:52 PM   #40
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 KENJY View Post
Thầy Nam có thể cho em sơ đồ mô phỏng trên Proteus cua tutorial này không?
Như đã trả lời bạn qua tin nhắn, tôi không mô phỏng các tutorial, do đó các sơ đồ của tôi không dùng được cho việc mô phỏ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 11-05-2009, 06:16 PM   #41
Hiepnv101
Đệ tử 1 túi
 
Hiepnv101's Avatar
 
Tham gia ngày: Apr 2009
Nơi Cư Ngụ: Viet Nam
Bài gửi: 12
:
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
_T1IE = 1; //Cho phep ngat khi Timer 1 tran
}
Theo em nghĩ là bộ đếm sẽ đếm giá trị từ PR1 đến giá trị 65535, khi vượt qua giá trị này sẽ tạo ngắt Timer1. Anh Nam đặt giá trị 7A12 vào PR1 liệu đã tạo ra ngắt đúng 1giây không ?
Hiepnv101 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2009, 07:35 PM   #42
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi Hiepnv101 View Post
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
_T1IE = 1; //Cho phep ngat khi Timer 1 tran
}
Theo em nghĩ là bộ đếm sẽ đếm giá trị từ PR1 đến giá trị 65535, khi vượt qua giá trị này sẽ tạo ngắt Timer1. Anh Nam đặt giá trị 7A12 vào PR1 liệu đã tạo ra ngắt đúng 1giây không ?
Không phải đâu ban, Timer sẽ đếm từ 0 cho tới giá trị PRx, giá tri của bộ đếm Timer sẽ lưu vào TMRx ,(x ở đây là chỉ số timer x=1 ,2..) và khi TMRx = PRx thì ngắt Timer sẽ được gọi (nếu bạn set bit _TxIE ), đồng thời reset giá trị trong thanh ghi TMRx về zero,và lặp lại công việc như trên mãi.
Trân trọng!
à mà dạo này Picvietnam thấy sa sút qua thầy Nam ơi !
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !.
Bạn có thể nếu bạn tin bạn có thể !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2009, 05:54 PM   #43
Hiepnv101
Đệ tử 1 túi
 
Hiepnv101's Avatar
 
Tham gia ngày: Apr 2009
Nơi Cư Ngụ: Viet Nam
Bài gửi: 12
:
Anh Nam cho em hỏi. Em khai báo _FBORPOR(PBOR_OFF & MCLR_EN); thì truyền lên PC rất nhiễu. Nhưng khi khai báo _FBORPOR(PBOR_OFF & MCLR_DIS); thì lại truyền rất chuẩn. Anh có thể nêu qua 2 khai báo này được không ạ?

Thanks,
Hiepnv101 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 10:10 AM   #44
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Em có 1 vấn đề về phần cứng. Em làm mạch đo nhiệt độ, hiển thị lên LCD và gửi lên máy tính. Phần đo nhiệt độ và hiển thì lên LCD thì ok, nhưng cứ khi em cắm COM vào mt thì mạch lại ko làm việc nữa, chip thì nóng lên. Em thử ktra các chân của Max232 và com thì thấy bình thường, thậm chí, cắm com nhưng ko cắm lên máy tính thì mạch cũng ko sao, vẫn bình thường. Em thử cắm sang nhiều máy tính khác thì nó cũng ko chạy, theo mọi người thì lỗi ở đâu nhỉ ?
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 12:03 PM   #45
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Trích:
Nguyên văn bởi silvadk2 View Post
Em có 1 vấn đề về phần cứng. Em làm mạch đo nhiệt độ, hiển thị lên LCD và gửi lên máy tính. Phần đo nhiệt độ và hiển thì lên LCD thì ok, nhưng cứ khi em cắm COM vào mt thì mạch lại ko làm việc nữa, chip thì nóng lên. Em thử ktra các chân của Max232 và com thì thấy bình thường, thậm chí, cắm com nhưng ko cắm lên máy tính thì mạch cũng ko sao, vẫn bình thường. Em thử cắm sang nhiều máy tính khác thì nó cũng ko chạy, theo mọi người thì lỗi ở đâu nhỉ ?
Bạn thử thay dây cổng COM khác xem thế nào
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
dspic30f i2c, dspic30f uart, i2c, rtc


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
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 2-Các kỹ thuật cơ bản namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 33 17-10-2013 11:09 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
Alternate UART pin??? alexjp dsPIC - Bộ điều khiển tín hiệu số 16-bit 1 02-05-2006 06:26 PM


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


Đượ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