PDA

View Full Version : Pvn Tiny Bootloader


ntc
25-05-2006, 03:48 PM
Đây là kết quả sau một thời gian dài miệt mài về Tiny Bootloader.

Nhận thấy đây là một công cụ đắc lực cho việc phát triển vi điều khiển PIC, chúng tôi đã làm việc hết sức nghiêm túc để đưa ra cho các bạn sản phẩm tốt nhất trong khả năng của PICVIETNAM.

Rất trùng hợp, mọi công việc đã được hoàn tất ngay vào ngày sinh nhật của PICVIETNAM, nên cũng có thể xem đây là món quà nho nhỏ PICVIETNAM mong muốn gửi tặng đến tất cả các thành viên, đến những ai đã quan tâm và dành những tình cảm tốt đẹp cho PICVIETNAM. Đó cũng là điều mà PICVIETNAM mong muốn nhận được trong ngày sinh nhật của mình, cũng như trong những ngày bình thường khác (đừng quên tham gia chúc mừng sinh nhật PICVIETNAM tối nay nhé :D).

ntc
25-05-2006, 04:01 PM
Có thể nói là một khoảng thời gian tương đối dài. :D. Bắt đầu từ những thông tin cơ bản nhất, chúng tôi đã dần phát triển và nâng cấp công cụ này qua 3 phiên bản.

Phiên bản PVN Tiny Bootloader Version 1.0 : phiên bản dựa hoàn toàn trên mạch nguyên lí ban đầu của Tiny Bootloader. Phiên bản này tuy cho phép đưa chương trình mới vào vi điều khiển nhanh chóng và tin cậy, nhưng vẫn có một số hạn chế nhất định như phải nhấn nút reset bằng tay, chưa thực sự ổn định, ...

Phiên bản PVN Tiny Bootloader Version 2.0 : có thêm một số cải tiến cho phép reset bằng chương trình, không cần phải nhấn nút reset, nâng cao độ ổn định và mang lại nhiều thuận tiện hơn cho người sử dụng. Chúng tôi sẽ phổ biến phiên bản này trong các bài viết tiếp theo.

Phiên bản PVN Tiny Bootloader Veioon 3.0: đây là sản phẩm thương mại của PICVIETNAM dựa hoàn toàn trên những cải tiến của phiên bản PVN Tiny Bootloader Version 2.0, tuy nhiên nó được thiết kế nhỏ gọn và mang tính thẩm mỹ cao, cho phép bỏ toàn bộ mạch vào vỏ của cổng COM và được thiết kế theo chuẩn mới của PICVIETNAM.

Xin gửi lời cảm ơn chân thành đến anh Đoàn Hiệp, anh Nguyễn Quang Nam, anh Doãn Minh Đăng, anh BinhAnh và các thành viên nhóm PIC tp HCM đã giúp em hoàn thành sản phẩm này.

ntc
25-05-2006, 04:10 PM
TÓM TẮT NỘI DUNG:

Báo cáo kết quả tìm hiểu mạch nạp Tiny Bootloader cho vi điều khiển PIC, bao gồm các nội dung:

- Sơ lược về Tiny bootloader

- Thiết kế và thi công Tiny Bootloader.

- Chương trình viết cho vi điều khiển khi dùng Tiny Bootloader để nạp.

- Test mạch Tiny Bootloader.

- Một số phương pháp nhằm nâng cao tính ổn định của Tiny Bootloader.

1. Sơ lược về Tiny bootloader

Tiny Bootloader là một chương trình được đưa trước vào vi điều khiển thông qua một mạch nạp. Chương trình này có nhiệm vụ giao tiếp với máy tính (thông qua một phần mềm điều khiển trên máy tính) để nhận chương trình mà người sử dụng muốn nạp vào vi điều khiển và ghi chương trình đó vào bộ nhớ chương trình của vi điều khiển. Như vậy Bootloader cho phép ta thay đổi chương trình trong vi điều khiển một cách dễ dàng thông qua máy tính.

Firmware Tiny Bootloader cho vi điều khiển PIC có các đặc tính sau:

- Dung lượng chương trình bootloader nhỏ (ít hơn 100K word bộ nhớ chương trình).

- Sử dụng cho các dòng PIC16F, PIC18F và dsPIC (bao gồm các vi điều khiển có hỗ trợ chế độ tự nạp chương trình).

Phiên bản mới nhất của chương trình Tiny Bootloader là phiên bản tinybld191 với các đặc tính:

- Cho phép đưa chương trình của người sử dụng vào bộ nhớ flash của vi điều khiển.

- Hỗ trợ cho các dòng PIC16F, PIC18F và dsPIC, có khả năng tự phát hiện loại vi điều khiển PIC người sử dụng muốn đưa chương trình vào. Có khả năng ghi nhớ các chế độ thiết lập của lần sử dụng sau cùng.

- Trong trường hợp quá trình truyền nhận bị lỗi, chương trình sẽ được tự động truyền lại hoặc cho phép tự đồng bộ giữa vi điều khiển và máy tính.

- Cho phép thiết lập tốc độ baud và các thiết lập khác cho việc giao tiếp giữa máy tính và vi điều khiển.

Tiny Bootloader phiên bản mới “tinybld191” còn hỗ trợ thêm chế độ “Reset In Program” sử dụng chân RTS của cổng COM. Tuy nhiên chức năng Reset yêu cầu một mạch hỗ trợ khá phức tạp trên mạch ứng dụng. Ta có thể vẫn sử dụng chức năng tự động reset này mà không cần phần mạch hỗ trợ trên bằng cách cải tiến thêm một số điểm trong sơ đồ nguyên lí mạch nạp. Phần này sẽ được trình bày kĩ hơn khi đề cập đến sơ đố nguyên lí của Tiny Bootloader.

Thực chất ta có thể xem bootloader dành cho vi điều khiển PIC là một chương trình assembly bình thường được xây dựng với nhiệm vụ chờ tín hiệu điều khiển từ chương trình của máy tính trong vòng 1 giây kể từ thời điểm vi điều khiển được reset. Nếu trong vòng một giây có tín hiệu từ máy tính gửi đến vi điều khiển, chương trình bootloader sẽ ra lệnh cho vi điều khiển cập nhật chương trình mới. Trong trường hợp không có tín hiệu nào nhận được, chương trình cũ vẫn tiếp tục được thực thi bình thường. Đây cũng là một đặc điểm quan trọng của bootloader dành cho vi điều khiển PIC. Ngoài ra chương trình asm của bootloader cũng có thể dễ dàng được chỉnh sửa cho phù hợp với tốc độ truyền nhận và mục đích của người sử dụng.

ntc
25-05-2006, 04:48 PM
2. Mạch Tiny bootloader

2.1. Chức năng của mạch Tiny bootloader dành cho vi điều khiển PIC

Ta đã có sẵn các chương trình giao tiếp (của máy tính cũng như của vi điều khiển). Tuy nhiên để quá trình truyền nhận dữ liệu thực hiện được ta cần thiết kế thêm một mạch giao tiếp giữa máy tính và vi điều khiển thông qua một chuẩn giao tiếp nào đó. Đó cũng chính là nhiệm vụ của mạch Tiny bootloader. Thực chất có thể hiểu đây chỉ là một mạch giao tiếp đơn thuần.

2.2. Sơ đồ nguyên lí mạch Tiny bootloader

Mạch nguyên lí trong hình 1 được sử dụng để giao tiếp giữa máy tính với vi điều khiển PIC thông qua chuẩn giao tiếp RS232.

Tại ngõ vào của mạch Tiny bootloader ta sử dụng IC MAX232 để thực hiện việc chuyển đổi điện áp của tín hiệu ngõ ra cổng nối tiếp (cổng COM) của máy tính (+10V và –10V) sang điện áp của dạng tín hiệu thông thường (0V và 5V) theo chuẩn giao tiếp RS232. Ngõ ra của mạch sẽ là các tín hiệu TX và TX được nối vào các chân tương ứng của vi điều khiển PIC. Nguồn cung cấp (5V và GND) được lấy trực tiếp từ mạch ứng dụng của vi điều khiển PIC để đưa vào mạch Tiny bootloader, như vậy ta không cần thiết kế thêm nguồn cung cấp riêng cho mạch.

Sơ đồ nguyên lí mạch Tiny Bootloader nguyên thủy (không có chức năng “Reset In Program”) sử dụng 3 chân GND, TX và TX của cổng COM được trình bày trong hình 1.

http://i65.photobucket.com/albums/h237/pvn_ntc/BLDNGUYENTHUY.jpg

Hình 1 : Sơ đồ nguyên lí mạch Tiny Bootloader nguyên thủy.

Để tận dụng tính năng “Reset In Program”, ta tiến hành cải tiến sơ đồ nguyên lí mạch ở hình 1 như sau: nối chân RTS của cổng COM với một ngõ vào của MAX232, và nối ngõ ra tương ứng của chân đó với chân MCLR* của vi điều khiển PIC. Khi Chương trình “tiny Bootloader” được cho phép hoạt động, chân RTS của cổng COM sẽ được kéo lên mức logic cao, và theo nguyên lí hoạt động của MAX232, mức logic của chân ngõ ra tương ứng với ngõ vào đó sẽ ngược với mức logic của ngõ vào, điều này có nghĩa chân MCLR* của PIC được đưa về mức logic 0 và vi điều khiển được reset. Sơ đồ nguyên lí cụ thể của mạch Tiny Bootloader cải tiến được trình bày trong hình 2.

