PDA

View Full Version : Mới dùng PIC6F84A đã bị lỗi , nhờ giúp đỡ !


Mr.Bi
28-08-2007, 11:17 PM
Mạch kết nối :
http://i189.photobucket.com/albums/z78/NgCongMinhDN/circuit.jpg
code
http://i189.photobucket.com/albums/z78/NgCongMinhDN/code2.jpg
Mô phỏng trên proteus thì chạy nhưng ráp test thử thì không sáng LED
Nạp chương trình :
- open : 1led.HEX
- cài đặt osc là XT
- cuối cùng nhấn program All
Sau khi nạp hết thì hiện thông báo
http://i189.photobucket.com/albums/z78/NgCongMinhDN/fault.jpg
Không bit lỗi do cách thức nạp bị sai ? hay do ráp mạch còn thiếu chỗ nào nữa . (Đo chân RB0 chả lên Volt nào cả )
Ah ! mà viết BSF PORTB,0 ; chỉ set bit0 của portB
nhưng khi mô phỏng lại cho ra kết quả
http://i189.photobucket.com/albums/z78/NgCongMinhDN/circuit2.jpg

cup_of_cafe
29-08-2007, 09:15 AM
Khi bạn nạp file HEX thì bạn nạp dùng JDM ??? Có vẻ như bạn chưa hiểu lắm đến khái niệm mạch nạp, bạn dùng chính mạch trong Protus để chạy nạp dữ liệu???
Để nạp dữ liệu vào PIC, bạn phải dùng 1 bộ nạp chuyên dụng hoặc bộ debug như ICD chẳng hạn. Nếu bạn dùng ICD bạn có thể nạp và chạy luôn trên mạch. Dùng mạch nạp này bạn nạp file HEX do trình biên dịch PIC tạo ra và thực thi nó.

Mr.Bi
29-08-2007, 11:21 PM
Ah ! Chắc mình viết khó hiểu nên khiến cup_of_cafe hiểu nhầm . Ý của mình là
- code mình viết như trên , chắc ko có gì sai , vì đơn giản thôi mà
- Mình dùng MPLAB IDE để viết code & build all thì ko có lỗi , & tạo đc file *.HEX
- Mình nạp file này vào PIC với software Ic-Prog 1.05E(tất nhiên là wa mạch nạp , mình mua 75k đấy!)
Vấn đề là : tại sao lại có dòng thông báo "verify failed at address 0000H" ?
: nhấn OK , tháo PIC ra gắn vào test board , cho run nhưng LED ko sáng---> có phải chương trình chưa đc nạp vào PIC

Mr.Bi
29-08-2007, 11:23 PM
Mình dùng Winpic800 nạp vẫn có dòng thông báo trên ? Thế mới đau chứ !

namqn
30-08-2007, 12:00 AM
Ah ! Chắc mình viết khó hiểu nên khiến cup_of_cafe hiểu nhầm . Ý của mình là
- code mình viết như trên , chắc ko có gì sai , vì đơn giản thôi mà
- Mình dùng MPLAB IDE để viết code & build all thì ko có lỗi , & tạo đc file *.HEX
- Mình nạp file này vào PIC với software Ic-Prog 1.05E(tất nhiên là wa mạch nạp , mình mua 75k đấy!)
Vấn đề là : tại sao lại có dòng thông báo "verify failed at address 0000H" ?
: nhấn OK , tháo PIC ra gắn vào test board , cho run nhưng LED ko sáng---> có phải chương trình chưa đc nạp vào PIC
Đúng vậy, phần mềm báo là tại địa chỉ 0000h nội dung đã nạp được khác với nội dung cần nạp => chưa nạp được chương trình vào PIC.

Thân,

thaithienanh
30-08-2007, 01:08 AM
Thông báo đó đồng nghĩa với Winpic800 thậm chí chẳng thấy đuợc con PIC luôn -> PIC chưa ăn đuợc "món gì" vào bụng -> lắp vào mạch thì em led muốn nháy lắm mà anh PIC "đói bụng" quá hổng chịu cho nháy :D

Như vậy ở đây lỗi nằm ở phần Programer : có thể là do mạch nạp, kết nối, cấu hình winpic800..... :)

Bạn xem lại phần trao đổi giữa các thành viên ở luồng "thông tin mạch nạp phần mềm",..v..v.. để biết cách kiểm tra và khắc phục lỗi nhé :)

Thân.

john_den
30-08-2007, 09:38 AM
Cũng có thể là do chưa cắm điện nguồn vào mạch nạp....

Mr.Bi
31-08-2007, 01:11 AM
- Mạch của mình giao tiếp PC wa COM--> chắc dùng nguồn của PC rùi
- Có khi nào mạch nạp mình mua bị fault ko nhỉ? Phải đưa cho ông chủ tiệm tét lại đã !
Thanks các cố vấn

