Mới dùng PIC6F84A đã bị lỗi , nhờ giúp đỡ !
Mạch kết nối :
http://i189.photobucket.com/albums/z...DN/circuit.jpg code http://i189.photobucket.com/albums/z...nhDN/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/z...nhDN/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/z...N/circuit2.jpg |
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ó. |
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 |
Mình dùng Winpic800 nạp vẫn có dòng thông báo trên ? Thế mới đau chứ !
|
Trích:
Thân, |
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. |
Cũng có thể là do chưa cắm điện nguồn vào mạch nạp....
|
- 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 |
Đây , sơ đồ mạch nạp mà em đã mua http://i189.photobucket.com/albums/z...DoMachNap2.jpg
Vị trí chân khi cho vào socket http://i189.photobucket.com/albums/z...oDoMachNap.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/z...MinhDN/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ế |
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. |
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/z.../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/z...DN/Dataout.jpg http://i189.photobucket.com/albums/z...inhDN/code.jpg |
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 |
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ý . |
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.
|
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 ! |
Múi giờ GMT. Hiện tại là 02:58 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