http://i65.photobucket.com/albums/h237/pvn_ntc/BLDCAITIEN.jpg

Hình 2 : Sơ đồ nguyên lí mạch Tiny Bootloader cải tiến.

Các hoạt động tiếp theo sau đó là hoạt động truyền nhận các word chương trình giữa máy tính và vi điều khiển. Hoạt động này là sự phối hợp giữa chương trình Tiny Bootloader trên máy tính và firmware Tiny Bootloader được nạp vào vi điều khiển trước đó. Máy tính có nhiệm vụ truyền dữ liệu cho vi điều khiển, còn chương trình firmware chịu trách nhiệm việc ghi dữ liệu đó lên bộ nhớ chương trình, tổ chức sắp xếp một cách hợp lí để chương trình nạp vào có thể hoạt động bình thường, đồng thời cho phép kích hoạt firmware Tiny Bootloader khi vi điều khiển được reset.

ntc
25-05-2006, 06:27 PM
3. Thi công mạch Tiny Bootloader.

Yêu cầu đặt ra cho mạch thi công bao gồm:

- Bảo đảm thứ tự các chân ngõ ra theo đúng chuẩn qui định của PICVIETNAM.

- Mạch đơn giản, gọn nhẹ, không cần sử dụng nguồn cung cấp riêng cho mạch Tiny Bootloader..

- Đạt yêu cầu về tính thẩm mỹ.

- Có hộp bao bọc mạch Tiny Bootloader.

- Hộp bao bọc sử dụng trong truờng hợp này là vỏ cổng LPT do các nguyên nhân:

- Đáp ứng được kích thước của mạch PCB.

- Đạt yêu cầu về thẩm mỹ.

(Không phổ biến hình này vì không đúng chuẩn ICSP BLD của picvietnam)

Hình 3: Sơ đồ mạch in Tiny Bootloader Version 2.0

Mạch in được thiết kế như hình trên cho phép ta bỏ lọt Tiny Bootloader vào vỏ nhựa của cổng song song (DB25). Như vậy việc thiết kế vỏ hộp cho Tiny Bootloader đã được giải quyết. Giải pháp này không quá phức tạp nhưng hiệu quả, vừa đem lại tính thẩm mỹ cho Tiny Bootloader, vừa bảo đảm tính an toàn trong quá trình sử dụng (tránh bị điện giật!).

Chú ý chân NC (Not Connected) trong trường hợp này được thêm vào chỉ để cho đủ 6 chân do đăc điểm thị trường linh kiện không có loại jack 6. Việc thêm vào chân NC cho phép tạo nhiều thuận lợi trong quá trình thiết kế và thi công mạch, tạo sự thuận tiện trong quá trình sử dụng. Ngoài ra chân này không còn vai trò hay chức năng nào khác.

Ngõ vào của mạch bao gồm các tín hiệu TX, TX và GND từ cổng COM và các chân VDD, VSS dùng để cấp nguồn cho Tiny Bootloader. Ngõ ra là các tín hiệu TX, RX từ cổng COM và tín hiệu từ chân R2OUT* của MAX232 được nối vào các chân tương ứng của vi điều khiển PIC.

Phần mạch chính của Tiny Bootloader bao gồm IC MAX232 và các tụ DC có giá trị 1uF/50V. Các phần còn lại được kết nối thông qua các dây nối. Mô hình cụ thể của Tiny Bootloader như sau:

http://i65.photobucket.com/albums/h237/pvn_ntc/hinh4.jpg

Hình 4: Mô hình mạch Tiny Bootloader.

Các khoảng cách nêu trên chỉ mang tính chất tham khảo. Phần cáp nối về cổng COM cho phép nối dài trên 1m (phần này điện áp truyền trên đường dây là +(-) 10 V nên cho phép truyền đi xa tốt hơn). Việc nối dài các đoạn cáp như vậy cho phép ta kết nối và sử dụng Tiny Bootloader thuận tiện hơn. Tuy nhiên ta chỉ nên kéo dài phần cáp kết nối từ cổng COM đến Tiny Bootloader.

Việc tự thiết kế cáp nối vào cổng COM đính kèm vào Tiny Bootloader cho phép tạo nhiều thuận tiện hơn khi sử dụng Tiny Bootloader, tuy nhiên để sản phẩm đạt được yêu cầu về thẩm mỹ, cần trải qua công đoạn thiết kế kiểu mẫu cho mạch. Do đó để nối dài cổng COM, ta sử dụng cáp chuyên dụng, khi đó Tiny Bootloader chỉ còn là một sản phẩm gọn nhẹ như các hình được trình bày ở phần sau.

falleaf
25-05-2006, 06:36 PM
Em lưu ý, phiên bản này là phiên bản version 2, mạch in này chúng ta không phổ biến nữa, anh tạm xoá bớt phần mạch in này của em đi. Khi nào có hình sản phẩm hoàn thiện theo đúng version 3, chuẩn box header 5x2, thì chúng ta mới post lên. Em đem qua chỗ anh Đăng để chụp hình lại.

Chúc vui.

falleaf
25-05-2006, 06:40 PM
Cái hình mạch nguyên lý cải tiến, em post lại cái hình to lên cho mọi người xem, em làm nó có chút téo thế thì ai mà xem nổi?

Chúc vui.

ntc
25-05-2006, 06:44 PM
4. Thiết kế mạch ứng dụng tương thích với mạch Tiny bootloader

Để sử dụng được mạch Tiny Bootloader có sơ đồ nguyên lí được trình bày ở phần trên, thì ở phần mạch ứng dụng, ta phải thêm vào một jack kết nối giữa mạch ứng dụng và mạch Tiny Bootloader. Jack này bao gồm các đường VDD, VSS để cấp nguồn cho mạch Tiny Bootloader và các đường tín hiệu TX, RX, MCLR*.

PICVIETNAM khuyến cáo việc thiết kế jack nối giữa Tiny Bootloader và mạch ứng dụng có thứ tự chân như hình 5. Thứ tự cụ thể như sau:

- MCLR
- VDD
- VSS
- TX
- RX

Đây cũng là chuẩn thiết kế các mạch ứng dụng của PICVIETNAM sử dụng mạch Tiny Bootloader. Tính hiệu quả của chuẩn này đã được PICVIETNAM kiểm định qua một quá trình chuẩn hóa và đưa vào ứng dụng trong thực tế.
Việc thiết kế theo chuẩn như vậy mang lại nhiều thuận lợi cho quá trình thiết kế ứng dụng và sử dụng công cụ Tiny Bootloader. Mạch Tiny Bootloader có thể nói là một công cụ đắc lưc đã đựoc thiết kế cố định và sử dụng lâu dài, do đó nếu việc thiết kế jack nối trong các mạch ứng dụng không đồng nhất sẽ dẫn đến tình trạng một mạch ứng dụng không tương thích với Tiny Bootloader, như vậy công cụ Tiny Bootloader trong trường hợp này xem như không có tác dụng, và muốn sử dụng được công cụ Tiny Bootloader, cách duy nhất là phải thiết kế một mạch Tiny Bootloader khác tương thích với mạch ứng dụng đó. Điều này là bất hợp lí và mang lại nhiều trở ngại không mong muốn.

http://i65.photobucket.com/albums/h237/pvn_ntc/hinh5.jpg

Hình 5: Sơ đồ nguyên lí mạch test Tiny Bootloader. Phần mạch giao tiếp với Tiny Bootloader được tô màu xám.

ntc
25-05-2006, 07:40 PM
5. Các thao tác khi sử dụng Tiny Bootloader

Ta đã có được mạch Tiny Bootloader và mạch ứng dụng tương thích với Tiny Bootloader. Từ “tương thích” được nhấn mạnh lại ở đây. Để nạp được chương trình vào vi điều khiển PIC dùng Tiny Bootloader, ta tiến hành lần lượt các bước sau:

- Bước 1: Sử dụng mạch nạp để nạp chương trình Tiny Bootloader vào vi điều khiển trước.

- Bước 2: Kết nối Tiny Bootloader với máy tính và kết nối cáp dữ liệu của Tiny Bootloader với mạch ứng dụng. Cấp nguồn cho mạch ứng dụng.

- Bước 3: Khởi động chương trình tinybld19 và thiết lập các thông số cần thiết.

- Bước 4: Đưa chương trình mới vào vi điều khiển.

Sau đây là quá trình tiến hành cụ thể của các bước trên.

Bước 1:

Ta cần một mạch nạp cho vi điều khiển PIC16F877A (đây là vi điều khiển sử dụng cho mạch test) và nạp chương trình Tiny Bootloader vào vi điều khiển trước. Chương trình Tiny Bootloader được cung cấp trong phần mềm “tinybld191”, cụ thể là chương trình "…\TINYBLD\picsource\16f\tinybld16F.asm" và chỉnh sửa lại các thông số cần thiết trong chương trình. Sau đây là chương trình được chỉnh sửa (phần chỉnh sửa là phần đươc tô màu đỏ):Cần chú ý là trong mạch ứng dụng sử dụng loại thạch anh có tần số bao nhiêu thì phải điều chỉnh một cách thích hợp trong firmware của Tiny Bootloader. Ngoài ra có thể tìm thấy các firmware tương ứng cho ứng dụng trên các phương tiện thông tin khác, đặc biệt là Internet.

;================================================= ========

