PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Những câu hỏi thường gặp (http://www.picvietnam.com/forum/forumdisplay.php?f=54)
-   -   Trục trặc với 16f877a ngay từ đầu? (http://www.picvietnam.com/forum/showthread.php?t=1422)

tranducbinh 20-08-2007 07:06 PM

Trục trặc với 16f877a ngay từ đầu?
 
Chào mọi người

Minh đang thực hành 16f877a nhưng gặp một trục trặc như sau: (mong mọi người chỉ giúp)

mình thử xuất ra chân RB4 đến RB7 điện áp 5V nhưng khi dung dồng hồ đo thi không thấy lên 5V mà chỉ là ở mức 0, đôi khi là 0.02V khi để thang đo ở mức 0.1V trong khi mình mô phỏng trên proteus thì vẫn đúng. Chương trình rất đơn giản, minh nghĩ không có gì sai cả

#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=40000000)
#use fast_io(b)
#byte portb=0x06
#bit RB1=portb.1

main()
{
set_tris_b(0b00001111);

while (true)
{
portb=0b11110000;
}

}

mình dùng thach anh 4MHz và tụ cho thạch anh là 104pF.Mình cũng nghỉ tới khả năng chip bi hư nhưng chip vẫn nap được bình thường, thấy không báo lỗi gi cả.
mình không thể tìm ra dươc sai chổ nào. Mong các bạn chi giúp với.

namqn 20-08-2007 07:16 PM

Nếu tụ pi của bạn được ghi là 104 thì nó là tụ 100 nF, chứ không phải là 104 pF (tôi cho là giá trị 104 pF là không chuẩn). Bạn cần tụ khoảng 15 đến 33 pF cho thạch anh 4 MHz.

Chương trình của bạn đang xuất giá trị 1 ra các chân RB4..RB7, chứ không phải RB0.

Thân,

tranducbinh 20-08-2007 07:22 PM

Xin cảm ơn anh đã gửi câu trả lới.
Ban đầu thì em cũng dùng tụ 33p nhưng gặp trục trặc như trên thế là chuyển sang 104nF( theo như anh nói). Và em cũng nhầm lần ở chân RB0 nhưng mà em đã đo hết các chân của port b thì vẫn tình trang như vậy thôi. Không biết là em có thiếu cái gi không nữa? Em cũng đã thử nhiếu chip nhưng kết thì vẫn giống nhau.

Không biết có cần phải gắn thêm tụ vào đâu không nữa.Nếu có thì xin mọi ngưới hãy chỉ giúp.

namqn 20-08-2007 07:40 PM

Vẫn còn chân MCLR cần được xác định trạng thái. Bạn vẫn chưa post sơ đồ mạch mà bạn đang dùng để thử nghiệm. Thông thường, nếu bạn cho phép chân MCLR hoạt động như ngõ vào để reset PIC thì bạn cần phải có 1 điện trở kéo lên, nối giữa chân MCLR (chân 1 của PIC) và nguồn Vdd, giá trị điện trở khoảng 10k đến 33k. Bạn cũng cần đảm bảo tất cả các chân Vdd và Vss đều được nối vào điện thế thích hợp. Giữa các chân Vdd và Vss nằm sát nhau bạn nên có ít nhất một tụ bypass (hay decoupling) có giá trị 100 nF, loại ceramic.

Thân,

caonam 20-08-2007 10:41 PM

Trích:

Nguyên văn bởi tranducbinh (Post 10823)
Chào mọi người

Minh đang thực hành 16f877a nhưng gặp một trục trặc như sau: (mong mọi người chỉ giúp)

mình thử xuất ra chân RB0 điện áp 5V nhưng khi dung dồng hồ đo thi không thấy lên 5V mà chỉ là ở mức 0, đôi khi là 0.02V khi để thang đo ở mức 0.1V trong khi mình mô phỏng trên proteus thì vẫn đúng. Chương trình rất đơn giản, minh nghĩ không có gì sai cả

#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=40000000)
#use fast_io(b)
#byte portb=0x06
#bit RB1=portb.1

main()
{
set_tris_b(0b00001111);

while (true)
{
portb=0b11110000;
}

}

mình dùng thach anh 4MHz và tụ cho thạch anh là 104pF.Mình cũng nghỉ tới khả năng chip bi hư nhưng chip vẫn nap được bình thường, thấy không báo lỗi gi cả.
mình không thể tìm ra dươc sai chổ nào. Mong các bạn chi giúp với.

Trisb như vậy thì output RB0 không được thì phải rồi.
Phải vầy nè set_tris_b(0b11110000);

tranducbinh 21-08-2007 12:20 AM

Mach của em đơn giản chỉ là cấp nguồn cho pic và đo điện áp ở đầu ra thôi. Nhưng có một điều là em không dùng chân MCLR, không biết có ảnh hường gì tới hoạt động của pic hay không. Trong lúc viết reply này thì em chưa thử lại. Em thường nối thẳng chân MCRL xuống đất khi cần reset pic. Làm như vậy thì có vấn đề gi không nhì?
Mong mọi người chỉ giúp.

namqn 21-08-2007 12:25 AM

Trích:

Nguyên văn bởi tranducbinh (Post 10833)
Mach của em đơn giản chỉ là cấp nguồn cho pic và đo điện áp ở đầu ra thôi. Nhưng có một điều là em không dùng chân MCLR, không biết có ảnh hường gì tới hoạt động của pic hay không. Trong lúc viết reply này thì em chưa thử lại. Em thường nối thẳng chân MCRL xuống đất khi cần reset pic. Làm như vậy thì có vấn đề gi không nhì?
Mong mọi người chỉ giúp.

Không may là mạch đơn giản hóa đó sẽ không làm việc, vì chân MCLR luôn luôn được kích hoạt trong PIC16F877A, và nếu bạn thả nổi trạng thái của nó (tức là không nối vào đâu hết) thì PIC sẽ không chạy. Phải nối nó như thế nào thì tôi đã nói trên kia rồi.

Thân,

tranducbinh 21-08-2007 12:08 PM

Đúng là khi nối chân MCLR thì pic đã hoạt động nhưng có điều là khi đo thì điện áp ở cả 4 chân từ RB4 đến RB7 chỉ đạt được là 2.3V chứ không phải là 5V, trong khi nguồn cấp cho pic vẫn ổn định ở 5V và mô phỏng trên proteus thì cũng là 5V

Mong mọi người chỉ giúp.

batbatdieu 21-08-2007 03:13 PM

Bạn xem lại TA bạn dùng là gì , theo như khai báo của bạn là 40MHz , trong khi 877A max chỉ 20MHz thôi.

tranducbinh 21-08-2007 05:35 PM

Mình đã nhầm khi đặt 40MHz và đã sửa lại là 4MHz trong chuong trình. Còn mạch thật thì dùng thach anh N4.000J. Nhưng sau khi sửa xong và nạp lại thì vẫn là 2.3 V. Không biết tại sao nữa.

Mong mọi người chỉ giúp.

anh_gioi 21-08-2007 08:11 PM

pic 16F877A co chít ko?
 
cho em hỏi Pic của em ạ: em dùng con pic 16F877A ,phần mềm nạp wi800.ban đầu nó nhận pic,xóa đc cả pic.nhưng khi em nạp dữ liệu vào thì nó báo lỗi(em quên ko chụp lỗi rùi).
con pic khac em nạp ngon ơ(như vậy là pic chít ạ)

namqn 21-08-2007 08:28 PM

Trích:

Nguyên văn bởi tranducbinh (Post 10844)
Đúng là khi nối chân MCLR thì pic đã hoạt động nhưng có điều là khi đo thì điện áp ở cả 4 chân từ RB4 đến RB7 chỉ đạt được là 2.3V chứ không phải là 5V, trong khi nguồn cấp cho pic vẫn ổn định ở 5V và mô phỏng trên proteus thì cũng là 5V

Mong mọi người chỉ giúp.

Bạn thay lệnh portb = 0b11110000 thành OUTPUT_B(0b11110000) và thử lại xem.

Thân,

namqn 21-08-2007 08:30 PM

Trích:

Nguyên văn bởi anh_gioi (Post 10848)
cho em hỏi Pic của em ạ: em dùng con pic 16F877A ,phần mềm nạp wi800.ban đầu nó nhận pic,xóa đc cả pic.nhưng khi em nạp dữ liệu vào thì nó báo lỗi(em quên ko chụp lỗi rùi).
con pic khac em nạp ngon ơ(như vậy là pic chít ạ)

Chưa thể kết luận là PIC chết được. Nếu có thể thì bạn nhờ người khác nạp thử con PIC của bạn bằng một mạch nạp khác xem thế nào. Thông tin của bạn đưa ra còn thiếu, đó là mạch nạp loại nào, khi nạp thì bạn dùng socket của mạch nạp, hay nạp kiểu ICSP?

Bạn thử lại như sau: ra lệnh xóa chip, sau đó cho đọc lại ngay sau khi xóa chip, để xem chip có thực sự bị xóa hay không. Nếu chip không thể bị xóa thì bạn sẽ gặp lỗi như trên.

Thân,

batbatdieu 22-08-2007 12:30 AM

Trích:

Nguyên văn bởi tranducbinh (Post 10846)
Mình đã nhầm khi đặt 40MHz và đã sửa lại là 4MHz trong chuong trình. Còn mạch thật thì dùng thach anh N4.000J. Nhưng sau khi sửa xong và nạp lại thì vẫn là 2.3 V. Không biết tại sao nữa.

Mong mọi người chỉ giúp.

Nếu bạn sửa lại thành 4MHz rồi thì dòng này
#fuses NOWDT,PUT,HS,NOPROTECT
HS bạn cũng phải đổi thành XT ,ví dụ như :
#fuses XT,NOWDT,NOPROTECT,NOLVP

namqn: HS chấp nhận dải tần số thạch anh 4 - 20 MHz, do đó không nhất thiết phải đổi lại.

tranducbinh 22-08-2007 11:33 AM

Mình đã sửa lại dòng #FUSES như bạn chỉ và chân RB4..7 đã lên đúng 5V! Xin cảm ơn đã chỉ giúp mình. Sau một hồi mày mò thì mình nhận ra lỗi là do từ khóa PUT trong dòng #FUSES. Tại sao lại như vậy??? Có ai giải thích giùm mình với. Xin cảm ơn.


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam