PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Lỗi lập trình ngôn ngữ cấp cao (http://www.picvietnam.com/forum/forumdisplay.php?f=65)
-   -   Một Chương trình viết bằng CCS, vừa nạp vào thì con PIC xem như bỏ. (http://www.picvietnam.com/forum/showthread.php?t=2224)

uydanh 07-04-2008 05:39 PM

Một Chương trình viết bằng CCS, vừa nạp vào thì con PIC xem như bỏ.
 
1 Attachment(s)
Dạo này mình đang tập tành viết CCS cho PIC 16f877a. Ngay những chương trình đầu tiên đã làm cho mình "muốn khóc".
Viết bằng CCS, nạp bằng winpic800. Vừa nạp vào thì con PIC xem như không thể làm được gì nữa. Không thể xóa được chương trình trong nó, không thể nạp vào chương trình mới. Hiện mình đã có 2 con trong "rổ" rồi.
Ai biết tại sao như vậy thì hãy giúp mình nhé. Mình pó chiếu rồi.
Chương trình CCS
Code:

#include <16f877a.h>
#use delay(clock=2000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#byte portB=0x6
#byte portD=0x8
#use Fast_IO(B)
#bit B0=portB.0
#bit B7=portB.7
#bit D0=portD.0
void main()
{
set_tris_B(00);
set_tris_D(0xFF);
PORTB=0B00000000;
 if (D0==0)
 B0=1;
 else
 B7=1;

}

File hex bên dưới

namqn: Chương trình đính kèm không phải là chương trình ma quỷ.

namqn 07-04-2008 06:11 PM

Bạn nên dùng PUT với chương trình đơn giản. Trong main() nên có một vòng while (1) { }.

Bạn chưa cho biết mạch nạp được dùng là gì. Các mạch nạp qua cổng song song (Schaer+, PG3B, EPIC, ...) luôn luôn có thể đưa chip vào chế độ lập trình, bất kể bạn cấu hình hay viết code kiểu gì. Bạn tham khảo sơ đồ mạch Schaer+ Mod của tôi ở đây chẳng hạn: http://www4.hcmut.edu.vn/~nqnam/uC.php.


Thân,

uydanh 07-04-2008 10:50 PM

Em không rành về các loại mạch nạp lắm. Khi mới học PIC em mua một mạch nạp làm sẵn về để viết, nạp ứng dụng thôi.
So sánh với các loại mạch nạp trên trang web của anh Nam, em thấy cái mạch nạp của em giống cái Schaer + Mod , cũng nạp qua cổng song song, một vài con Transitor ,tuy nhiên lại có thêm một con IC nào đó (bị xóa mất tên).
Vậy có cách nào khắc phục , cứu lấy mấy con PIC của em ko anh Nam?

thaithienanh 08-04-2008 12:12 AM

Trích:

Nguyên văn bởi uydanh (Post 15397)
Nạp phần mềm làm PIC die

Không có chuyện này đâu bạn yên tâm :o

Bạn phải tường thuật lại các chi tiết thông báo khi bạn nạp PIC. Gợi ý :

+ Sau khi nạp : trình nạp (Winpic chẳng hạn) sẽ verify lại dữ liệu sau khi nạp, nó có báo lỗi gì ở lần nạp đầu tiên không ?, những lần tiếp theo thì sao ?
+ Theo như bạn nói thì mạch vẫn nhận dạng đuợc PIC, nhưng mỗi lần đọc dữ liệu ra dữ liệu là cố định àh (có xáo trộn gì không) ?
+ Sau khi đã nạp cho PIC rồi bạn có đem nó đi cắm vào bo ứng dụng chưa ?, và có phải cắm rồi thấy nó không chạy bạn đem đi nạp lại ?

Theo như phỏng đoán của mình với sự cố này, với một mạch nạp qua cổng Printer thuơng mại (chắc không đến nỗi), mình nghĩ có lẽ bạn đã nạp chuơng trình vào PIC tốt, sau đó cắm vào bo ứng dụng (thiết kế lỗi) nên làm Die PIC. Bạn vui lòng trả lời các câu hỏi ở trên và nếu chụp đuợc hình báo lỗi khi nạp thì tốt hơn nữa, có lẽ mọi nguời sẽ giúp bạn đuợc nhiều hơn :o

Thân.

uydanh 08-04-2008 12:37 AM

Trích:

Nguyên văn bởi thaithienanh (Post 15409)
Không có chuyện này đâu bạn yên tâm :o

Bạn phải tường thuật lại các chi tiết thông báo khi bạn nạp PIC. Gợi ý :

+ Sau khi nạp : trình nạp (Winpic chẳng hạn) sẽ verify lại dữ liệu sau khi nạp, nó có báo lỗi gì ở lần nạp đầu tiên không ?, những lần tiếp theo thì sao ?
+ Theo như bạn nói thì mạch vẫn nhận dạng đuợc PIC, nhưng mỗi lần đọc dữ liệu ra dữ liệu là cố định àh (có xáo trộn gì không) ?
+ Sau khi đã nạp cho PIC rồi bạn có đem nó đi cắm vào bo ứng dụng chưa ?, và có phải cắm rồi thấy nó không chạy bạn đem đi nạp lại ?

Theo như phỏng đoán của mình với sự cố này, với một mạch nạp qua cổng Printer thuơng mại (chắc không đến nỗi), mình nghĩ có lẽ bạn đã nạp chuơng trình vào PIC tốt, sau đó cắm vào bo ứng dụng (thiết kế lỗi) nên làm Die PIC. Bạn vui lòng trả lời các câu hỏi ở trên và nếu chụp đuợc hình báo lỗi khi nạp thì tốt hơn nữa, có lẽ mọi nguời sẽ giúp bạn đuợc nhiều hơn :o

Thân.

Con Pic đầu tiên mình nạp chương trình rồi gỡ ra cắm vào mạch thí nghiệm riêng, kết quả đúng như chương trình mình viết. Sau đó mình cắm ngược trở lại mạch nạp, định xóa để nạp chương trình khác thì bị báo lỗi như sau
Code:

DETECTED->UNKNOWN
DEVICE ERASED. : OK

Tất nhiên vì xóa không được nên không thể nạp được chương trình mới. Và nó báo lỗi như sau (khi vẫn cố gắng nạp chương trình mới)
Code:

ERROR->WRITING ADDRESS 0X000000
WRITTEN : 0X3000 READ :0X3FFF

Cái mạch test của mình chắc chắn không bị lỗi. Thứ nhất vì nó đơn giản (chỉ là nhấp nhấy mấy con led), thứ 2 : mình đã thử các chương trình khác trước đây con Pic đó vẫn chạy tốt trên mạch test đó.
Khi con Pic thứ nhất mình nghĩ là bị hư, mình thử con PIC khác, vừa cắm vào bo mạch nạp, nạp ngay cái chương trình mà khi nạp vào con PIC thứ nhất làm nó "cứng ngắt" thì con PIC này cũng tiêu luôn. Không thể xóa được chương trình trong đó để nạp chương trình mới vào cho dù khi cắm vào mạch test thì nó vẫn chạy đúng theo chương trình mình đã nạp "lần cuối"
Rất mong mọi người giúp đỡ và cứu lấy nó. Thanks for your help

uydanh 08-04-2008 12:47 AM

Trích:

Nguyên văn bởi thaithienanh (Post 15409)

+ Sau khi nạp : trình nạp (Winpic chẳng hạn) sẽ verify lại dữ liệu sau khi nạp, nó có báo lỗi gì ở lần nạp đầu tiên không ?, những lần tiếp theo thì sao ?
.

Lần nạp đầu tiên rất ngon lành, ko có lỗi gì hết. Chỉ có lần thứ 2 trở đi mình muốn xóa để nạp lại chương trình khác thì không được vào báo lỗi như trên.
Trích:

Nguyên văn bởi thaithienanh (Post 15409)

+ Theo như bạn nói thì mạch vẫn nhận dạng đuợc PIC, nhưng mỗi lần đọc dữ liệu ra dữ liệu là cố định àh (có xáo trộn gì không) ?

Khi không nạp mới được chương trình, mình thử lại Detect device (có sẵn ở winpic800), nó báo là unknown
Khi đọc ngược dữ liệu ra thì có lúc toàn là 3FFF , đọc được vài lần thì lại thấy toàn là 0000.
Trích:

Nguyên văn bởi thaithienanh (Post 15409)
Sau khi đã nạp cho PIC rồi bạn có đem nó đi cắm vào bo ứng dụng chưa ?, và có phải cắm rồi thấy nó không chạy bạn đem đi nạp lại ?

Con Pic đầu tiên thì mình đã cắm vào board ứng dụng, con PIC thứ 2 thì chưa, chỉ vừa nạp vào và thử xóa và nạp lại thì đã ko được.
Chương trình mình viết khi cắm trên board ứng dụng chạy rất tốt, định viết phát triển thêm nên nạp lại -> không nạp lại được.

thaithienanh 08-04-2008 01:09 AM

Trích:

Nguyên văn bởi uydanh (Post 15411)
Lần nạp đầu tiên rất ngon lành. Khi đọc ngược dữ liệu ra thì có lúc toàn là 3FFF, đọc được vài lần thì lại thấy toàn là 0000.
Chỉ vừa nạp vào và thử xóa và nạp lại thì đã ko được.

:( Thôi chết rồi.

Bạn có VOM ở đó không ? hãy đo lại điện áp tại các chân DATA, CLOCK, VDD, VPP1, VPP2 trên mạch nạp, bằng cách trên menu của winpic800 --> setting --> Hardware --> nhìn xuống bên tay trái ở dưới chọn vào nút có hình dấu check (Blockade config) kế bên nút có hình chữ I (about) --> gỡ bỏ dấu check trong ô "Blockade config" đi --> khi này trình sẽ cho phép bạn toàn quyền điều khiển bật tắt các chân, bằng việc check hoặc uncheck vào ô TEST tương ứng --> dùng VOM đo áp tại các chân đó và ghi nhận kết quả.

:( Mình nghĩ có vấn đề về điện áp nạp ở đây rồi.

Điện áp tham khảo như sau : VPP <= +13 VDC, DATA & CLOCK & VDD <= +5VDC.

Nếu bất kỳ chân nào vượt hơn mức đó thì sẽ sinh lỗi :o

Thân.

uydanh 08-04-2008 02:01 AM

Mình nghĩ đó ko phải là nguyên nhân vì ngay trước đó khi mình nạp, xóa các chương trình khác rất tốt, chỉ riêng cái chương trình trên khi nạp vào là bị "dính" thôi. Với lại mình cũng thử làm theo chỉ dẫn của bạn thì rất OK.
Thấy có đứa bạn nó nói bị lock bit gì đó. thế là thế nào vậy ta? Có đứa bạn của mình từng xài AVR khi nạp cái chương trình gì đó vào lần lượt các AVR thì lần lượt đều bị tiêu hết, không làm ăn gì được. Trắng tay tới 5 con AVR chứ ít gì.
Không bit làm sao giải quyết đây các bạn. Thanks.

quangduy 22-04-2008 01:32 PM

Bạn nên kiếm một cái mạch nạp khác, cái mạch mạp đó bị lỗi rồi đó bạn hay đon giản là nó bị nhiễu, thay cái dây tín hiệu tốt hơn xem. Theo mình thì muốn cứu thì sài ICD2 coi.

navy 22-04-2008 10:00 PM

Trích:

Nguyên văn bởi uydanh (Post 15418)
Mình nghĩ đó ko phải là nguyên nhân vì ngay trước đó khi mình nạp, xóa các chương trình khác rất tốt, chỉ riêng cái chương trình trên khi nạp vào là bị "dính" thôi. Với lại mình cũng thử làm theo chỉ dẫn của bạn thì rất OK.
Thấy có đứa bạn nó nói bị lock bit gì đó. thế là thế nào vậy ta? Có đứa bạn của mình từng xài AVR khi nạp cái chương trình gì đó vào lần lượt các AVR thì lần lượt đều bị tiêu hết, không làm ăn gì được. Trắng tay tới 5 con AVR chứ ít gì.
Không bit làm sao giải quyết đây các bạn. Thanks.

Vấn đề của bạn mình thấy bạn nên kiểm tra một số chỗ sau:
1. Phần cứng của bạn, đặc biệt là các chân nguồn giữa Vpp và GND có chạm không (Vô tình hay chạm đường mạch, dây, ốc vít...)? Trước đây mình làm có lần dùng đồng hồ kiểm tra hai chân này vô tình chạm que đo nối chúng lại với nhau, khi nạp lại cũng unknow..đọc được nhưng detect unknow. Đo lại thêm điện áp các chân Data, CLK,....
2.Mạch nạp của bạn có vấn đề, nên thay mới hoặc tự chế.
3. Xem lại phần cài đặt của Winpic800 xem khi khởi động lần đầu nó có mặc định là hỗ trợ lock code không? Mùa làm robocon vừa rồi mình cũng tiêu cả chục con vì những lỗi đó.
Lỗi trên có thể còn do nguyên nhân khác vì kiến trúc hoàn chỉnh bên trong PIC gần như a e ta ko nắm rõ được. Anh em nào có hiện tượng gì post lên để cùng nhau chia sẻ và rút ra kinh nghiệm.

thaithienanh 23-04-2008 06:44 PM

Trích:

Nguyên văn bởi uydanh (Post 15418)
Mình nghĩ đó ko phải là nguyên nhân vì ngay trước đó khi mình nạp, xóa các chương trình khác rất tốt, chỉ riêng cái chương trình trên khi nạp vào là bị "dính" thôi. Với lại mình cũng thử làm theo chỉ dẫn của bạn thì rất OK.
Thấy có đứa bạn nó nói bị lock bit gì đó. thế là thế nào vậy ta? Có đứa bạn của mình từng xài AVR khi nạp cái chương trình gì đó vào lần lượt các AVR thì lần lượt đều bị tiêu hết, không làm ăn gì được. Trắng tay tới 5 con AVR chứ ít gì.
Không bit làm sao giải quyết đây các bạn. Thanks.

Chương trình của bạn không phải bị lock bit :o
Chỉ có phạm vài lỗi cơ bản như :
- Cấu hình OSC sai, ở cấu hình HS (high speed OSC) <=> tần số thạch anh mắc vào phải >4MHz, nhưng mà bạn lại chọn là 2MHz :o
- Như anh Namq nói, ở chuơng trình chính nên có ít nhất là một vòng lặp :o

Với PIC việc cấu hình đuợc viết ngay trong code chương trình, vì vậy mà khi nạp Winpic800 sẽ tự động cập nhật lại cấu hình này, nên bạn yên tâm việc lockbit sẽ không bị set từ trước :o, chứ không phải như AVR việc cấu hình của nó rất rườm rà nếu không nói có chút gì đó gọi là ngốc ngếch !?!!

Theo mình nghĩ thì mạch nạp của bạn chẳng vấn đề gì cả vì bạn nói là nạp bình thường các PIC cùng loại và code khác :o.
Nguyên nhân nào PIC có thể "đơ" thì mình thua không rõ đuợc :(

uydanh 06-05-2008 10:50 AM

Trích:

Nguyên văn bởi quangduy (Post 15707)
Bạn nên kiếm một cái mạch nạp khác, cái mạch mạp đó bị lỗi rồi đó bạn hay đon giản là nó bị nhiễu, thay cái dây tín hiệu tốt hơn xem. Theo mình thì muốn cứu thì sài ICD2 coi.

Bạn đã bắt đúng bệnh. Do cái mạch nạp của mình, nói chung là ko tốt. Mình mượn mạch nạp khác của đứa bạn thì hầu hết các con PIC hồi đó giờ mình tưởng die thì đều sống. Cuộc đời vẫn đẹp sao ! Hehehehe

tantuan82 06-05-2008 02:04 PM

cái mạch nạp bạn nói chưa hẳn là không tốt, mạch nạp qua cổng LPT rất ổn định và hầu như không thây lỗi, bạn nên kiểm tra vài cấu hình hardware sau đây kẻo vứt đi thì uổng:
- Nguồn cấp: thông thường hơi cao khoảng từ 15 đến 18V DC (Nguyên nhân nguồn cần cao do sụt áp qua các diode sau đó tạo VPP khoảng 12,5V qua IC LM317 chẳng hạn)
- xem settings trong winpic800, thường phải chọn Vpp2 cho PIC 40 pin
- Và quan trọng; Nếu hàng bạn mua thì chắc sẽ có Hướng dẫn SD của người bán, bạn đọc lại xem mình có cấu hình sai chỗ nào không.
- cuối cùng là nhờ người bán giúp đỡ / bảo hành.

peekaboo 17-11-2008 12:59 AM

Éc éc . Cái vấn đề này y hệt mình đang bị. hồi trước làm luận văn mấy con Pic nạp xóa OK , vậy mà bo mấy tháng không đụng đến giờ 5 con Pic cắm vô đều .........UNKNOW?? Mình dùng mạch nạp PicBasic. Ác Ác hông lẽ Die cái mạch 200k rồi hả chời???? Ai kiểm tra dùm mình được không? Ah còn cái này nữa : #FUSES NOLVP compile dc nhưng không nạp được, #FUSES LVP compile dc nạp cũng được. cả 877 và 84431 như nhau????????????

thanhtuan_le 18-11-2008 04:43 PM

câu tho cua anh hay wa


Múi giờ GMT. Hiện tại là 02:11 PM.

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