; Chương trình Firmware viết cho vi điều khiển PIC16F877A khi sử
; dụng Tiny Bootloader
; Chương trình này được này trước vào vi điều khiển PIC để sử dụng phần mềm
; tinybld cho việc cập nhật chương trình mới; Tốc độ baud 19200, sử dụng thạch anh 20 MHz.

;================================================= ========
radix DECLIST P=16F877A
; change also: Configure->SelectDevice from Mplab
include <p16f877a.inc>
xtal EQU 20000000
; you may also want to change: _HS_OSC _XT_OSCbaud EQU 19200
; standard TinyBld baud rates: 115200 or 19200
; The above 3 lines can be changed and buid a bootloader for the
; desired frequency (and PIC type)
;************************************************* *******************
; Tiny Bootloader 16FxxxA series Size=100words
; claudiu.chiculita@ugal.ro
; http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
;************************************************* *******************

#include "E:\MPLAB\tinybld19\picsource\icdpictypes.inc"
#include "E:\MPLAB\tinybld19\picsource\spbrgselect.inc"
#include "E:\MPLAB\tinybld19\picsource\bankswitch.inc"
; #include "../icdpictypes.inc"
;takes care of: #include "p16fxxxA.inc", ; max_flash, IdTypePIC
; #include "../spbrgselect.inc"
; #include "../bankswitch.inc"

#define first_address max_flash-100
; 100 word in size

; __CONFIG _HS_OSC & _CP_OFF & _WDT_OFF & _BODEN_ON&_PWRTE_ON & _LVP_OFF & _DEBUG_OFF

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
errorlevel 1, -305
; suppress warning msg that takes f as default

cblock 0x20
buffer:80
endc
cblock 0x78
crccontor
i
cnt1
cnt2
cnt3
flag
endc

SendL macro car
movlw car
movwf TXREG
endm

;0000000000000000000000000 RESET 00000000000000000000000000
ORG 0x0000
PAGESEL IntrareBootloader
GOTO IntrareBootloader ;view with TabSize=4

;&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&
;---------------------- Bootloader ----------------------;

;PC_flash: C1h AddrH AddrL nr ...(DataLo DataHi)... crc
;PIC_response: id K K

ORG first_address
nop
nop
nop
nop
org first_address+4

IntrareBootloader ;init serial port
clrf STATUS
bsf STATUS,RP0 ;BANK1_
movlw b'00100100'
movwf TXSTA
movlw spbrg_value
movwf SPBRG
BANK0_
movlw b'10010000'
movwf RCSTA ;wait for computer
call Receive
sublw 0xC1 ;Expect C1
skpz
goto way_to_exit
SendL IdTypePIC ;PIC type
;SendL IdSoftVer ;firmware ver x

MainLoop
clrf STATUS ;bank0
SendL 'K'

mainl
clrf crc
call Receive ;H
bsf STATUS,RP1 ;bank2
movwf EEADRH
movwf flag ;used to detect if is eeprom
call Receive ;L
bsf STATUS,RP1 ;bank2
movwf EEADR
call Receive ;count
movwf contor
movwf i
incf i
movlw buffer-1
movwf FSRrcvoct
call Receive
incf FSR
movwf INDF
decfsz i
goto rcvoct
movf crc,f ;check checksum
skpz
goto ziieroare ;write
bsf STATUS,RP1 ;bank switch 0->2
movlw buffer
movwf FSR

writeloop ; write 2 bytes = 1 instruction
clrwdt
movf INDF,w
movwf EEDATA
incf FSR
movf INDF,w
movwf EEDATH
incf FSR
BANK3_ ;bank 2->3
bcf EECON1,EEPGD
btfss flag,6 ;is eeprom (or flash)
bsf EECON1,EEPGD
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR
nop
nop

waitwre
btfsc EECON1,WR ;for eeprom writes (wait to finish write)
goto waitwre
bcf EECON1,WREN
BANK2_ ;bank2
incf EEADR ; does not cross zones
btfss flag,6 ; if writing to EEPROM, skip first counter dec.
decf contor
decfsz contor
goto writeloop
goto MainLoop

ziieroare
SendL 'N'
goto mainl

Receive
clrf STATUS
movlw xtal/1000000+1 ; for 20MHz => 11 => 1second
movwf cnt1r

pt2
clrf nt2r

pt3
clrf cnt3

rptc
btfss PIR1,RCIF ;test RX
goto $+4
movf RCREG,w ;return in W
addwf crc,f ;compute checksum
return
clrwdt
decfsz cnt3
goto rptc
decfsz cnt2
goto rpt3
decfsz cnt1
goto rpt2 ;timeout:

way_to_exit ;exit in all other cases; must be BANK0/1
;BANK0_
bcf RCSTA,SPEN ; deactivate UART
goto first_address
;************************************************* ************
; After reset; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.

END
;================================================= =============

Chỉ chỉnh sửa các thông số ở phần đầu chương trình, sau đó biên dịch và nạp vào vi điều khiển.

[U]Bước 2: chỉ cần kết nối đúng thứ tự các chân giữa Tiny Bootloader và mạch ứng dụng.

Bước 3: khởi động chương trình Tiny Bootloader và thiết lập các thông số cần thiết (tốc độ baud, cổng giao tiếp, …)

http://i65.photobucket.com/albums/h237/pvn_ntc/hinh6.jpg

Hình 6: Nhấn nút “Brouse” để đưa file hex cần nạp vào chương trình.

http://i65.photobucket.com/albums/h237/pvn_ntc/hinh7.jpg

Hình 7: Vào thẻ “Option”, chon chế độ “Reset PIC using RTS line”.

Bước 4: Nhấn nủt “Write Flash” để nạp chương trình đã chọn vào vi điều khiển

http://i65.photobucket.com/albums/h237/pvn_ntc/hinh8.jpg

Hình 8: Bấm nút “Write Flash” để đưa chương trình vào vi điều khiển.

ntc
25-05-2006, 08:06 PM
Mệt quá. Tí viết tiếp.

ntc
25-05-2006, 10:23 PM
6. Một số vấn đề thường gặp khi sử dụng Tiny Bootloader

Trên đây là các bước để test mạch Tiny Bootloader, đồng thời cũng là các thao tác cơ bản được tiến hành một cách tuần tự khi sử dụng Tiny Bootloader. Tuy nhiên khi sử dụng Tiny Bootloader trong thực tế, ta thường gặp phải một số vấn đề như sau:

6.1. Chương trình ứng dụng tương thích với firmware của Tiny Bootloader.
Như ta đã biết, chương trình firmware có nhiệm vụ tạo một thời gian chờ tín hiệu cập nhật chương trình mới từ máy tính. Nếu phát hiện được tín hiệu trên, chương trình firmware sẽ làm nhiệm vụ nhận chương trình mới và ghi vào bộ nhớ chương trình, sau đó thực thi chương trình mới đó. Nếu sau khoảng thời gian chờ mà không phát hiện được tín hiệu trên, firmware Tiny Bootloader sẽ điều khiển bộ đếm chương trình nhảy đến vị trí chương trình cũ và bắt đầu thực thi chương trình cũ.

Để làm được cả hai công việc đó, firmware Tiny Bootloader sẽ phải thực hiện một số thay đổi lên chương trình ứng dụng. Hình sau cho phép hình dung rõ hơn những thao tác đó.

http://i65.photobucket.com/albums/h237/pvn_ntc/bootloader.png

Hình 9: Các thao tác làm thay đổi cấu trúc chương trình ứng dụng của Tiny Bootloader.
Firmware Tiny Bootloader sẽ cắt 4 word đầu tiên (từ địa chỉ 0000h đến 0003h) ở phần reset vector của chương trình ứng dụng và đặt nó ở ngay trên chương trình chính của Tiny Bootloader, thay vào đó là 4 word đầu tiên của firmware Tiny Bootloader để điều khiển bộ đếm chương trình nhảy đến vị trí chương trình chính của firmware Tiny Bootloader.

Với việc cấu trúc lại chương trình như vậy, quá trình thực thi chương trình của vi điều khiển sẽ có chút thay đổi như trên hình vẽ. Khi được reset, bộ đếm chương trình của PIC sẽ nhảy đến vị trí của reset vector, ở đó các lệnh của firmware sẽ điều khiển bộ đếm chương trình nhảy đến vị trí có chương trình chính của firmware Tiny Bootloader. Khi chương trình này được thực thi xong, bộ đếm chương trình sẽ quay trở về vị trí 4 word đầu tiên của chương trình ứng dụng được đặt ngay trên chương trình chính của firmware Tiny Bootloader.

Ngoại trừ các word đầu tiên đặt vào phần reset vector, phần còn lại của chương trình firmware được đặt ở phần cuối cùng của bộ nhớ chương trình. Khi muốn thực thi chương trình ứng dụng, bộ đếm chương trình phải nhảy trở lại vị trí của chương trình ứng dụng. Thông thường, thao tác nhảy này được thực hiện bởi lệnh “GOTO”. Tuy nhiên trong trường hợp này, khoảng cách nhảy là rất xa và vượt ra khỏi tầm nhảy của lệnh “GOTO”, cho nên việc cập nhật các bit cao cho bộ đếm chương trình phải được thực hiện (firmware Tiny Bootloader không thực hiện công việc này cho người sử dụng).

