PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 19-08-2006, 07:49 PM   #1
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
Unhappy Khám bệnh cho PIC16F876A !

Chào các bác,

Em cũng mới nghiên cứu về PIC, đang thử làm một mạch test quét LED 7:
+ dùng cổng B, C.
+ Thạch anh 4M kèm tụ 33p
+ nguồn nối đủ cả : 1VDD + 2VSS
+ chân MCLR nối lên +5V qua trở 10K,nối với đất qua tụ 100nF

- Em test hiển thị các số 0 - 9 liên lục, mỗi LED dừng 200ms
- Dùng CCS để viết và mô phỏng trên Proteus thì hien thi được , nhưng chạy mạch test thì không được là sao vậy nhỉ???? HIC!

- em kiểm tra chân OSC1 & OSC2 bằng Oscillo thì không thấy có dao động,
- thử thay thạch anh khác vào ( 8M, 3.5M) mà vẫn không được
- bỏ tụ 33p nối với thạch anh ra cũng không được
Tuy nhiên, khi bỏ tụ 33p ra khỏi mạch, và sờ tay vào chân OSC1 & OSC2 thì xuất hiện xung một tẹo một mất, rồi xuất hiện rồi lại mất( kiểm tra bằng oscillo) , hiện tượng giống như bị reset liên tục vậy hoặc là dao động bị khởi động lại liên tục , LED nháy liên tục số 0, có lẽ chương trình chạy đến doạn đó rồi lại bị reset lại !

Các bác làm ơn khám bệnh cho nó giúp em với ! hic

Đây là chương trình :

#include <16F876A.h>
#fuses XT, NOWDT, NOPROTECT, NOLVP
#use delay(clock = 4000000)
#byte portb = 0x06
#byte portc = 0x07

void main()
{
int const table[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };

set_tris_b(0x00); // cong B la dau ra
set_tris_c(0x00); // cong C la dau ra
portb = 0x00;
portc = 0x00;
portb= 0Xff;

while (1)
{
portc =0x3F; //0
delay_ms(200);
portc =0x06; //1
delay_ms(200);
portc =0x5B; //2
delay_ms(200);
portc =0x4F; //3
delay_ms(200);
portc =0x66; //4
delay_ms(200);
portc =0x6D; //5
delay_ms(200);
portc =0x7D; //6
delay_ms(200);
portc =0x07; //7
delay_ms(200);
portc =0x7F; //8
delay_ms(200);
portc =0x6F; //9
delay_ms(200);
}
}
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-08-2006, 11:13 PM   #2
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
Bổ sung thêm thông tin :
Em dùng mạch nạp cổng LPT (không rõ của hãng nào, hộp màu đen, xuất sứ từ USA, nhưng made in china ).
Nhưng có một vấn đề là : mạch nạp báo địa chỉ của con 16F876A từ 0 - 41FF ???? mặc dù con này chỉ có 8k bộ nhớ Flash, và datasheet ghỉ địa chỉ của nó từ 0 - 1FFF

Khi nạp xong, bộ nạp báo lỗi tại địa chỉ 4001 ??
Theo em, địa chỉ này không có trong bộ nhớ của 16F876A . Em đã đọc Flash của nó và so sánh code của nó vói file nguồn, thấy giống , tất nhiên không thể test hết đc. Nhưng có lẽ ít nhất là không có lỗi từ địa chỉ 0000 - 1FFF , nếu không, mạch nạp đã báo lỗi rồi
Mong được chỉ giáo .
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2006, 01:02 AM   #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
Trích:
Nguyên văn bởi vokihut
Bổ sung thêm thông tin :
Em dùng mạch nạp cổng LPT (không rõ của hãng nào, hộp màu đen, xuất sứ từ USA, nhưng made in china ).
Nhưng có một vấn đề là : mạch nạp báo địa chỉ của con 16F876A từ 0 - 41FF ???? mặc dù con này chỉ có 8k bộ nhớ Flash, và datasheet ghỉ địa chỉ của nó từ 0 - 1FFF

