PDA

View Full Version : dsPIC30F4013 không chạy


gunnroses
21-10-2008, 02:12 AM
em đã làm 1 mạch test đơn giản.
và em dùng đoạn code này


#include "p30f4013.h"

_FOSC(CSW_FSCM_OFF & FRC & HS);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN);
_FGS(CODE_PROT_OFF);

void main ()
{

TRISB = 0;
while(1)
{
LATB = 0xFFFF;

}
}



nạp vào rồi nhưng mà mạch chỉ chạy khi sờ tay vào chân reset thôi. Nếu bỏ tay ra thì k có biểu hiện gì nữa
Em không hiểu tại sai nữa. Giúp e nhé các bác

namqn
21-10-2008, 02:36 AM
Bạn muốn dùng FRC hay HS? Bạn đã tắt clock switching trong code.

Theo mạch phần cứng của bạn, tôi cho là bạn đang muốn dùng thạch anh ngoài. Nếu đúng như vậy thì bạn không nên mô tả FRC trong _FOSC().

Kiểm tra lại xem điện trở R2 của bạn có bị hở mạch hay không.

Thân,

gunnroses
21-10-2008, 10:11 AM
Em đã sửa lại code rồi, không dùng FRC nữa. Đo lại mạch rồi, trở R2 vẫn ổn. Mạch vẫn chạy như cũ. Mà cũng lã lắm, như kiểu có cảm ứng, đưa tay lại gần chân reset (chưa chạm vào) đèn đã sáng rồi. Đưa tay ra xa là tắt. Không hiểu như thế nào nữa

namqn
21-10-2008, 05:30 PM
Bạn kiểm tra lại tất cả các chân VSS/AVSS phải nối với nhau thật tốt, điện áp trên các chân VDD phải được đảm bảo. Thêm các tụ 100 nF (ceramic) giữa các cặp chân nguồn, đặt càng gần chip càng tốt.

Nếu bạn dùng bread board thì kiểm tra lại bread board (bread board sẽ nhanh chóng xuống cấp ở điều kiện khí hậu của VN).

Thân,

gunnroses
21-10-2008, 09:50 PM
Cám ơn anh. Em sửa đươc rồi. Do mạch reset. Cho thêm tụ 10uF song song với nút reset. Đơn giản quá mà k nghĩ ra

namqn
21-10-2008, 10:53 PM
Cám ơn anh. Em sửa đươc rồi. Do mạch reset. Cho thêm tụ 10uF song song với nút reset. Đơn giản quá mà k nghĩ ra
Mắc tụ lớn (cỡ uF) vào giữa chân MCLR và GND là không nên đối với mạch thử nghiệm có đầu nối ICSP (là trường hợp mạch của bạn). Vì tụ điện này sẽ làm giảm tốc độ tăng Vpp khi PIC được chuyển sang chế độ nạp chương trình, và có thể dẫn đến trường hợp không kích hoạt được chế độ nạp chương trình.

Thân,

gunnroses
21-10-2008, 11:11 PM
hic. Đúng rồi. Khi cho tụ vào thì không reset được, không detect được dspic luôn. Thế như trường hợp ở trên thì làm cách nào ạ

gunnroses
21-10-2008, 11:17 PM
Cho e hỏi luôn.
Khi đưa mức cao ra chân RB1 thì dùng: _LATB1=1 --> chạy chính xác
Nhưng khi sang chân RB2: _LATB2=1 --> không thấy chạy j cả
Tại sao vậy ạ?

namqn
21-10-2008, 11:17 PM
Bạn thử loại bỏ cả tụ và nút nhấn reset trong mạch xem sao (chỉ để điện trở giữa chân MCLR và VDD). Nếu mạch chạy ổn thì có lẽ nút nhấn reset của bạn có vấn đề (đã có người gặp trường hợp này rồi).

Thân,

namqn
21-10-2008, 11:28 PM
Cho e hỏi luôn.
Khi đưa mức cao ra chân RB1 thì dùng: _LATB1=1 --> chạy chính xác
Nhưng khi sang chân RB2: _LATB2=1 --> không thấy chạy j cả
Tại sao vậy ạ?
Sơ đồ nguyên lý của bạn thể hiện diode của RB2 không nối vào các diode kia. Code của bạn chưa thiết lập giá trị cho thanh ghi ADPCFG, như vậy toàn bộ các chân RB0 .. RB12 (tương ứng AN0 ... AN12) sẽ là các chân analog (sau khi reset). Cần đặt thêm ADPCFG = 0xFFFF; vào code của bạn để có thể dùng các chân RBx như chân digital.

Thân,

gunnroses
22-10-2008, 10:07 PM
Em đã tìm được nguyên nhân rồi. Đó là do để trở R2 lớn quá. Em đã để 10k. Xem lại trong datasheet thì chỉ có 5k thôi. Thay trở 5k vào chạy ngon lành. Cám ơn anh nhé

namqn
22-10-2008, 11:06 PM
Em đã tìm được nguyên nhân rồi. Đó là do để trở R2 lớn quá. Em đã để 10k. Xem lại trong datasheet thì chỉ có 5k thôi. Thay trở 5k vào chạy ngon lành. Cám ơn anh nhé
Lạ nhỉ. Mạch thử nghiệm dsPIC của tôi toàn dùng 27k đến 33k (ví dụ, tham khảo các sơ đồ mạch trong các tutorial của tôi) mà có gặp vấn đề này bao giờ đâu.

Datasheet nào nêu giá trị 5k vậy bạn?

Thân,

gunnroses
23-10-2008, 12:05 AM
Trong tài liệu Explorer 16 Uses Guide 51589a của Microchip. Trang 42

namqn
23-10-2008, 12:48 AM
Trong tài liệu Explorer 16 Uses Guide 51589a của Microchip. Trang 42
Bạn dùng nguồn 5 V, sơ đồ của Explorer 16 dùng nguồn 3.3 V.

Bạn không dùng điện trở 1k giữa điểm nối tụ/nút nhấn và điện trở 4.7k, như sơ đồ của Explorer 16 đã dùng.

Sơ đồ của Explorer 16 dùng tụ 0.1 uF, nên điện trở mạch reset phải giảm xuống đến 4.7k nhằm có thể nâng áp MCLR lên đủ nhanh khi cấp nguồn cho board.

Do đó, tôi tin rằng chỉ đặt điện trở 10k từ VDD = 5 V đến chân MCLR là đủ cho mạch reset (mạch thử nghiệm dsPIC33F của tôi dùng 27k giữa VDD = 3.3 V và chân MCLR). Nếu có thêm tụ điện hay nút nhấn, theo khuyến cáo của Microchip là có thêm một điện trở từ điểm nối giữa tụ điện/nút nhấn reset và điện trở treo, đến chân MCLR, nhằm tránh hiện tượng latchup khi có xung áp âm xuất hiện ở chân MCLR (xảy ra do nút nhấn bị dội, áp trên tụ dao động trong quá trình quá độ).

Thân,