Bộ đếm chương trình có dung lượng 13 bit và giá trị bộ đếm được chứa trong các thanh ghi PCH và PCL. Thanh ghi PCL chứa 8 bit thấp cho phép các thao tác trực tiếp như các thanh ghi bình thường. Thanh ghi PCH chứa 5 bit cao còn lại, việc thao tác trên thanh ghi này phải thao tác thông qua thanh ghi PCLATH.

Như vậy, dựa vào vị trí bắt đầu của chương trình chính, ta phải đưa các giá trị thích hợp vào thanh ghi PCLATH để điều khiển bộ đếm chương trình nhảy đến vị trí đó. Thao tác này phải được thực hiện trong 4 word đầu tiên của chương trình ứng dụng.

Sau đây là ví dụ cụ thể. Phần thay đổi so với các chương trình bình thường được tô màu đỏ trong đoạn chương trình sau:

;================================================= ====================
; Một ví dụ cho việc thay đổi chương trình ứng dụng phù hợp với
; Firmware của Tiny Bootloader
processor 16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;================================================= ====================
;--------------------------------------
; Khai báo biến
;--------------------------------------
delay_reg1 EQU 0x20
delay_reg2 EQU 0x21
;================================================= ====================
; CHƯƠNG TRÌNH CHÍNH
ORG 0x000
CLRF STATUS ; đây là phần xử lí thanh ghi PCLATH
MOVLW 0x00
MOVWF PCLATH
GOTO start
;================================================= ====================
start
BCF STATUS,RP1
BSF STATUS,RP0

CLRF TRISB

BCF STATUS,RP0

loop
MOVLW 0x8F
MOVWF PORTB
CALL delay100ms
CALL delay100ms

CLRF PORTB
CALL delay100ms
CALL delay100ms
GOTO loop
;================================================= ====================
; CHƯƠNG TRÌNH CON
;================================================= ====================
;------------------------------------------------------------------------
; Chương trình con tạo thời gian delay 100ms
;------------------------------------------------------------------------

delay100ms
MOVLW 0x83
MOVWF delay_reg1
MOVLW 0xFF
MOVWF delay_reg2loop1
DECFSZ delay_reg1
GOTO loop2
GOTO exitloop2
DECFSZ delay_reg2
GOTO loop2
GOTO loop1

exit
RETURN

END
;================================================= ====================

Ví dụ trên khá đơn giản. Do chương trình ứng dụng rất ngắn và đơn giản, nên ta có thể dễ dàng xác định được vị trí bắt đầu của chương trình chính nằm ở trong các word đầu của bộ nhớ chương trình, cho nên thao tác đối với thanh ghi PCLATH trong trường hợp này sẽ là xóa thanh ghi PCLATH.

Trong các ứng dụng phức tạp hơn không cho phép ta đặt chương trình chính ở các word đầu (ví dụ như chương trình ngắt quá dài, bảng dữ liệu đặt ở phần đầu chương trình quá lớn, các chương trình con được viết trước chương trình chính khá dài, …), cần xác định lại vị trí bắt đầu của chương trình chính để có các thao tác xử lí thích hợp với thanh ghi PCLATH.

6.2. Tính ổn định của Tiny Bootloader

Nếu thiết kế và test mạch theo các trình tự đã nêu, ta có thể thấy được việc nạp chương trình thành công như trong hình 6.

Việc sử dụng chức năng “Reset In Program” cho phép cải thiện đáng kể tính ổn định của Tiny Bootloader so với khi reset bằng tay.

Tuy nhỉên trong quá trình tiến hành có thể gặp nhiều trở ngại, chẳng hạn như tính thiếu ổn định của Tiny Bootloader (lúc dectect được PIC, lúc không,…). Điều này đặt ra yêu cầu cải thiện thêm tính ổn định của Tiny Bootloader. Ta có thể khắc phục bằng 2 phương pháp:

- Tăng thời gian “SearchDelay” của chương trình trên máy tính (thẻ Option):

http://i65.photobucket.com/albums/h237/pvn_ntc/HINH10.jpg

Hình 10: Tăng thời gian “SearchDelay”

- Tăng thời gian delay trong firmware: sửa lệnh “movlw xtal/2000000+1” của firmware Tiny Bootloader nạp vào PIC thành lệnh “movlw xtal/1000000+1”.

ntc
25-05-2006, 10:26 PM
7. Kết luận

Tiny bootloader là chương trình dùng để giao tiếp với máy tính được nạp trước vào vi điều khiển nhằm mục đích cập nhật chương trình mới cho vi điều khiển từ máy tính.

Mạch Tiny bootloader được mạch dùng để giao tiếp giữa máy tính và vi điều khiển thông qua chuẩn giao tiếp RS232.

Ngoài tác dụng nạp chương trình mới cho vi điều khiển, mạch Tiny bootloader và chương trình của Tiny bootloader còn có thể được thay đổi và chỉnh sửa dễ dàng để sử dụng cho mục đích giao tiếp giữa máy tính và vi điều khiển PIC thông qua chuẩn giao tiếp RS232.

Tiny bootloader là một trong số những công cụ mà nhà sản xuất hỗ trợ cho việc thay đổi chương trình trong vi điều khiển PIC mà không cần tháo vi điều khiển ra khỏi mạch. Điều này giúp ta linh động hơn và có nhiều hơn sự lựa chọn trong việc xây dựng và nâng cấp các ứng dụng sử dụng vi điều khiển PIC, đặc biệt là khi việc tháo hoặc gắn vi điều khiển ra khỏi mạch gặp nhiều khó khăn (chẳng hạn như khi ta sử dụng vi điều khiển PIC loại chip dán).

Ưu điểm:

- Thời gian nạp rất nhanh, thông thường là chưa đầy 1 giây.

- Hỗ trợ nhiều dòng PIC.

- Rất thuận tiện cho người sử dụng.

- Độ tin cậy cao.

- Tính an toàn được cải thiện đáng kể, tránh tình trạng làm chết vi điều khiển trong quá trình thao tác với các mạch nạp.

- Tiết kiệm được nhiều thời gian và công sức, không phải thời gian tháo ráp vi điều khiển để nạp.

Hạn chế:

Có thể thấy là sự thuận lợi mà Tiny Bootloader mạng lại là rất rõ ràng. Tuy nhiên việc sử dụng Tiny Bootloader làm cho bộ nhớ chương trình tổn hao một số lượng word nhất định (trong trường hợp này là 100 K word). Mặc dù số lượng word tổn hao là nhỏ nhưng đôi khi mang lại một số điểm bất cập (chương trình ứng dụng viết cho vi điều khiển không cho phép dư ra 100 word chẳng hạn). Do đó tùy theo yêu cầu thực tế mà có sự lựa chọn phù hợp các phương pháp nạp chương trình trực tiếp trên mạch cho vi điều khiển.
Một số trinh biên dịch chưa tương thích với tiny bootloader.

Bên cạnh đó cần chú ý đến sự tương thích giữa mạch Tiny Bootloader và mạch ứng dụng để tránh gặp phải những trở ngại không đáng có.

ntc
25-05-2006, 10:34 PM
Đây là bản báo cáo đầy đủ.

Trong đó có thêm phần của anh Nam về kết quả thử nghiệm Tiny Bootloader đối với dsPIC.

Các hình vẽ không đạt yêu cầu, mình sẽ chỉnh sửa lại sau.

Một điểm cần lưu ý, là phiên bản này không còn phù hợp vói các chuẩn mới của PICVIETNAM. Các vấn đề đưa ra ở đây chỉ còn mang tính chất tham khảo, về sơ đồ nguyên lí, nguyên lí hoạt động về cách sử dụng Tiny Bootloader, ... và không khuyến khích việc làm tiny bootloader theo sơ đồ mạch in trong báo cáo.

PVN Tiny Bootloader Version 3.0 hiện tại đã hoàn tất, và sẽ sớm thông báo kết quả trên diễn đàn. Đây sẽ là sản phẩm PVN Tiny Bootloader chính thức.

ntc
27-05-2006, 11:05 AM
6.3. Một số lỗi thường gặp khi sử dụng Tiny Bootloader

Trong quá trình sử dụng có thể đôi lúc Tiny Bootloader hoạt động không thực sự suôn sẻ mà gặp phải một số trục trặc. Các trường hợp này đều được chương trình trên máy tính báo lỗi. Sau đây là một số lỗi thường gặp và cách khắc phục:

- Lỗi không tìm thấy PIC: đây là một lỗi rất hay gặp. Trong trường hợp này, ta cần kiểm tra lại tất cả các bước tiến hành với Tiny Bootloader để phát hiện lỗi và khăc phục (kết nối phần cứng có đúng chưa, chương trình Firmware đã được nạp hay chưa, các thông số thiết lập tương thích hay chưa,…)

http://i65.photobucket.com/albums/h237/pvn_ntc/HINH11.jpg

Hình 11: Lỗi “không tìm thấy PIC”.

- Lỗi do chương trình nạp vào PIC không tương thích với vi điều khiển đang sử dụng. Trong trường hợp này cần kiểm tra lại chương trình cần nạp vào PIC có thực sự tương thich chưa. Ví dụ, không thể lấy chương trình viết cho PIC18F để nạp vào PIC16F.

http://i65.photobucket.com/albums/h237/pvn_ntc/HINH12.jpg

Hình 12: Lỗi do chương trình đưa vào PIC không tương thích.