Khi nạp xong, bộ nạp báo lỗi tại địa chỉ 4001 ??
Theo em, địa chỉ này không có trong bộ nhớ của 16F876A . Em đã đọc Flash của nó và so sánh code của nó vói file nguồn, thấy giống , tất nhiên không thể test hết đc. Nhưng có lẽ ít nhất là không có lỗi từ địa chỉ 0000 - 1FFF , nếu không, mạch nạp đã báo lỗi rồi
Mong được chỉ giáo .
Địa chỉ tính theo word (14-bit) của PIC16F876A là 0x0000-0x1FFF, nhưng tập tin .hex chỉ đánh số theo byte, do đó trong tập tin .hex phạm vi bộ nhớ chương trình của PIC16F876A là 0x0000-0x3FFF (vì dùng 2 byte do mỗi 14-bit từ lệnh). Nếu phần mềm của bạn chỉ dùng địa chỉ byte thì nó sẽ hiển thị bộ nhớ chương trình trong phạm vi đó. Và như vậy từ địa chỉ 0x4000 đến 0x41FF là dùng cho các từ cấu hình và data EEPROM (data EEPROM từ 0x4100 đến 0x41FF).

Địa chỉ 0x4001 bị báo lỗi chính là địa chỉ nằm trong vùng User ID, thường không được sử dụng. Nếu phần mềm cho phép thì bạn nên tắt chức năng verify vùng nhớ này, vì chắc là bạn không có dùng nó.

Với triệu chứng của mạch như bạn mô tả, bạn hãy kiểm tra xem từ cấu hình nằm ở địa chỉ 0x2007 (hay 0x400E trong phần mềm, cũng có thể nó được đặt trong một vùng riêng) xem có đúng hay không. Nếu đúng thì thử thêm với cấu hình HS:
Code:
#fuses HS, NOWDT, NOPROTECT, NOLVP
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

thay đổi nội dung bởi: namqn, 22-08-2006 lúc 06:39 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2006, 11:25 AM   #4
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
thực ra em cũng đã dùng cấu hình HS từ trước, cũng không được nên mới dùng kiểu XT. mà địa chỉ cấu hình ở 2001 thì phải. Mà em đã test lại rồi, không hiểu sao, bỏ thạch anh đi, dùng dao động theo kiểu RC ( R = 10K, và C = 33p ) thì nó hiện được số, nhưng mà chương trình vẫn không đúng như mong muốn. Mong bác tìm lỗi giùm .
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2006, 06:55 PM   #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
Để nhận xét về chương trình của bạn thì cần phải có sơ đồ mạch phần cứng, chỉ có chương trình không thì làm sao biết được thuật toán có đúng hay khô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 21-08-2006, 11:28 AM   #6
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
LED 7 thanh loại nối đất chung, mạch này cahwcs chả có lỗi gì,em nghĩ vấn đề có thể tại mạch nạp không ghi được Configuration word. Bác xem lại cho em luôn cái.
mà tiện cho em hỏi cái, hai loại 16F876A và 16F877A , toàn bộ các port của nó có thể sử dụng cả 2 chiểu vào ra ( theo thanh ghi TRIS_x) đc k? và khi port được sử dụng như các chắc năng đầu vào, có cần thiết phải pull up k?
Hình Kèm Theo
File Type: bmp machtest.bmp (862.2 KB, 38 lần tải)
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-08-2006, 06:43 PM   #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
Nếu bạn nghi ngờ mạch nạp không làm việc tốt thì cho biết tên của phần mềm được dùng với mạch nạp (có thể từ đó tìm ra phần cứng tương thích với nó).

Phần cứng để test LED của bạn không có vấn đề gì, do đó còn 2 chỗ để kiểm tra, thứ nhất là trình biên dịch, thứ hai là khâu nạp chương trình.

