![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| 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 |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
PIC Bang chủ
|
Nút bấm
Các bạn vừa biết khái niệm ngắt, và đã biết chương trình ngắt được viết như thế nào. Vậy bây giờ chúng ta chuyển đến bài tiếp theo về nút bấm.
Công dụng của nút bấm Nút bấm là một hình thức ra lệnh phổ biến nhất trên thế giới. Bạn gọi một cái thang máy, bạn bấm nút, bạn kêu cửa thì bấm chuông, bạn bật đèn thì bấm nút công tắc, và tôi đang ngồi viết cho bạn bằng cách bấm nút bàn phím... Như vậy, bạn đã biết công dụng của cái nút bấm. Bây giờ các bạn sẽ học cách làm một cái nút bấm!!! Điều này có vẻ buồn cười, nhưng với vi điều khiển, và máy tính, khả năng xử lý các lệnh rất đa đạng. Bạn có thể bấm cùng một nút, nhưng lệnh sẽ khác nhau ở mỗi thời điểm, và mỗi trạng thái. Ví dụ, như bạn nhấp chuột máy tính, thực ra cũng là bạn nhấp nút bấm, nhưng bạn thấy rõ ràng rằng, ở những vị trí di chuyển chuột khác nhau, nút bấm của chuột sẽ đưa ra các mệnh lệnh khác nhau cho máy tính thực hiện. Một số trạng thái nút bấm thông dụng Trạng thái nút bấm ra lệnh tức thời, đó là khi bạn bấm nút, lập tức mọi trạng thái phải được kiểm tra và chương trình dừng lại để thực hiện lệnh từ nút bấm của bạn. Có nghĩa là bạn ra lệnh tại thời điểm bấm nút, và máy hiểu rằng bạn đã bấm nút. Còn việc xử lý thế nào thì hồi sau phân giải. Trạng thái chờ nút bấm, đó là chương trình bạn đang chạy, đến một giai đoạn nào đó, nó cần phải có sự ra lệnh của bạn bằng nút bấm, và chương trình chờ bạn bấm nút để chạy tiếp, hoặc bắt đầu một công việc nào đó sau khi chờ. Nhắc lại thao tác bấm nút một chút, cái nút của bạn đang ở trên cao, bạn bấm nó xuống thì nó sẽ có một giai đoạn nút bấm đi xuống, khi chạm vào mạch điện, hiển nhiên bạn muốn hay không muốn thì cũng phải có một khoảng thời gian bạn giữ cho nút bấm tiếp xúc với mạch điện, sau đó là giai đoạn bạn thả nút bấm ra. ![]() Theo dõi hình trên, chúng ta thấy. Khi bấm nút, có quá trình đi xuống của nút bấm, và quá trình đi lên của nút bấm. Nhưng thực tế, đối với mạch điện trong nút bấm, nó chỉ có thể nhận được trạng thái tiếp xúc hoặc không tiếp xúc, nên tín hiệu nhận được sẽ như đường màu xanh trong hình dưới. Chúng ta chỉ quan tâm đến trạng thái của đường màu xanh trong các ứng dụng của nút bấm. Vậy, trạng thái nút bấm lại có thêm 3 trạng thái nữa là trạng thái bấm xuống, trạng thái giữ nút bấm, và trạng thái nhả nút bấm lên. Kết hợp với 2 trạng thái điều khiển trên, chúng ta có 6 trạng thái phổ biến của nút bấm. Các bạn lưu ý rằng, chúng ta có 6 trạng thái chứ không phải chỉ có 4 trạng thái, vì thực ra rất nhiều người cho rằng chỉ có 4 trạng thái khi cho rằng trạng thái chờ trong lúc giữ nút bấm không phải là trạng thái phổ biến. Nhưng nếu các bạn đã từng dùng điện thoại di động thì các bạn thấy số người dùng trạng thái chờ của nút bấm cũng không phải là con số nhỏ. Ở đây, tôi muốn tán dóc một chút rằng, khi các bạn làm việc về khoa học kỹ thuật, và đến một khi các bạn khó có thể tìm ra đường hướng suy nghĩ để giải quyết một vấn đề khoa học kỹ thuật, hãy tìm mối liên hệ với nó trong khoa học xã hội. Chính vì vậy, các bạn thường thấy tôi hay đưa ra những ví dụ xã hội để minh hoạ cho vấn đề kỹ thuật cần được giải quyết. Tôi sẽ dành việc ứng dụng từng trạng thái nút bấm phổ biến trong các ứng dụng cho các bạn, còn ở đây, tôi chỉ muốn nhân bài học này để tiếp tục bài học về interrupt mà chúng ta đã bỏ dở trước đó. Vậy chúng ta chỉ xét trạng thái khi bấm nút, lập tức lệnh sẽ được thực hiện, tức trạng thái tức thời của nút bấm. Các bạn hãy làm bài tập thực hành, thực hiện một mạch điện tử như hình sau để chuẩn bị cho bài học của chúng ta. ![]() Trong mạch điện này, chúng ta thấy có một vài điểm đặc biệt khi có 1 nút bấm nối giữa chân của PIC và nguồn, còn các nút bấm khác lại nối chân của PIC với đất. Giữa nguồn và đất luôn có một điện trở 10K. Vì sao chúng ta phải nối mạch điện như vậy? Chúng ta tạm dừng bài học về nút bấm ở đây và theo dõi bài học cơ bản về điện tử tiếp theo.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
|
|
|
|
#2 |
|
PIC Bang chủ
|
Điện tử cơ bản
Điện tử cơ bản Giới thiệu Đây là phần rất cơ bản về điện tử, mà các bạn khi bắt đầu làm việc với vi điều khiển cần phải nắm rõ. Như đã nói, PIC tạo ra dòng điện khoảng 20mA và điện áp khoảng 5V, tương tự như vậy, nếu dòng ngõ vào quá cao so với 20mA và điện áp ngõ vào quá cao so với 5V, thì PIC sẽ bị hư. Vì vậy, bài học này trang bị cho các bạn một số khái niệm cơ bản về điện tử, để các bạn có thể nắm vững nguyên lý thiết kế mạch và tính toán các giá trị điện trở cần thiết. Đáng lẽ bài học này cần được thực hiện ngay từ đầu, tuy nhiên, tôi cho rằng bài tập đèn LED quá đơn giản, các bạn chưa biết gì cũng có thể hiểu được, nhưng nay, nếu như các bạn mới học về điện tử và vi điều khiển không được trang bị kiến thức cơ bản này, có thể làm cho các bạn lúng túng vì một số điểm không được làm rõ trong mạch điện tử. Hiện tượng trôi điện áp Các bạn xem hình sau: ![]() Chúng ta cho rằng ngõ vào của PIC, cũng giống như ngõ vào của một linh kiện điện tử thông dụng là 74HC04. Thay vì vẽ một cái chân PIC, thì chúng tôi vẽ hình một con 74HC04 cho nó đơn giản, và để các bạn dễ hình dung. Nếu để một con PIC lên một hình thì quá phức tạp hình ảnh, và lại không cần thiết. Hơn nữa, bài viết này được tham khảo từ tài liệu Very Basic Circuits của Encoder, và trong trang web này, người ta sử dụng 74HC04 để làm thí dụ, tôi tôn trọng ví dụ này nên khi viết lại bài viết cũng sử dụng 74HC04 giống như họ. Các bạn thấy, nếu như nút bấm được nhấn xuống, thì ngõ vào của 74HC04 hay PIC được nối với Mass. Như vậy, lúc đó PIC có thể đọc giá trị 0. Tuy nhiên, nếu nút nhấn được thả ra, chúng ta thấy rằng ngõ vào của PIC chẳng được nối với một linh kiện nào, vậy là điện áp ở chân của PIC sẽ trôi nổi không xác định được. Nếu không may mắn, điện áp trôi nổi này rơi vào vùng logic 0, rồi lại nhảy sang vùng logic 1... thì các bạn thấy rõ ràng chúng ta không thể xác định được nút bấm có được bấm hay không?!! Vì vậy, để đảm bảo, nếu khi không bấm nút, PIC phải có điện áp tham khảo là 5V, sau khi bấm nút thì điện áp sẽ giảm xuống 0V, như vậy mức logic mới thật rõ ràng, không thể để trôi nổi như hình trên. Vậy chúng ta có hình dưới đây ![]()
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
|
|
|
|
#3 |
|
PIC Bang chủ
|
Điện tử cơ bản (tt)
Công dụng của điện trở kéo lên
Các bạn lại thấy, nếu bây giờ không bấm nút, thì điện áp ngõ vào của PIC sẽ là 5V. Nhưng nếu bấm nút một cái, rõ ràng chúng ta gây ra ngắn mạch khi nối trực tiếp từ nguồn xuống đất. Chính vì vậy, chúng ta phải đưa thêm vào một điện trở giữa đất, nút bấm và nguồn. Có hai vấn đề đặt ra, đó là điện trở sẽ đặt ở đâu, và giá trị của nó bằng bao nhiêu. Chúng ta xem hình này: ![]() Các bạn sẽ bực mình ngay rằng, đúng là thằng ngốc mới đặt điện trở như thế này, bởi vì nếu đặt điện trở như vậy, dù bạn có bấm nút hay không bấm nút thì điện áp ngõ vào vẫn luôn luôn là 5V, vậy nút bấm trở nên vô nghĩa. Thế thì chỉ còn một cách đặt điện trở như hình tiếp theo đây: ![]() Vậy vấn đề còn lại là giá trị điện trở bẳng bao nhiêu? Các bạn sẽ thấy, PIC hoạt động ở 20mA và 5V trên các chân. Vì vậy, khi chưa bấm nút, nguồn 5V được nối với điện trở và đi vào chân của PIC. Nếu như trong một trường hợp nào đó chân của PIC chuyển từ chế độ input sang output, thì vấn đề xảy ra là dòng trên chân phải đảm bảo nhỏ hơn hoặc bằng 20mA. Như vậy, trong thiết kế trên, chúng ta xem dòng tại chân PIC nếu PIC đặt ở 0V là I = U/R = 5V/ 10000 Ohm = 5mA Như vậy, thiết kế này đảm bảo cho hoạt động của PIC được an toàn. Khi đóng nút bấm dòng 5mA này sẽ đi xuống đất, và chân của PIC được nối với đất. Các bạn xem tiếp hình sau: ![]() Trường hợp này, nút bấm được nối với nguồn 5V. Điện trở nối giữa chân của PIC với đất sẽ không làm cho PIC có hiện tượng trôi nổi điện áp, và khi đóng nút bấm thì dòng vẫn ở 5mA. Tổng kết: Qua bài học này, các bạn đã hiểu được cơ bản về khái niệm điện trở kéo lên (trường hợp điện trở nối với nguồn), và điện trở kéo xuống (trường hợp điện trở nối với đất). Giá trị điện trở được đặt ở đây nhằm loại bỏ hiện tượng ngắn mạch, và đảm bảo ngõ vào của PIC khoảng 20mA. Khi an toàn, cần thiết kế sao cho ngõ vào nhỏ.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
|
|
|
|
#4 |
|
Đệ tử 1 túi
Tham gia ngày: Mar 2008
Bài gửi: 15
: |
Nhận được sự yêu thương tạo nên cuộc sống tốt hơn.
__________________
Prettys Girls from your town |
|
|
|
|
|
#5 |
|
Đệ tử 2 túi
Tham gia ngày: Jun 2005
Bài gửi: 33
: |
Re: Nút bấm
Phần nút bấm falleaf có thể cho 1 đoạn code mẫu (dùng cho mạch trong bài này) được không?
__________________
I'm beginner.
|
|
|
|
|
|
#6 |
|
PIC Bang chủ
|
Hiện nay tôi đang khá bận, cho nên các câu hỏi của các bạn, tôi sẽ trả lời sau.
Tôi đề nghị rằng chúng ta nên tạo ra một cái luồng khác để thảo luận, và đặt các câu hỏi ngắn. Phần bài viết này có lẽ các bạn chỉ nên nói về những cái đúng, cái sai trong bài viết của tôi, và những đề nghị cải tiến, hoặc những sản phẩm minh họa mà các bạn đã thực hiện từ bài viết này. Bởi vì những bài viết này, sau này sẽ được tổng hợp thành tutorial về PIC, và tôi không đủ khả năng một mình viết hết tất cả các vấn đề như các cuốn sách lớn khác, nên tôi rất cần sự bổ sung sản phẩm thực tế của các bạn, sẽ làm cho cuốn sách có giá trị hơn. Vì nếu không, các bạn cứ đặt câu hỏi ở đây, luồng này sẽ rất dài, và gây khó khăn cho người đọc. Chân thành cảm ơn. Falleaf.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
|
|
|
|
#7 |
|
Đệ tử 1 túi
Tham gia ngày: Jun 2005
Bài gửi: 19
: |
OK, ủng hộ bác falleaf.
|
|
|
|
|
|
#8 |
|
PIC Bang chủ
|
Hướng dẫn về thanh ghi W
Thanh ghi W Trong bài này, chúng ta nói đôi nét về thanh ghi W để các bạn nắm rõ hơn phương thức hoạt động của PIC. Khái niệm thanh ghi W: Thanh ghi W là thanh ghi làm việc (Working register), và hầu hết mọi lệnh của PIC đều liên quan đến thanh ghi W này, lấy thí dụ như ADDLW (cộng một số vào giá trị đã có trong thanh ghi W), SUBWF (trừ giá trị của thanh ghi W cho một thanh ghi khác), XORLW (lấy XOR của một số và thanh ghi W)... Và các bạn để ý rằng, tổng số lệnh có thể tương tác với thanh ghi W là 23/35 lệnh, gần như chiếm toàn bộ tập lệnh của PIC. Vậy chúng ta ghi nhận điều thứ nhất, khi PIC làm việc, gần như luôn luôn tương tác với thanh ghi W. Điều thứ hai, các bạn nhìn trong bản đồ bộ nhớ dữ liệu của PIC, các bạn sẽ thấy là thanh ghi W là thanh ghi không có mặt ở bất kỳ băng nào của bộ nhớ dữ liệu, trong khi đó thanh ghi STATUS có mặt ở cả 4 băng. Các bạn lại thấy một điều rằng, thanh ghi W và thanh ghi STATUS có thể được truy nhật từ tất cả các băng, và từ bất kỳ đâu trong chương trình, và vì vậy chúng trở thành những thanh ghi toàn cục nhất. Điểm khác biệt giữa chúng ra sao? Đâu là sự khác biệt giữa thanh ghi W và các thanh ghi khác? Điểm thứ ba, trong tập lệnh của PIC, không có lệnh nào cho phép tương tác trực tiếp giữa một thanh ghi trong bộ nhớ dữ liệu dùng chung với một giá trị thêm vào, mà đều phải thông qua thanh ghi W. Như vậy, thanh ghi W là cầu nối của hầu hết các phép toán được thực hiện trên các thanh ghi nằm trong bộ nhớ dữ liệu. Như vậy, thanh ghi W vô cùng quan trọng trong hoạt động của PIC. Nhắc lại kiến trúc Harvard và Von Newmann: Hình sau sẽ gợi lại cho các bạn nhớ về kiến trúc Harvard và Von Newmann, trong đó các bạn luôn nhớ rằng có sự phân biệt giữa bộ nhớ dữ liệu và bộ nhớ chương trình. Các bạn thấy rằng bus bộ nhớ chương trình của PIC midrange chỉ có 14 bit. ![]() Với đặc điểm này, chúng ta sẽ phân tích vì sao cần phải có thanh ghi W, và sau đó chúng ta sẽ phân tích tất cả các hoạt động của thanh ghi W trong một chương trình viết bằng PIC, nếu có thể. Những gì còn lại, chúng ta sẽ xem trong bài tập lệnh của PIC midrange. Vì sao cần phải có thanh ghi W? Bạn sẽ làm thế nào để tính phép toán sau: lấy giá trị a của thanh ghi A cộng với giá trị b của thanh ghi B và đặt vào thanh ghi A? Một giới hạn của tập lệnh PIC là không cho phép cộng hai thanh ghi và đặt vào một thanh ghi khác. Do đó, các bạn sẽ phải thực hiện thao tác sau: Chuyển giá trị b từ thanh ghi B vào thanh ghi W, sau đó lấy giá trị của thanh ghi W (lúc này là b) cộng với giá trị a ở thanh ghi A, sau đó gán lại vào thanh ghi A. Đoạn code được thực hiện như sau: Code:
MOVF B, W ; chuyển giá trị của thanh ghi B vào thanh ghi W ADDWF A, F ; cộng giá trị của thanh ghi A với giá trị b của thanh ghi W và gán lại vào A Code:
BANKSEL B MOVF B, W BANKSEL A ADDWF A, F Đoạn chương trình này cũng minh hoạ luôn cho việc thanh ghi W là một thanh ghi toàn cục, khi chúng ta thao tác với thanh ghi B ở một băng bấ kỳ, nhưng khi chuyển giá trị b từ thanh ghi B vào thanh ghi W rồi, thì chúng ta không cần quan tâm rằng giá trị đó nằm ở đâu, chỉ cần chuyển về băng chứa thanh ghi A thì lệnh cộng sẽ được thực hiện một cách dễ dàng. Một thí dụ khác về lệnh cộng, nhưng không phải là cộng giá trị nằm trong 2 thanh ghi, mà là cộng giá trị a của thanh ghi A với một số k cho trước nào đó, giả sử k = 5 và lưu vào thanh ghi A. Chúng ta thấy rằng, hoàn toàn trong tập lệnh không có lệnh cộng trực tiếp một thanh ghi với một số, mà chỉ có lệnh cộng một số với thanh ghi W. Như vậy chúng ta phải thực hiện thao tác sau: chuyển giá trị a từ thanh ghi A vào thanh ghi W, cộng thanh ghi W với hằng số k = 5, sau đó chuyển giá trị mới của thanh ghi W trở lại thanh ghi A. Điều này được thực hiện như sau: Code:
MOVF A, W ADDLW d'5' MOVWF A Chúng ta thấy rõ ràng rằng, một dòng lệnh của PIC midrange, được mô tả bằng 14 bit. Điều này có nghĩa là, khi thực hiện một lệnh cộng, không thể nào dòng lệnh đó vừa lưu địa chỉ của thanh ghi A, vừa lưu giá trị 8 bit của hằng số k được, vì một thanh ghi trong dòng PIC midrange cần tối thiếu 7 bit để biểu diễn địa chỉ thanh ghi, và một hằng số chiếm 8 bit. Nó vượt quá con số 14 bit cho phép để mã hoá lệnh. Chính vì vậy, không thể thực hiện lệnh cộng trực tiếp từ một thanh ghi với một số được. Quay lại thí dụ ở trên, chúng ta cũng thấy rằng không thể thực hiện việc cộng hai thanh ghi với nhau, nếu như cần lưu 2 địa chỉ thanh ghi, chúng ta sẽ mất 14 bit, và như vậy không có các bit mã hoá mô tả lệnh cần thực hiện là gì. Đây chính là điểm khác biệt giữa tập lệnh RISC và tập lệnh CISC. Tập lệnh CISC có thể thực hiện lệnh phức, vì nó có thể tạo ra một lệnh dài 8 bit, 16 bit, 24 bit... và là bộ số của 8 bit. Do đó, nếu cần cộng 2 thanh ghi 8 bit, nó hoàn toàn có thể tạo ra một lệnh dài 24 bit, trong đó 8 bit dùng để mã hoá, 8 bit dành cho địa chỉ của thanh ghi thứ nhất, 8 bit dành cho địa chỉ cua thanh ghi thứ 2. Trong khi đó, tập lệnh CISC là tập lệnh rút gọn, cho dù nó là lệnh gì, nó cũng luôn luôn chỉ có 14 bit (đối với PIC midrange). Thanh ghi W giống như một thanh ghi mặc định duy nhất, vì vậy, khi thực hiện, bộ xử lý trung tâm có thể giải mã được nếu lệnh đó có cần thao tác với thanh ghi W hay không, mà không cần lưu địa chỉ của thanh ghi W bên trong đoạn mã lệnh. Chúng ta xem hình dưới đây để biết được bộ xử lý logic hoạt động như thế nào với thanh ghi W. ![]() Vậy chúng ta đã thấy rõ sự cần thiết của thanh ghi W, bởi vì chúng ta cần có một thanh ghi tạm cho các công việc tính toán, và chúng ta cần mã hoá thanh ghi mà không cần tốn quá nhiều bit, vậy thì thanh ghi W vừa là thanh ghi có tính toàn cục, vừa là thanh ghi tạm, vừa là thanh ghi không cần thiết nhiều bit để biểu diễn địa chỉ. Các bạn đã biết vì sao chúng ta phải cần thanh ghi W, bây giờ chúng ta cần biết thanh ghi W hoạt động như thế nào trong các chương trình của PIC.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? thay đổi nội dung bởi: falleaf, 11-07-2005 lúc 10:59 PM. |
|
|
|
|
|
#9 |
|
PIC Bang chủ
|
Kỹ thuật bảng
Các bạn có thể download bài viết Kỹ Thuật Bảng tại đây để tham khảo và hiểu kỹ thuật thiết lập một bảng dữ liệu với PIC.
Kỹ thuật bảng này dùng trong một số trường hợp như: Xuất dữ liệu ra LCD, ra màn hình, sử dụng làm các vector điều khiển vận tốc gia tốc động cơ, dùng để điều khiển động cơ bước...
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
|
|
![]() |
|
|