- Lỗi do thanh ghi PCLATH chưa được xử lí phù hợp trong chương trình ứng dụng: trong trường hợp này cần thêm vào các lệnh xử lí thanh ghi PCLATH vào chương trình ứng dụng đã được trình bày ở trên. Khi gặp lỗi này, chương trình ứng dụng vẫn được nạp vào vi điều khiển, nhưng quá trình thực thi sẽ không đúng.

http://i65.photobucket.com/albums/h237/pvn_ntc/HINH13_sua.jpg

Hình 13: Lỗi do thanh ghi PCLATH chưa được xử lí thích hợp.

daihang86
06-09-2006, 08:53 PM
Các bác cho em hỏi "Chương trình Tiny Bootloader" cho con PIC18F458, có bác nào có cho em phát. Tìm search không ra.

namqn
07-09-2006, 12:03 AM
Các bác cho em hỏi "Chương trình Tiny Bootloader" cho con PIC18F458, có bác nào có cho em phát. Tìm search không ra.
Download bản mới nhất của Tiny Bootloader (1.91) tại đây:
http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm

Giải nén nó vào một thư mục nào đó, trong thư mục con picsource/other/nnq là source của chương trình bootloader cho các PIC18F đã được tôi gửi cho Claudiu Chiculita (tác giả yêu cầu tôi gửi để giúp cho các người dùng khác). Tôi tin là bạn có đủ khả năng để chỉnh lại một số thiết lập như hướng dẫn trong tập tin nguồn để có thể dịch được một bootloader cho PIC18F458.

Chú ý: các tập tin nguồn của tôi gửi cho Claudiu có lỗi định dạng khi mở trên Windows, xem post #20 để lấy các tập tin nguồn gốc.

Thân,

killserver
14-09-2006, 01:44 PM
Bác Namqn à, tôi dùng MPLAB dịch file TinyB18F.asm trong tinybootloader lấy trên web trên cho con 18F2320 mà ko được.
Tôi đã include 2 file .inc và file 18f2320.lkr vào mà nó vẫn báo lỗi sau:
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F2320 "TinyB18F.asm" /l"TinyB18F.lst" /e"TinyB18F.err" /o"TinyB18F.o"
Warning[218] C:\NEW FOLDER\TINYB18F.ASM 1 : Expected DEC, OCT, HEX. Will use HEX
Error[129] C:\NEW FOLDER\TINYB18F.ASM 2 : Expected (END)
Halting build on first failure as requested.

Tôi đã edit phần config để lấy file hex cho 18f2320 rồi. Mong bác sửa giúp.
Many thanks

namqn
14-09-2006, 06:25 PM
Bác Namqn à, tôi dùng MPLAB dịch file TinyB18F.asm trong tinybootloader lấy trên web trên cho con 18F2320 mà ko được.
Tôi đã include 2 file .inc và file 18f2320.lkr vào mà nó vẫn báo lỗi sau:
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F2320 "TinyB18F.asm" /l"TinyB18F.lst" /e"TinyB18F.err" /o"TinyB18F.o"
Warning[218] C:\NEW FOLDER\TINYB18F.ASM 1 : Expected DEC, OCT, HEX. Will use HEX
Error[129] C:\NEW FOLDER\TINYB18F.ASM 2 : Expected (END)
Halting build on first failure as requested.

Tôi đã edit phần config để lấy file hex cho 18f2320 rồi. Mong bác sửa giúp.
Many thanks
Tôi không biết là ở dòng 1 và 2 trong tập tin nguồn .asm của bạn là những gì, nhưng có vẻ nó đã được thêm vào.

Bạn xem thử hình chụp cửa sổ MPLAB của tôi khi build Tiny Bootloader cho PIC18F dưới đây, tôi không hề phải thêm các tập tin .inc và .lkr.

Thân,

killserver
15-09-2006, 10:11 AM
Bác Nam à, tôi về làm đúng như bác mà nó có thèm Success đâu.
Tôi gửi kèm file TinyB18F.asm tôi configure cho 18F2320 nhé. Nó vẫn báo lỗi thế.
Tôi đã select device là 18F2320 luôn rồi.
Many thanks!
@admin: sao forum rất khó login, nhập đúng user và pass rồi, chào rồi mà vẫn phải login lại, đang post bài cũng phải login lại.

namqn
15-09-2006, 07:16 PM
Tôi đã phát hiện lỗi về định dạng của các tập tin nguồn cho các PIC18F mà tôi đã gửi cho Claudiu, chúng hiện được định dạng là Unix, UTF-8. Các tập tin này không thể hiển thị đúng khi mở trong Notepad.

Đó là lý do khiến MPLAB không thể biên dịch các tập tin nguồn này, như bạn killserver vừa phản hồi, mặc dù MPLAB vẫn hiển thị đúng trong cửa sổ soạn thảo. Rất cám ơn bạn về thông tin này, vì tôi đã không kiểm tra các tập tin đó trong phiên bản mới nhất của Tiny Bootloader trên trang web của Claudiu.

Nếu các bạn phát hiện một lỗi biên dịch tương tự, hãy kiểm tra bằng cách mở tập tin nguồn đó trong Notepad, nếu chúng không được xuống dòng đúng thì có nghĩa là tập tin nguồn đó bị lỗi định dạng.

Tôi gửi kèm theo các tập tin nguồn gốc trong máy của tôi.

Thân,

killserver
16-09-2006, 10:10 AM
Cảm ơn bác, tôi cũng thấy như thế, khi mở bằng notepad thì nó đầy cả 1 trang mà ko có xuống dòng but lại ko nghĩ ra.

escapevn
12-10-2006, 10:41 AM
Bác Namqn à, bác có thể share cho em file hex bootloader của con dsPIC30F4011, UART1, PLLx8 và PLLx16 không.
Thanks bác trước.

namqn: bạn chưa cho biết tần số đưa vào PLL (thạch anh ngoài hay internal RC?).

escapevn
16-10-2006, 03:44 PM
Sorry bác Namqn, bác edit vào bài của em nên em ko thấy bài mới ko vào.
Em dùng thạch anh ngoài 7.3728MHz bác ạ.
Thanks bác nhiều :D

namqn
19-10-2006, 01:44 AM
Chip dùng cấu hình sau:

config __FOSC, CSW_FSCM_OFF & XT_PLL8
hay config __FOSC, CSW_FSCM_OFF & XT_PLL16
config __FWDT, WDT_OFF
config __FBORPOR, MCLR_EN & PBOR_OFF
config __FGS, CODE_PROT_OFF


Chip dùng main I/O của UART1. Bạn đặt thêm các bit cấu hình khác cho thích hợp với chương trình ứng dụng. Bạn thử xem có chạy tốt không vì tôi không có thạch anh 7.3728 MHz để thử.

Thân,

escapevn
19-10-2006, 10:12 AM
Thanks bác Nam, em sẽ về thử và reply lại cho bác. :D

anhquangngai
02-11-2006, 08:39 PM
trong chương trình MPLAP thì sửa lại là:
CLRF STATUS ; đây là phần xử lí thanh ghi PCLATH
MOVLW 0x00
MOVWF PCLATH

còn trong CCS thì làm như thế nào thì mới nạp đc cho PIC qua Botloaders??

namqn
03-11-2006, 09:14 PM
Các trình biên dịch cấp cao thường tự động thêm vào những lệnh xử lý thanh ghi PCLATH cho dòng PIC cấp thấp, do đó không cần phải làm gì để có thể sử dụng với bootloader, trừ việc phải giới hạn không gian bộ nhớ của chương trình ứng dụng (không được dùng 100 word nằm phía cuối vùng Flash).

Thân,

AtomBomb
28-03-2007, 12:23 AM
Xin được chỉ giáo. Có bác nào có chương trình tini bootloader cho con PIC16F628 không, chỉ cho mình biết với.

namqn
28-03-2007, 12:36 AM
Xin được chỉ giáo. Có bác nào có chương trình tini bootloader cho con PIC16F628 không, chỉ cho mình biết với.
PIC16F628 có khả năng chạy bootloader không? (Nó có thể tự ghi vào bộ nhớ Flash hay không?).

Thân,

falleaf
28-03-2007, 09:29 AM
Kiểm tra chức năng Self-Programming của con chip, con nào có chức năng này thì mới dùng được bootloader.

Chúc vui

ngohaibac
11-04-2007, 08:17 AM
Chính ơi, bài số 5 của cậu có một chút vấn đề nhỏ nhưng quan trọng, cậu viết nhầm cả 2 chân cuối là TX hết rùi.

Thứ tự các chân là:

MCLR
VDD
VSS
TX
RX


Chúc Chính ở HN thật là vui vẻ nhé. Mặc dù trời hơi lạnh tí :D.

ntc
11-04-2007, 12:27 PM
Ờ.

Sửa lại rồi.

:)

ngohaibac
12-04-2007, 10:49 PM
Chính ơi, cho mình hỏi về cái này nhé.

Chân RTS (chân 7 RS232) bình thường khi không có giap tiếp truyền nhận thì nó ở mức thấp -12V tức là chân MCLR ở mức cao khoảng 5,24V -> IC hoạt động bình thường. Khi có quá trình truyền dữ liệu thì chân này sẽ lên mức cao +12V -> làm chân MCLR xuống mức thấp xấp xỉ = GND.

Như vậy trong mạch ứng dụng của mình không thể nối cố định chân MCLR với chân 1 của mạch Tiny Bootloader được vì khi giao tiếp UART thì IC không hoạt động.

