1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Mỗi ngày một .......bài PIC

Thảo luận trong 'Hướng dẫn học Vi Điều Khiển' bắt đầu bởi kid_pro, 4 Tháng năm 2011.

  1. kid_pro Member

    Số bài viết: 208
    Đã được thích: 6
    Điểm thành tích: 18
    Hiện nay khi đi vào ứng dụng vi điều khiển Pic trong thực tế chúng ta ít khi sử dụng 89, mình vẫn công nhận bắt đầu bằng 89 để nghiên cứu vi điều khiển là một điều tuyệt vời nhưng ứng dụng nó thì thật khó. mình đã chuyển sang Pic và mong các bạn sinh viên chúng ta cùng nhau chia sẻ nhé.

    Theo kinh nghiệm học tập của mình thì sử dụng C viết cho vi điều khiển là rất thuận lợi. nhiều sinh viên cũng chưa hình dung được nếu lập trình bằng C thì sẽ thế nào. XIn trả lời là cũng như C cơ bản mà các bạn được học ở môn ngôn ngứ lập trình (KDD) , từ các biến cho đến vòng lặp, thuật toán...vv
    => như vậy bước đầu chúng ta nên học nghiêm túc môn này chứ phải không? :d

    Để bắt đầu học một cách hứng thú và dễ dàng tiếp cận, tôi sẽ viết những bài từ đơn giản đến nâng cao trong khả năng có thể. Mong các bạn cùng chung tay và ủng hộ nhé, có nhiều bạn quan tâm mới " sung" để viết tiếp được. okie?
    thân ái.

    bài đầu tiên tôi xin gửi lên là bài sơ lược về PÍC6f887
    để học nó trước hết các bạn nghiên cứu về phần cứng một cách sơ lược. nào, bắt đầu nhé! tối thứ 5 và thứ & hàng tuần tôi sẽ bắt đầu viết
  2. jimy Member

    Số bài viết: 159
    Đã được thích: 0
    Điểm thành tích: 16
  3. thanhkht New Member

    Số bài viết: 156
    Đã được thích: 0
    Điểm thành tích: 0
    Hi dân đam mê Vi điều Khiển, nói về Pic phải công nhận con này rất tuyệt vời trong các ứng dụng thực thế, nhưng AVR cũng không thua đâu nha các bạn vì mình lập trình cho cả 2 con này luôn, con nào mình lập trình cũng khá lắm. Còn về học ngôn ngữ lập trình các bạn nên học ngôn ngữ C/C++ vì lập trình bằng C sẽ đỡ tốn thời gian cho các bạn nghiên cứu kỹ về kiến trúc của vi điều khiển như thế nào, khi lập trình các bạn cũng dễ dàng sửa lại chương trình một cách nhanh chóng và thuận tiện còn học assembly thì hơi khó khăn đấy nhưng tùy sở thích của các bạn nếu muốn biết kỹ một con Vi Điều Khiển có kiến trúc như thế nào thì assembly là một lợi thế đấy. Còn về phần mềm lập trình cho Pic thì các bạn nên dùng CCS vì phần mềm này cũng rất dễ lập trình những ứng dụng cơ bản. Còn nhiều vấn đề khác nửa.............
    Đây là phần mềm CCS: http://www.mediafire.com/?8wbysfypf8bb9zi
    Đây là một ứng dụng của mình,rất dễ hiểu: http://www.mediafire.com/?vmd00u1k3a1s010
    Chúc mọi người vui
  4. kid_pro Member

    Số bài viết: 208
    Đã được thích: 6
    Điểm thành tích: 18
    Lâu rồi không ghé diễn đàn vì bận ôn thi và báo cáo các môn cuối kỳ, như đã hứa hôm nay tôi sẽ bắt đầu viết bài đầu tiên về PÍC6F887. Hiện tại tôi có một trang rất hay.
    Mikroc.com các bạn vào đó để xem nhé. nó có cung cấp book tham khảo rất hay. theo tôi các bạn có thể bắt đầu bằng cuốn này vì nó khá đầy đủ và hình ảnh cực lỳ trực quan, tiếp theo cũng trong trang này các bạn down phần trình biên dịch MikroC for PIC PRO nhé. khi đã có đầy đủ các công cụ trong tay chúng ta sẽ bắt đầu..okie? ( tôi mong muốn các bạn có thể học nghiêm túc về lập trình C cỏ bản , các bạn có thể mua cuốn Lập trình C cơ bản ở ngoài tiệm Photo nhé. và có thể học thêm ở các diễn đàn liên quan như congdongcviet, nhất nghệ...vv)

    Hiện tại có rất nhiều dòng pic nhưng ở đây chúng ta chọn dòng 16f887 là đúng đắn do nó tích hợp nhiều ứng dụng và thích hợp cho các bạn mới bắt đầu:

    Tôi sẽ mở màn bằng bài cơ bản về 16f887 như sau:
    [IMG]

    pic16f887 có 2 loại : một loại chân cắm 40 chân, một loại chân dán 44 chân ( không quan trọng lắm), chúng ta học loại 40 chân nhé:
    - vi điều khiển này có tất cả 5 loại PORT: A, B, C, D, E ( tùy theo từng port mà số lựong chân khác nhau), mỗi pin của port đựoc tích hợp nhiều chức năng . do đó nó có thể làm đựoc nhiều ứng dụng. vậy bạn sẽ thắc mắc : giả sử tôi muốn nó làm ứng dụng này thì làm thế nào, ứng dụng kia cũng trên chân đó thì làm thế nào? xin thưa nó liên quan đến việc ban khởi tạo trong các thanh ghi liên quan đến port hay pin đó. vậy khởi tạo là gì? ( trước khi sử dụng mình sẽ thiết lập nó sẽ làm gì).
    - vi điều khiển này có 3 loại timer, vậy timer là gì? Timer là......giống như bộ đếm vậy. Timer là định thời gian hay đếm cái gì đó, đại loại là vậy
    - ngoài ra nó còn rất nhiều chức năng khác. nHưng để không nản lòng các bạn mới học tôi không viết quá nhiều lý thuyết, đau đầu.

    vui cười : hàm voi ( void) và hàm hươu ( ?/???? ^^), hàm nào bự hơn hahaa, xin theo dõi bài kế

    Bài 1 : truy xuất PORT , làm sáng tắt đèn led.
    Đây là bài kinh điển mà bất cứ ai mới học vi điều khiển đều phải trải qua, bây giờ cũng không ngoại lệ. các bạn chú ý tôi sử dụng trình biên dịch MikroC nhé. ( tôi khuyên các bạn sử dụng vì nó cực kỳ tiện lợi và nhiều thư viện hỗ trợ)


    void main()
    {
    while(1)
    {
    1. ANSEL = 0; // CAU HINH NGO RA DIGITAL
    2.ANSELH = 0; // vì 2 thanh ghi ansel đều = 0 nên tất cả 14 có 2 chức năng số/ tưong tự đều là số
    3.TRISB = 0; //CAU HINH PORT B LA NGO RA
    4. PORTB = 0xFF; hoặc PORTB = 0b11111111// sáng hết port B
    5.delay_ms(10);
    6.PORTD = 0; hoặc viết PORTB = 0b00000000 hoặc PORTB = Ox00; // tắt hết PORTB ( cả 8 chân)
    7.delay_ms(1000);
    }
    }


    bài này rất rất cơ bản, tôi có thể giải thích như sau:
    dòng lệnh 1:
    - đây là dòng lệnh thiết lập, trong bài này đơn giản chỉ là sáng tắt port D ( tức là cho 8 chân sáng hết - mức 1 rồi sau đó 1s cho tắt hết). Như tôi đã nói một port có nhiều chức năng khác nhau. cụ thể ở đây PORT D có thể là ngõ số hay ngõ tưong tự . bạn cho led sáng tắt tức xuất 0 hoặc 5 V ra PORT D, vậy xin hỏi bạn muốn sáng tắt PORT D thì là số hay tương tự. Câu trả lời là tưong tự . Đáp án: bạn quá giỏi, xin ngừng khóa học ở đây. Nó là ngõ số, vì vậy ra phải làm gì>??? dĩ nhiên là khai báo nó là ngõ kiểu số ( chỉ có 2 mức 0 - tức 0V, 1 tức 5 V). thiết lập là ngõ số liên quan đến thanh ghi ANSEL. thực chất có 2 thanh ghi cấu hình số và tương tự cho một chân nào đó: là thanh ghi ANSEL và ANSELH. thanh ghi ANSEL có đủ 8 bit trong khi thanh ghi ANSEL H chỉ có 6 bit ( lý do là trên 16f887 có 14 chân vừa là ngõ số vừa là ngõ tương tự => mỗi chân ứng với 1 bit để cấu hình cho nó.
    bit = 0 là ngõ số, = 1 là tưong tự). vì thế các bạn muốn 1 chân nào đó là số hay tương tự các bạn chỉ cần thiết lập cho bit liên quan tuơng ứng.

    ví dụ: tôi muốn chân số 4 ( chân RA2/ AN2) là ngõ ra số, vậy tôi phải thiết lập bit tưong ứng của nó trong thanh ghi ANSEL, vậy trong 2 thanh ghi ANSEL, bit này nằm trong thanh ghi nào??? bit này nằm trong thanh ghi ANSEL và nó nằm ở vị trí bit thứ 3( tức bit ANS2) ,
    vậy đơn giản chỉ cần khai báo
    ANS2 = 0;
    okie? hoặc có thể viết ANSEL.2 = 0;
    2 cách viết này là tương đương.
    cách thiết lập từng bit này có thể cho phép trong 1 port có thể vừa có ngõ số, vừa có ngõ tưong tự. đã xong
    Lệnh 2( tưong tự lệnh 1)
    lệnh 3: sau khi đã cấu hình nó là ngõ số, vậy các bạn phải xem nó là ngõ vào hay ra. vì trong 16f887 thì 1 chân hoặc là vào, hoặc là ra. thiết lập nó liên quan đến thanh ghi TRIS. Thanh ghi TRIS thì port nào cũng có, có thanh ghi TRISA cho port A, TRISB cho port B...vân vân.
    ví dụ port B có 8 chân, mỗi chân sẽ đựoc 1 bit trong thanh ghi TRISB cấu hình là ngõ vào hay ra. ( do thanh ghi TRISB sẽ có đầy đủ 8 bit). tôi muốn ngõ RB0 ( các bạn nhớ chân nào có chữ RB hay RA, RA..thì là pin cho xuất nhập nhé) là ngõ ra. vậy tất nhiên bit đầu tiên trong thanh ghi TRISB dùng để thiết lập cho chân RB0 rồi, đó là bit TRISB0. vì là ngõ ra nên ta cho TRISB0 = 0; ngược lại muốn là ngõ vào ( giả sử ứng dụng cho nút nhấn chẳng hạn) thì TRISB = 1;. vậy muốn cả PORTB là ngõ ra thì sao? đơn giản chỉ là TRISB = 0b0000000 ( viết theo kiểu nhị phân, 0b tức trình biên dịch hiểu là viết theo nhị phân, sau đó 8 số 0 tức là 8 bit trong thanh ghi trisb đều = 0, tức 8 chân đều là ngõ ra, nếu viết TRISB = 0b01010101 thì tức chân 4 chân là ngõ ra, 4 chân là ngõ vào)..okie?
    hoặc có thể viết theo kiểu số HEXA, bạn có thể viết TRISB = 0x00( 0x tức là sử dụng số HEXA, mỗi số HEXA ứng với 4 bit. 0x00 = 0b00000000

    okie, vậy là khi làm việc với 1 port hay 1 pin bạn nhớ chú ý 2 việc cần thiết lập: nó là ngõ số hay tương tự ( liên quan thanh ghi ANSEL và ANSELH), = 0 là ngõ số, = 1 là ngõ tưong tự ( làm việc với tín hiệu tưong tự)
    kế tiếp nó là ngõ ra hay vào( liên quan thanh ghi TRIS. PORT A thì liên quan thanh ghi TRISA, PORTB liên quan thanh ghi TRISB..vân vân
    TRISB= 0 hoặc TRISB = 0b00000000 hoặc TRISB = 0x00 ( 3 cách viết); // tất cả các chân của portB là ngõ vào.

    TRISB = 0b10101010 hoặc viết TRISB = 0xAA ;// 4 chân là ngõ vào, 4 chân là ngõ ra
    rất đơn giản phải không?

    lênh số 4:
    PORTB = 0xFF hoặc có thể viết PORTB = 0b11111111 tức tất cả các 8 ngõ ra đều = 1 ( led sáng)
    nếu tôi viết PORTB = 0b11110000 ( theo nhị phân) hoặc PORTB = 0xF0 ( theo số HEXA ) tức 4 chân đầu = 1( led sáng), 4 chân sau = 0( led tắt)
    Lệnh số 5: các bạn gặp phải 1 ứng dụng ngon lành trong trình biên dịch MikroC, nó chính là hàm delay, không như các trình biên dịch khác phải viết chuơng trình delay , bạn chỉ việc viết theo cấu trúc:
    delay_ms( số ms muốn delay);
    ở ví dụ trên tôi truyền vào 1000 tức 100ms( nhớ là đơn vị ms) tức 1s
    lệnh số 6: các bạn cho PORDB tắt hết

    ngoài ra vòng lặp while(1) tức vòng lặp vô tận, nó sẽ khônh bao giờ dừng lại. tức led cứ sáng, sáng 10s, led tắt, tắt 10s rồi lặp lại...vân vân ( giống kiểu mấy bảng quảng cáo led ở các shop ngoài đường vậy)

    Hôm nay kết thúc ở đây, chúc các bạn học tốt. bài kế tiếp liên quan đến timer ( gồm 3 bài nhỏ: định thời bằng timer. sử dụng timer làm bộ đếm sản phẩm và ngắt timer)

    mọi chi tiết xin liên hệ:
    kim_hyen_u_thaininh (yahoo)
    hoặc
    vie.hanguyen89@gmail.com

    gút bai en si ju sun

    http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
    link down trình biên dịch.
    các bước thiết lập một Project như sau
    1.mở trình biên dịch
    2. chọn Project - new project - next - chọn dòng pic muốn lập trình - chọn tần số - chọn đừong dẫn lưu file - next ( nếu không có add file nào vào Project) - next - finish
  5. pro_and_brao Moderator

    Số bài viết: 484
    Đã được thích: 8
    Điểm thành tích: 18
    tình hình là những đề tài như thế này ở trường ta ít được quan tâm nhỉ!
    tôi định làm 1 Tut về VDK để phổ cập cho các anh em không hoặc chưa từng bik về vi điều khiển có thể học và ứng dụng căn bản với VĐK không biết anh em trên diễn đàn mình có hưởng ứng không nhỉ?
  6. akatsuki2406 Member

    Số bài viết: 333
    Đã được thích: 1
    Điểm thành tích: 16
    a brao lam đi
    e ủng hộ cả 2 tay
    e thì chưa biết gì nhưng a cần khi nào thì có thể liên lạc với e bất cứ khi nào miển là e giúp dc
  7. pro_and_brao Moderator

    Số bài viết: 484
    Đã được thích: 8
    Điểm thành tích: 18
    ý định thì cũng đã có nhưng mà thực hiện thì còn phải xem ý kiến mọi người!
    mất công mình làm mà không có hưởng ứng thì quá là mất công!
    với làm 1 cái Tut khá là lâu dài nếu anh em không hưởng ứng thì dễ gây ra nản chí dễ bỏ cuộc giữa chừng lắm!
  8. akatsuki2406 Member

    Số bài viết: 333
    Đã được thích: 1
    Điểm thành tích: 16
    thì a làm đi
    có gì thông bào lên
    trong trường cũng có nhiều người tâm huyết muốn cống hiến mà
    a làm đi nha
  9. xuansy New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 1
  10. huyquangnguyen New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
  11. taikhoandatt New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
  12. kokori0906 Member

    Số bài viết: 74
    Đã được thích: 0
    Điểm thành tích: 6

Chia sẻ trang này