Bạn post tập tin .hex mà bạn đã dùng để test, để tôi kiểm tra từ cấu hình do trình biên dịch tạo ra.

Hầu hết các chân I/O có thể sử dụng cả hai chiều vào ra, trừ chân MCLR chỉ có thể dùng làm ngõ vào.

Khi port được dùng làm ngõ vào, việc có cần pull up hay không tùy vào mạch lái tín hiệu ngõ vào, nếu bạn dùng một vi mạch dạng open collector hay open drain thì phải dùng pull up. Một số port của PIC có cung cấp weak pull up, một số port không hề có sẵn pull up.

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 22-08-2006, 10:07 AM   #8
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
Em không dùng mạch nạp chuyên cho PIC mà dùng một mạch nạp tổng hợp rất nhiều họ, ANDROMEDA RESEARCH, và nó có phần mềm nạp riêng, nên không thể có phần mềm nào tốt hơn được. Bác rảnh thì test giùm em vậy. Có lẽ em sẽ liên hệ với bác Bình Anh để kiếm cái mạch nạp , coi có ổn hơn k ? Cảm ơn bác nhiều!

em không thể upload file len đc, toàn báo lỗi đăng nhập????
bác coi như thế này chắc tiện hơn.
test.hex :
------------------------------------
:1000000000308A00192800002130840000080319FC
:1000100018280130F800F701F70B0C28F80B0B2813
:100020004A30F700F70B122800000000800B092867
:10003000003484011F30830583161F149F141F157D
:100040009F1107309C00FF308312A0000030831600
:10005000860087008312A00086018701FF3086009A
:100060003F308700C830A100042006308700C83028
:10007000A10004205B308700C830A10004204F306D
:100080008700C830A100042066308700C830A10076
:1000900004206D308700C830A10004207D30870027
:1000A000C830A100042007308700C830A100042018
:1000B0007F308700C830A10004206F308700C8302F
:0800C000A100042030286300B8
:02400E00793FF8
:00000001FF
;PIC16F876A
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-08-2006, 06:47 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
Trong file .hex của bạn, từ cấu hình là 0x3F79, hoàn toàn chính xác với những gì được yêu cầu tại dòng lệnh dùng directive #fuses.

Nhìn chung, các phần mềm và phần cứng đa dụng không tốt hơn các phần mềm và phần cứng chuyên dụ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 22-08-2006, 06:55 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
Tổng hợp hết các thông tin mà bạn đã đưa khiến tôi nghi ngờ bộ dao động của PIC có vấn đề. Bạn thử nối một điện trở khoảng 2M (2 megaohm) giữa hai chân OSC1 và OSC2, chọn cấu hình HS, chạy thử và thông báo kết quả lê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 23-08-2006, 01:00 PM   #11
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
Em đã làm thử như bác bảo, nối song song trở 2M và chân OSC1 & OSC2, mạch có hiện tượng như sau:
- Sau khi cắm nguồn và bỏ tay ra, LED nháy liên tục ( em nghĩ cỡ chừng 200ms, k biết nữa) nhưng nó chỉ nháy và hiện số 0
- nếu sờ tay vào lưng con PIC thì nó led hiển thị số 0 và không nháy nữa.

không thấy thay đổi hiển thị gì cả ??
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-08-2006, 09:04 PM   #12
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
Mạch của bạn đang bị nhiễu, hãy kiểm tra kỹ lại các phần mạch, kể cả giá trị của linh kiện. Chú ý tụ tại chân MCLR (có thể bỏ nó luôn), tụ tải cho thạch anh (33p).

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 24-08-2006, 09:35 AM   #13
vokihut
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Bài gửi: 26
:
Em vừa lấy cái mạch nạp GTP-USB chỗ bác Bình Anh, nạp xong , mạch chạy phê lồi mắt )
Cảm ơn bác Nam nhiều nhé.
-------------------------------------------------------------------------
Phía trước mắt là một con đường!
vokihut vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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


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