Thứ nữa, MCLR mình nối với VDD qua một con trở 10k để giảm áp đặt lên chân MCLR. Nếu mà nối thẳng chân 1 của mạch Tiny với chân này thì mình e rằng con trở này chẳng có tác dụng gì. => Nếu mắc thêm trở khoảng 10k vào:

MCLR |----|====|-----------| chân 1 của mạch tiny.

thì nó lại chẳng có tác dụng reset gì cả.

Mình nghĩ rằng trong mạch ứng dụng của mình nên có khóa gạt tức là khi nạp thì chuyển MCLR nối với chân 1 của mạch tiny, còn hoạt động bình thường thì nối với VDD.

Nhưng mà mình làm thế thì nó cũng chẳng detect được chip gì cả. Toàn phải bỏ chân 1 bỏ trôi, và nhấn nút Reset làm thủ công thôi.

Chúc các bạn thành công.

namqn
13-04-2007, 07:44 PM
Chân RTS (chân 7 RS232) bình thường khi không có giap tiếp truyền nhận thì nó ở mức thấp -12V tức là chân MCLR ở mức cao khoảng 5,24V -> IC hoạt động bình thường. Khi có quá trình truyền dữ liệu thì chân này sẽ lên mức cao +12V -> làm chân MCLR xuống mức thấp xấp xỉ = GND.
Truyền nhận dữ liệu từ Tiny Bootloader hay từ phần mềm khác? Nếu từ Tiny thì không đúng, còn nếu từ phần mềm tự viết thì lý do gì phải thay đổi trạng thái của RTS?

Như vậy trong mạch ứng dụng của mình không thể nối cố định chân MCLR với chân 1 của mạch Tiny Bootloader được vì khi giao tiếp UART thì IC không hoạt động.
Giải quyết được rắc rối trên thì không cần phải quan tâm đến chỗ này nữa.

Thứ nữa, MCLR mình nối với VDD qua một con trở 10k để giảm áp đặt lên chân MCLR. Nếu mà nối thẳng chân 1 của mạch Tiny với chân này thì mình e rằng con trở này chẳng có tác dụng gì. => Nếu mắc thêm trở khoảng 10k vào:

MCLR |----|====|-----------| chân 1 của mạch tiny.

thì nó lại chẳng có tác dụng reset gì cả.
Đương nhiên rồi, mắc thêm 10k nữa thì thành cầu phân áp, áp đặt vào MCLR nằm khoảng giữa so với điện áp hai đầu. Nếu chân 1 của mạch Tiny là 0V thì MCLR là ~ 2.5 V => làm sao reset được PIC.

Thân,

LeDuc
01-07-2007, 07:04 AM
Bác NTC ơi, có thể post cho mọi người xem phiên bản 3.0 mà các anh đã cải tiến ko? cái hình phiên bản 2.0 anh post nhỏ xiu hà nhìn ko biết chân nào nối với chân nào cả...
thanks....
á cho em hỏi .. trong CCS phải viết thế nào mới nạp được vậy??
Thanks

namqn
01-07-2007, 09:23 PM
...
á cho em hỏi .. trong CCS phải viết thế nào mới nạp được vậy??
Thanks
Trong CCS cứ viết như bình thường, không cần thay đổi gì cả.

Thân,

WaveAlpha
06-07-2007, 11:47 AM
http://i65.photobucket.com/albums/h237/pvn_ntc/hinh5.jpg

Hình 5: Sơ đồ nguyên lí mạch test Tiny Bootloader. Phần mạch giao tiếp với Tiny Bootloader được tô màu xám.

Anh ơi hình nhỏ và mờ quá, e ko thấy được gì. E là người mới học vi điều khiển nên ko biết nhiều đâu , a post hình lại rỏ hơn đi. Thanks

ntc
06-07-2007, 05:45 PM
Bạn download cái bản report đầy đủ ở bài viết số 13, trong đó hình rõ hơn.

hungtdh_bk
22-09-2007, 12:10 PM
Bac Nam a! Bác có thể cho em filmware Tinybootloader bằng MPLAB (ASM)
con Dspic4012 được ko ạ?
-Em dùng thạch anh ngoai 8MHZ (XT_PLL4),kết nối qua UART.

namqn
22-09-2007, 10:59 PM
Tôi dùng Main IO của UART, tốc độ baud là 38400 bps, các từ cấu hình như dưới đây (thạch anh 8 MHz theo yêu cầu của bạn):
config __FOSC, CSW_FSCM_OFF & XT_PLL4
config __FWDT, WDT_OFF
config __FBORPOR, MCLR_EN & PBOR_OFF
config __FGS, CODE_PROT_OFF
Bạn thử với phần cứng của bạn xem code có chạy đúng hay không nhé.

Thân,

nguyenhuutan
11-04-2008, 10:27 PM
Các anh làm ơn tìm giúp em bootloader cho PIC18F4520 với. Em đã down file của pác nqnam về rồi mà không thấy hỗ trợ 18F4520. Em cài đặt như trong source file cho 18F452 rồi nạp cho con 4520 được không? Cảm ơn.

nguyenhuutan
11-04-2008, 10:56 PM
Em đã tìm thấy trong file TinyB18F32 có hỗ trợ 18F4520. Em đã chỉnh sửa như sau nhưng khi biên dịch vẫn bị lỗi.
************************************************** ****************
Lỗi như sau: (ai biết chỉ giùm em với)
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F4520 "TinyB18F32.asm" /l"TinyB18F32.lst" /e"TinyB18F32.err"
Warning[218] C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM 1 : Expected DEC, OCT, HEX. Will use HEX
Error[129] C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM 2 : Expected (END)
Error[173] C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM 2 : Source file path exceeds 62 characters (C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM)
Halting build on first failure as requested.
BUILD FAILED: Fri Apr 11 21:53:26 2008
************************************************** ****************************
Chương trình đã chỉnh sửa:

radix DEC
LIST P=18F4520 ; change also: Configure->Select Device from MPLAB
; For 2455, 2550, 4455, and 4550: 4 MHz quartz / 1 * 24 / 4 = 24 MHz
xtal EQU 12000000 ; you may want to change: _XT_OSC_1H _HS_OSC_1H _HSPLL_OSC_1H
baud EQU 19200 ; standard TinyBld baud rates: 115200 or 19200
; The above 3 lines can be changed and built a bootloader for the desired frequency (and PIC type)

;************************************************* *******************
; Tiny Bootloader 18F series Size=100words
; claudiu.chiculita@ugal.ro
; http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
; Modified by Nam Nguyen-Quang for testing different PIC18Fs with tinybldWin.exe v1.9
; namqn@yahoo.com
;************************************************* *******************

; This source file is for PIC18F2420, 2520, 4420, 4520, 2455, 2550, 4455, and 4550

; Copy these include files to your project directory (i.e. they are in the same
; directory with your .asm source file), if necessary

#include "icdpictypes.inc" ; Takes care of: #include "p18fxxx.inc", max_flash, IdTypePIC
#include "spbrgselect.inc" ; RoundResult and baud_rate

#define first_address max_flash-200 ;100 words

; For different PICs, uncomment the appropriate lines of CONFIG directives
; as indicated, and comment out all the other lines, if necessary
; For example, the following configuration is for PIC18F4550, with 4 MHz crystal
; You could find the symbol names for the chip in its include file
; (in the Microchip\MPASM Suite directory)


;----- CONFIG1L Options -----
; For 18F2455, 2550, 4455, and 4550
; CONFIG PLLDIV = 1, CPUDIV = OSC3_PLL4, USBDIV = 2


;----- CONFIG1H Options -----
; For 18F2455, 2550, 4455, and 4550
; CONFIG FOSC = HSPLL_HS, FCMEM = OFF, IESO = OFF

; For 18F2420, 2520, 4420, and 4520
; CONFIG OSC = HS, FCMEN = OFF, IESO = OFF
CONFIG OSC = INTIO67, FCMEN = OFF, IESO = OFF ; Use internal oscilator, xtal = 8000000


;----- CONFIG2L Options -----
; For 18F2455, 2550, 4455, and 4550
; CONFIG PWRT = ON, BOR = OFF, BORV = 21, VREGEN = OFF

; For 18F2420, and 4420
; CONFIG PWRT = ON, BOREN = ON, BORV = 27

; For 18F2520, and 4520
CONFIG PWRT = ON, BOREN = ON, BORV = 28


;----- CONFIG2H Options -----
; For all of the chips associated with this source file
CONFIG WDT = OFF, WDTPS = 128


;----- CONFIG3H Options -----
; For 18F2455, 2550, 4455, and 4550
; CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = OFF

; For 18F2420, and 4420
; CONFIG MCLRE = ON, PBADEN = OFF, CCP2MX = PORTC

; For 18F2520, and 4520
CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC

;----- CONFIG4L Options -----
; For 18F2455, 2550, 4455, and 4550
; CONFIG STVREN = ON, LVP = OFF, ICPRT = OFF, DEBUG = OFF, XINST = OFF

; For 18F2420, and 4420
; CONFIG STVREN = ON, LVP = OFF, ENHCPU = OFF, DEBUG = OFF

; For 18F2520, and 4520
CONFIG STVREN = ON, LVP = OFF, DEBUG = OFF, XINST = OFF

;----------------------------- PROGRAM ---------------------------------
cblock 0
crc
i
cnt1
cnt2
cnt3
counter_hi
counter_lo
flag
endc
cblock 10
buffer:64
dummy4crc
endc