Mr.Bi
31-08-2007, 02:24 AM
Đây , sơ đồ mạch nạp mà em đã mua http://i189.photobucket.com/albums/z78/NgCongMinhDN/SoDoMachNap2.jpg
Vị trí chân khi cho vào socket
http://i189.photobucket.com/albums/z78/NgCongMinhDN/SoDoMachNap.jpg
WinPic800 ko detect đc loại PIC --> PIC đã hỏng ? Con này em mua cùng với Mạch nạp luôn đó . Sao hỏng nhanh thế nhỉ ?
http://i189.photobucket.com/albums/z78/NgCongMinhDN/Loi.jpg
Mấy anh để ý dòng
0x0000: 3FFF 3FFF... dòng đầu tiên ý ! trong hình WinPic800 . Phía cuối của dòng này là những kí tự 'Lạ" ! Không phải là những dấu ?.?.?.?.?.
TẠi sao thế

abeo
31-08-2007, 03:25 AM
Có thể bạn cắm nhầm chân con pic vào zif thì sao, giả dụ như cắm lộn ngược pic hay không đúng thứ thự chân.(cái này khiến bị lỗi đó).
Bình thường khi cắm chip vào và khởi đông winpic800 thì nó tự detect chip.
Cũng có thể bạn set jumper chưa đúng (có hai chế độ hoạt động của bộ nạp--pic 16f84 là loại 18 chân) thành ra chân MCLR không có tín hiệu.
Còn về mấy cái chữ không phải ?.?.? thì đó là mã ASCII của mấy số hex tương ứng ở cột bên trái.

Mr.Bi
31-08-2007, 04:35 PM
Uh ! Đúng vậy , sau khi đem mạch lại cho ông chủ bán test thì ổng bày set Jump , bây giờ thì detect PIC đã có khả quan
http://i189.photobucket.com/albums/z78/NgCongMinhDN/DetectPIC.jpg
Có phải với thông báo này , chương trình đã đc nạp vào PIC hay ko ? , Sao mình đo áp portB , chân nào cũng lên 5v .Trong khi code mình viết chỉ SET cho RBO thôi mà
http://i189.photobucket.com/albums/z78/NgCongMinhDN/Dataout.jpg
http://i189.photobucket.com/albums/z78/NgCongMinhDN/code.jpg

abeo
01-09-2007, 02:58 AM
bạn đọc lại datasheet của con pic 84 đi (google cụm từ pic 16f84a và chọn link có cái mở đầu là [PDF]), hình như trong đó viết là trạng thái các chân port của con pic lúc reset là không xác định!, để cho chắc ăn bạn nên dùng lệnh:
movlw b'00000001'
movwf portb

Mr.Bi
02-09-2007, 10:03 AM
UH , đúng vậy abeo ah ! với MOVLW B'00000001'
MOVFW PORTB
thì ko có vấn đề gì xảy ra cả !
Về vấn đề DELAY , code của nó thế này :
DELAY CLRF COUNT; xóa thanh COUNT
HERE DECFSZ COUNT,1;giảm nhảy nếu chưa = 0
GOTO HERE
RETURN
Vấn đề là câu lệnh DECFSZ : tại sao lúc đầu ta đã CRLF nó rùi (tức giá trị của COUNT bây giờ = 0) , mà ta lại giảm nữa . Từ g.trị 0 thì giảm về mấy ? chẳng lẽ về giá trị âm ?
Thường thì trong 8051 , ban đầu ta gán cho COUNT = FFh , sau đó giảm về 0thì Bi thấy có lý .

abeo
03-09-2007, 02:07 AM
do thanh ghi có 8 bit nên sau khi lệnh giảm xảy ra thì từ 00h sẽ về FFh và cứ như thế mãi nều không có điều kiện nhảy nếu bằng không (vốn là kiểm tra cờ zero, sau khi giảm mới kiểm tra),con pic không hiểu giá trị âm, (chỉ có thể định nghĩa bằng phần mềm), mình cũng là dân mới học nên cũng muốn giao lu với anh em cho nó tăng phần hiểu biết.

Mr.Bi
03-09-2007, 12:01 PM
Hiểu rùi ! con PIC này thú vị ấy chứ nhỉ !
Hỏi abeo tiếp nhé : đây là đoạn code Bi viết cho led7d , dùng tra bảng
LOOP1 CLRF POINTER ; thanh ghi POINTER là thanh ghi đếm
LOOP2 MOVF POINTER,W
CALL TRA_BANG
MOVWF PORTB
CALL DELAY_1s
INCF POINTER
MOVLW D'10'
XORWF POINTER,W
BTFSS STATUS,Z
GOTO LOOP2
GOTO LOOP1
TRA_BANG ADDWF PCL
RETLW H'3F';so 0
RETLW H'06';so 1
RETLW H'5B';so 2
RETLW H'4F';so 3
RETLW H'66';so 4
RETLW H'6D';so 5
RETLW H'7D';so 6
RETLW H'07';so 7
RETLW H'7F';so 8
RETLW H'6F';so 9
END
Bi ko hiểu , mình sai logic chỗ nào nữa . nó chỉ đếm 0 , 1 ; rùi tự nhiên nhảy về lại 0 . Đau đầu cả buổi khuya !

Mr.Bi
03-09-2007, 09:59 PM
ash! Bi tìm ra lỗi rùi . quên tắt check WDT