SendL macro car
movlw car
movwf TXREG
endm

;0000000000000000000000000 RESET 00000000000000000000000000

ORG 0x0000
GOTO IntrareBootloader

;view with TabSize=4
;&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&
;---------------------- Bootloader ----------------------
;PC_flash: C1h U H L x ... <64 bytes> ... crc
;PC_eeprom: C1h 40h EEADR EEDATA 0 crc
;PC_cfg C1h U OR 80h H L 1 byte crc
;PIC_response: type `K`

ORG first_address ;space to deposit first 4 instr. of user prog.
nop
nop
nop
nop
org first_address+8
IntrareBootloader
;init IntOSC, added by Nam Nguyen-Quang
movlw 0x70
movwf OSCCON
; the above 2 lines should be commented out for designs not using the internal oscilator
; or for the chips without the internal oscilator
;init serial port
movlw b'00100100'
movwf TXSTA
movlw spbrg_value
movwf SPBRG
movlw b'10010000'
movwf RCSTA
;wait for computer
rcall Receive
sublw 0xC1 ;Expect C1h
bnz way_to_exit
SendL IdTypePIC ;send PIC type
MainLoop
SendL 'K' ; "-Everything OK, ready and waiting."
mainl
clrf crc
rcall Receive ;Upper
movwf TBLPTRU
movwf flag ;(for EEPROM and CFG cases)
rcall Receive ;Hi
movwf TBLPTRH
movwf EEADR ;(for EEPROM case)
rcall Receive ;Lo
movwf TBLPTRL
movwf EEDATA ;(for EEPROM case)

rcall Receive ;count
movwf i
incf i
lfsr FSR0, (buffer-1)
rcvoct ;read 64+1 bytes
movwf TABLAT ;prepare for cfg; => store byte before crc
rcall Receive
movwf PREINC0
decfsz i
bra rcvoct

tstfsz crc ;check crc
bra ziieroare
btfss flag,6 ;is EEPROM data?
bra noeeprom
movlw b'00000100' ;Setup eeprom
rcall Write
bra waitwre
noeeprom
btfss flag,7 ;is CFG data?
bra noconfig
tblwt* ;write TABLAT(byte before crc) to TBLPTR***
movlw b'11000100' ;Setup cfg
rcall Write
bra waitwre
noconfig
;write
eraseloop
movlw b'10010100' ; Setup erase
rcall Write
TBLRD*- ; point to adr-1

writebigloop
movlw 2 ; 2groups
movwf counter_hi
lfsr FSR0,buffer
writesloop
movlw 32 ; 32bytes = 16instr
movwf counter_lo
writebyte
movf POSTINC0,w ; put 1 byte
movwf TABLAT
tblwt+*
decfsz counter_lo
bra writebyte

movlw b'10000100' ; Setup writes
rcall Write
decfsz counter_hi
bra writesloop
waitwre
;btfsc EECON1,WR ;for eeprom writes (wait to finish write)
;bra waitwre ;no need: round trip time with PC bigger than 4ms

bcf EECON1,WREN ;disable writes
bra MainLoop

ziieroare ;CRC failed
SendL 'N'
bra mainl

;******** procedures ******************

Write
movwf EECON1
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR ;WRITE
nop
;nop
return


Receive
movlw xtal/2000000+1 ; for 20MHz => 11 => 1second delay
; for 18F2xxx chips, this should be xtal/1000000+1
movwf cnt1
rpt2
clrf cnt2
rpt3
clrf cnt3
rptc
btfss PIR1,RCIF ;test RX
bra notrcv
movf RCREG,w ;return read data in W
addwf crc,f ;compute crc
return
notrcv
decfsz cnt3
bra rptc
decfsz cnt2
bra rpt3
decfsz cnt1
bra rpt2
;timeout:
way_to_exit
bcf RCSTA, SPEN ; deactivate UART
bra first_address
;************************************************* ************
; After reset
; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.

END

namqn
11-04-2008, 11:57 PM
Đường dẫn tuyệt đối của tập tin nguồn quá dài (hơn 62 ký tự), bạn nên giải nén tập tin nguồn vào một thư mục con nào đó của thư mục gốc chẳng hạn.

Bạn cũng chú ý đọc post #20 của luồng này nữa, vì các tập tin nguồn tôi đã gửi cho Claudiu đã bị định dạng lại theo format của Unix.

Thân,

bigtitan
14-05-2008, 01:28 AM
Mấy anh cho em hỏi, quy trình tạo 1 file HEX mới nạp vào làm bootloader cho bất kì con PIC nào là sao(nghĩa là mỗi con 1 file riêng , như 4331, 4431, 877, hay con nào đó,chứ ko phải với mọi nhe, đừng hiểu nhầm em). Em thấy cứ phiền bác nam config dùm ngại quá,lủi này đó ko có net sao nhờ được.

namqn
14-05-2008, 08:09 AM
Mấy anh cho em hỏi, quy trình tạo 1 file HEX mới nạp vào làm bootloader cho bất kì con PIC nào là sao(nghĩa là mỗi con 1 file riêng , như 4331, 4431, 877, hay con nào đó,chứ ko phải với mọi nhe, đừng hiểu nhầm em). Em thấy cứ phiền bác nam config dùm ngại quá,lủi này đó ko có net sao nhờ được.
Tôi copy phần chú thích mà tôi đã viết trong các source code của Tiny Bootloader cho PIC18F dưới đây.
radix DEC
LIST P=18F4331 ; change also: Configure->Select Device from MPLAB
xtal EQU 20000000 ; you may want to change: _XT_OSC_1H _HS_OSC_1H _HSPLL_OSC_1H
baud EQU 56000 ; standard TinyBld baud rates: 115200 or 19200
; The above 3 lines can be changed and built a bootloader for the desired frequency (and PIC type)

;************************************************* *******************
; Tiny Bootloader 18F series Size=100words
; claudiu.chiculita@ugal.ro
; http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
; Modified by Nam Nguyen-Quang for testing different PIC18Fs with tinybldWin.exe v1.9
; namqn@yahoo.com
;************************************************* *******************

; This source file is for PIC18F242, 252, 442, 452, 248, 258, 448, 458, 2220, 2221, 2320,
; 2321, 4220, 4221, 4320, 4321, 1220, 1320, 2331, 2431, 4331, 4431, 2439, 2539, 4439, and 4539

; Copy these include files to your project directory (i.e. they are in the same
; directory with your .asm source file), if necessary

#include "icdpictypes.inc" ; Takes care of: #include "p18fxxx.inc", max_flash, IdTypePIC
#include "spbrgselect.inc" ; RoundResult and baud_rate

#define first_address max_flash-200 ;100 words

; For different PICs, uncomment the appropriate lines of CONFIG directives
; as indicated, and comment out all the other lines, if necessary
; For example, the following configuration is for PIC18F4580, with 8 MHz crystal
; You could find the symbol names for the chip in its include file
; (in the Microchip\MPASM Suite directory)
Chú thích của Claudiu như sau: 3 dòng trên có thể được thay đổi để dịch bootloader cho cấu hình (và loại PIC) mong muốn. Ngay sau directive LIST có chú thích rằng bạn cũng phải thay đổi loại PIC bằng lệnh menu Configure->Select Device của MPLAB IDE.

Nếu bạn không hiểu phần hướng dẫn của tôi, tôi xin dịch thành tiếng Việt như sau:
Với các loại PIC khác nhau, bỏ chú thích những dòng tương ứng của các directive CONFIG như đã chỉ ra, và chú thích tất cả những dòng khác, nếu cần thiết. Ví dụ, cấu hình sau là cho PIC18F4580, với thạch anh 8 MHz. Bạn có thể tìm thấy các ký hiệu cho chip trong tập tin include của nó (nằm trong thư mục Microchip\MPASM Suite).

Tôi đã chỉ ra tập tin này áp dụng cho những PIC18F nào. Tất cả những từ cấu hình cần thiết đều đã được tôi làm mẫu, việc của bạn là thay thế những mẫu này với cấu hình phù hợp cho yêu cầu của bạn, sau đó biên dịch project. Chỉ cần copy tập tin nguồn .asm cùng với 2 tập tin "icdpictypes.inc" và "spbrgselect.inc" (chú ý, tôi có bổ sung các chip vào trong tập tin "icdpictypes.inc", do đó bạn nên dùng tập tin do tôi cung cấp).

Thân,

Hard
15-05-2008, 04:35 PM
Hi,
BootLoader (BLD) là một phần rất hay của lập trình VDK, tui luôn tìm cách sử dụng BLD khi sử dụng với một loại VDK nào. Xem trong topic này, tui thấy các bác trao đổi về việc sử dụng BLD có sẵn, tui thì lại không thích như vậy vì thực sự tui muốn hiểu chi tiết hơn về nó và viết một cái BLD cho riêng mình để có thể làm chủ nó, làm cho nó hoạt động theo ý mình.
Tui tiếp cận với PIC bằng CCS vì vậy đọc mã nguồn bằng ASM tui không hiểu, nếu muốn hiểu thì phải mất thời gian nghiên cứu tập lệnh, cái này không có lợi đối với tui. Tui cũng đã đọc mã nguồn BLD của CCS (trong mục Example) nhưng cũng không hiểu lắm và cách nó làm cũng khác với tinyBLD mà các bác đang trao đổi ở đây mà tui thích kiểu tinyBLD này, thấy nó tiện hơn. Vì vậy tui muốn dùng CCS để viết riêng một BLD theo kiểu tinyBLD mà các bác đang trao đổi. Tuy nhiên, để BLD có thể giao tiếp với phần mềm truyền file hex trên PC thì phải biết giao thức của nó. Đấy chính là cái tui cần hỏi các bác về cách thức mà BLD và phần mềm trên PC như thế nào? Để bắt tay thì nó phải truyền cái gì? cái gì được truyền đầu tiên và tiếp theo là cái gì cho đến khi quá trình kết thúc? Phải nắm được những thông tin đó thì mới có thể lập trình được.
Một câu hỏi nữa cần các bác trả lời là: tại sao tui viết
#org 0x1F00
void main(void)
{
// code for testing here
}
Nhưng khi biên dịch thì kết quả trong file Hex là mất khá nhiều byte (khoảng vài chục) mới đến lệnh nhảy tới địa chỉ của hàm main() (tức 0x1F00). Không phải như chúng ta nghĩ là hàm main là hàm được thực thi đầu tiên nên chỉ mất 4 byte (từ 0000 đến 0003) cho lệnh nhảy. Nếu như vậy thì có cách nào để cho CCS biên dịch ra lệnh đầu tiên là lệnh nhảy đến hàm main lập tức không? Nếu không thực hiện được điều này thì không thể viết BLD kiểu tinyBLD được.
Tui mới tìm hiểu về CCS và PIC nên cũng chưa nắm rõ để giải quyết vấn đề này. Rất mong các cao thủ bỏ chút công sức giúp đỡ. Cảm ơn các bác đã đọc bài.
Thân ái.

namqn
15-05-2008, 06:49 PM
Trước hết, bạn định dùng phần mềm trên host PC của Tiny Bootloader hay sẽ tự viết? Giao thức của Tiny Bootloader khá đơn giản, có thể thấy ngay trong phần chú thích của các mã nguồn firmware.

Về chuyện hàm main() được thực thi sau vài chục chu kỳ lệnh, đây là chuyện bình thường, vì các trình biên dịch cấp cao thường thiết lập một số điều kiện làm việc (ngăn xếp, biến được khởi tạo, ...) trước khi nhảy đến chương trình chính, trong giai đoạn startup. Nếu dùng C18 chẳng hạn, bạn có thể đọc mã nguồn startup. Với CCS C thì tôi không rõ bạn có thể can thiệp gì vào giai đoạn startup hay không, đơn giản vì tôi không dùng nó.

Thân,

Hard
16-05-2008, 09:04 AM
Hi,
Đúng là ngôn ngữ bậc cao thì nó có làm một vài thao tác như vậy, nên tui muốn hỏi các bác là có cách nào để loại bỏ cái này không? Tui đã dùng cách như sau (xem đoạn code bên dưới) nhưng không được, khi biên dịch nó báo lỗi tùm lum, invalid org
#org 0x0003, 0x1f00 {} // Báo cho trình biên dich biết là khi biên dịch không được bỏ bất kỳ mã lệnh nào vào vùng địa chỉ này.
Nếu các bác để ý thì đó là phần bộ nhớ chương trình từ địa chỉ ngắt đầu tiên đến địa chỉ đầu tiên của BLD. Tuy nhiên, CCS chỉ cho phép bỏ trống từ địa chỉ 0x0033 trở đi thôi, xâm phạm vào vùng địa chỉ ngắt hay reset là không được. Có cách nào để giải quyết vấn đề này không nhỉ?
Theo cách làm của CCS thì BLD của nó đặt ở phần đầu bộ nhớ chương trình nên các chương trình ứng dụng mình viết để nạp bằng BLD phải khai báo lại:
#build(reset = BLD_END + 1, interrupt = BLD_END + 5)
Tui không thích kiểu như vậy vì nếu làm thế thì không thể viết chương trình ứng dụng trên các trình biên dịch khác để dùng BLD được (vì địa chỉ reset luôn là 0x0000).
Có ai có cao kiến nào không?

Thân ái.

window
24-09-2008, 10:05 AM
Cám ơn các bạn rất nhiều !

dang tuan
02-10-2009, 05:44 PM
ban ơi chỉ cho mình cách dịch lại firmware bootloader với sao mình dịch lại nó báo lỗi tùm num cả nhỉ
cám ơn nhiều

elvies
15-06-2012, 12:44 AM
Xin thầy Nam vui lòng xem qua phần lỗi này dùm em, em thường sử dụng ccsc để lập trình nên em không nắm rõ được các thanh ghi và nội dung đoạn code trong file TinyB18F của thầy, tuy nhiên em cũng đọc được các hướng dẫn ngay trong đoạn code và làm theo, tuy nhiên khi biên dịch thì lại xảy ra lỗi bên dưới. Em đã copy toàn bộ các file header vào cùng thư mục của file ".asm". Em cũng đã kiểm tra file nguồn đúng chuẩn windows(em sử dụng folder thầy gửi sau này và đã mở bằng notepad).
----------------------------------------------------------------------
Debug build of project `D:\picsource\new\Pic18f4520_20MHz_38400bps.mcp' started.
Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
Preprocessor symbol `__DEBUG' is defined.
Thu Jun 14 23:11:23 2012
----------------------------------------------------------------------
Make: The target "D:\picsource\other\TinyB18F\TinyB18F.o" is out of date.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F4520 "TinyB18F.asm" /l"TinyB18F.lst" /e"TinyB18F.err" /d__DEBUG=1
Error[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 35 : CONFIG Directive Error: (setting "OSCSError[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 57 : CONFIG Directive Error: (setting "BORError[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 80 : CONFIG Directive Error: (setting "CCP2MUXError[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 99 : CONFIG Directive Error: (setting "STVRHalting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `D:\picsource\new\Pic18f4520_20MHz_38400bps.mcp' failed.
Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
Preprocessor symbol `__DEBUG' is defined.
Thu Jun 14 23:11:25 2012
----------------------------------------------------------------------
BUILD FAILED
-------------------------------------------------------------------------------------


----------------------------------------
Đoạn config sửa lại file TinyB18F.asm của thầy như sau:
----------------------------------------
radix DEC
LIST P=18F4520
xtal EQU 20000000
baud EQU 38400

#include "D:\picsource\new\icdpictypes.inc"
#include "D:\picsource\new\spbrgselect.inc"
#include "D:\picsource\new\bankswitch.inc"
#define first_address max_flash-200 ;100 words

CONFIG OSC = HS, OSCS = OFF
CONFIG PWRT = ON, BOR = ON, BORV = 27
CONFIG WDT = OFF, WDTPS = 128
CONFIG CCP2MUX = OFF
CONFIG STVR = ON, LVP = OFF, DEBUG = OFF
--------------------------------------------------------------

HaiAu2005
31-10-2012, 12:03 PM
Chắc đây là sản phẩm đầu tay của PICVN 6 năm về trước? Thời gian làm mạch này và thử đến khi có thể bắt đầu sử dụng được thì hết bao nhiêu thời gian? Mạch này có thể dùng breadboard được vì người làm nghiệp dư chắc khó có thể chế được mạch in, các linh kiện gồm:

1. IC MAX232x1
2. Tụ 1 uFx4
3. RS-232 connector x 1
4. J1 6-pin connector x 1
5. Breadboard x 1
6. RS-232 cable x 1
7. Một số dây nối và vài thứ lặt vặt khác

Giá mua linh kiện trên ở Australia (có thể ở Mỹ rẻ hơn chút) ước chừng khoảng 30-40 AUD (gần tương đương 30-40 USD) đắt bằng 1 nửa giá mua PICKIT3 + bo mạch thử (khoảng 70 AUD). Còn mua thêm mạch thử nữa thì chắc sẽ mất khoảng 60-70 AUD, làm hỏng thì mất thêm chừng ít tiền nữa, vị chi cho project này hết chừng 100 AUD (gần tương đương 100 USD).

>> Ở nước ngoài nhiều khi đi mua đồ về tự làm có khi đắt hơn là mua đồ làm sẵn. Nhưng có nhiều người thích DIY nên người ta vẫn mua đồ về tự làm lấy như là một hobby và như vậy có đất sống cho các cửa hàng hobby shops là vậy. Còn ở VN dường như ngược lại, ngoài chuyện hobby và thích làm thì mua linh kiện về làm giá rẻ hơn mua đồ làm sẵn thì phải???

HaiAu2005
31-10-2012, 01:27 PM
Tôi nhìn thấy cái programmer sau trên eBay giá chưa đầy 14 AUD:

http://i1005.photobucket.com/albums/af179/geniusartgallery/BI/01TO50/BI00049-2.jpg

http://www.ebay.co.uk/itm/PIC-USB-Microcontroller-Development-Programmer-ICSP-k150-USB-ICSP-Cable-Screws-/150847177167?_trksid=p2045573.m2042&_trkparms=aid%3D111000%26algo%3DREC.CURRENT%26ao%3 D1%26asc%3D27%26meid%3D3122121162092699835%26pid%3 D100033%26prg%3D1011%26rk%3D1%26sd%3D150847177167% 26

So với tiny bootloader chắc cái này khác nhiều.

Nếu không muốn làm mạch nạp, có lẽ mua cái này và mua một con PIC, một breadboard và vài linh kiện cũng như motor và IC điều khiển mô tơ nữa là có công cụ học PIC một cách nhanh chóng.