Làm thế nào để đấu dây một vi điều khiển PIC?


8

Tôi hoàn toàn mới đối với thế giới Vi điều khiển PIC và kỹ thuật điện, vì vậy hãy đi dễ dàng :)

Dù sao, tôi đã quản lý để lập trình PIC 16f627 của mình để bật ba đèn LED khi nhấn nút ấn (nút kích hoạt) và bắt đầu một chuỗi tắt (về cơ bản, mỗi đèn LED tắt lần lượt với một độ trễ 5 giây ở giữa) khi một nút nhấn khác ở giữa nhấn (nút đặt lại). Tôi đã thử nghiệm điều này trên bảng thử nghiệm / lập trình PIC K8048 của Velleman. PIN RA0 và RA2 là đầu vào cho nút bấm kích hoạt và đặt lại tương ứng trong khi chân RB0, RB1 và ​​RB2 là chân đầu ra cho đèn LED.

Làm việc với bảng thử nghiệm là tuyệt vời nhưng tôi muốn chuyển điều này sang một mạch thực tế. Vấn đề là tôi không biết bắt đầu từ đâu. Tôi đã mua 3 đèn LED (mỗi đèn 3,3 volt), một số nút bấm và dây và tôi đã xây dựng mạch sau:

Mạch

(xin lỗi vì sơ đồ khủng khiếp)

Trong mạch tôi đã xây dựng, lần đầu tiên tôi đã thử nghiệm xem đèn LED có hoạt động với 3 pin AA 1,5 Volt hay không và chúng hoạt động tốt vì vậy tôi cho rằng điện trở sẽ không cần thiết.

Điều này không hoạt động, tuy nhiên, và tôi hoàn toàn bị mất. Để tham khảo, đây là mã của tôi cho PIC. Nó được viết bằng C sử dụng MikroC. Nó hoạt động trên bảng thử nghiệm vì vậy tôi không nghĩ đó là vấn đề

void main() {
    TRISB.RB0 = 0;
    TRISB.RB1 = 0;
    TRISB.RB2 = 0;
    PORTB.RB0 = 0;
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    CMCON = 0x07;
    TRISA = 255;

    for(;;){
            if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
                         delay_ms(5000);
                         PORTB.RB0 = 0;
                         delay_ms(5000);
                         PORTB.RB1 = 0;
                         delay_ms(5000);
                         PORTB.RB2 = 0;
            }
            if(PORTA.RA2 == 1){
                         PORTB.RB0 = 1;
                         PORTB.RB1 = 1;
                         PORTB.RB2 = 1;
            }
    }
}

Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn!


3
Xin vui lòng sử dụng Fritzing . Nó miễn phí, thực hiện 90% công việc cho bạn và giúp sơ đồ nguyên lý của bạn dễ đọc hơn ..
Ignacio Vazquez-Abrams


7
Tôi nghĩ rằng có một tài khoản trong 10 ngày và đây là câu hỏi đầu tiên của Shahmeer là một cái cớ để "bỏ rác như thế này vào chúng tôi". Chắc chắn cách tiếp cận độc đáo của Ignacio có nhiều khả năng nhận được phản hồi tích cực hơn là mắng mỏ chàng trai mới ... trừ khi mục tiêu của bạn là ngăn chặn những người mới dính vào.
ajs410

5
@ ajs410 - tất cả chúng ta đều biết đây là tiểu thư thú cưng của Olin, và trong khi tôi không luôn đồng ý với cách diễn đạt của anh ấy, tôi đồng ý với nguyên tắc của anh ấy. Việc OP xin lỗi vì "sơ đồ" khủng khiếp (lời nói của chính anh ta) có nghĩa là anh ta biết rõ rằng điều đó không ổn. Vậy thì tại sao anh ta vẫn đăng điều này? Đối với tôi nó không phải là do EDA tạo ra, tôi nghĩ rằng tôi muốn xem một bản vẽ bằng bút chì.
stevenvh

2
Anh ấy mới, giống như nhiều thành viên mới khác ở đây (bao gồm cả tôi). Cho anh ta nghỉ ngơi. Shahmeer, hãy thử Fritzing. Thật hay và dễ sử dụng, và sẽ giúp bạn giải thích rõ hơn câu hỏi của mình. Một lưu ý khác, tôi cực lực phản đối lựa chọn từ ngữ của Ignacio.
capcom

Câu trả lời:


11
  1. Thứ nhất, bạn luôn cần các điện trở nối tiếp với đèn LED khi được điều khiển từ nguồn điện áp (ví dụ: pin, nguồn DC, v.v.)
    Điều này là do đèn LED có đường cong IV không tuyến tính, trông giống như trở kháng cao đến điện áp ngưỡng của LED sau đó tăng rất mạnh, do đó, điều đó có nghĩa là với sự thay đổi điện áp rất nhỏ, dòng điện thay đổi rất nhiều, khiến cho việc đặt dòng điện thành giá trị ổn định theo cách này gần như không thể.
    Bằng cách sử dụng các điện trở chuỗi giá trị chính xác, bạn đảm bảo dòng điện không thể tăng đủ để làm hỏng đèn LED.
    Để tính giá trị điện trở, bạn cần biết điện áp chuyển tiếp LED (Vf) sau đó trừ Vf khỏi điện áp cung cấp và chia cho dòng điện mong muốn, ví dụ như đối với nguồn 5V, Vf 2V và 15mA:

    (5V - 2V) / 0,020A = 200Ω (Giá trị tiêu chuẩn 220 sẽ làm - nếu bạn không có điều này thì hãy nhắm đến bất cứ thứ gì trong khoảng từ 150Ω đến 600Ω cho phạm vi 20mA đến 5mA)
    Đây là giả sử đèn LED thông thường 5 mm hoặc 3 mm của dòng hoạt động tối đa 20mA.

  2. Mặc dù có ghi "Pin 3 x 1,5V trong sê-ri" trong sơ đồ của bạn, pin trông giống như chúng có thể được kết nối song song. T xác nhận, pin cần được kết nối từ đầu đến cuối như sơ đồ dưới cùng trong hình ảnh này:

    Kết nối song song và sê-ri

  3. Bạn cần tách tụ điện có mặt giữa vi điều khiển Vdd và mặt đất. Tôi sẽ không đi vào chi tiết (tìm kiếm ở đây, có nhiều câu trả lời hay về chủ đề này) nhưng về cơ bản chúng là để cung cấp cho vi điều khiển dự trữ năng lượng cục bộ trở kháng thấp cho nhu cầu dòng điện tần số cao, mà nguồn cung cấp điện không thể đáp ứng nhanh chóng đủ.
    Tốt nhất bạn nên đặt một (gốm 100nF hoặc 1uF là tiêu chuẩn khá) trên các chân nguồn và chân đất, càng gần chân càng tốt.

  4. Hãy chắc chắn rằng bạn đang sử dụng bộ dao động bên trong nếu bạn không có mặt tinh thể. Mã của bạn không hiển thị các cài đặt bit cấu hình, nếu bạn bỏ chúng ra, bạn cần thêm chúng để đảm bảo vi điều khiển được thiết lập chính xác. Hướng dẫn CCS sẽ cho bạn biết làm thế nào để làm điều này. Ngoài ra trong các bit cấu hình, đảm bảo rằng Bộ định thời giám sát được đặt thành tắt, nếu không, micro của bạn sẽ liên tục đặt lại (trừ khi bạn gọi lệnh xóa WDT thường xuyên)

  5. Hãy chắc chắn rằng bạn có đèn LED đúng cách.

  6. Đảm bảo rằng bạn có chân MCLR được buộc cao, nếu không PIC của bạn sẽ được giữ lại (trừ khi bạn tắt MCLR trong các bit cấu hình) Điều này thường được thực hiện với điện trở thành Vdd, giá trị khoảng 10kΩ. Bảng dữ liệu sẽ có một ví dụ về điều này trong phần thiết lập lại. (cảm ơn ajs410 đã đề cập đến điều này)


Cảm ơn rất nhiều cho các ý kiến, họ đã thực sự hữu ích. Tuy nhiên, tất cả những thứ đó, tôi nên kết nối PIC theo bất kỳ cách nào khác hay là những bổ sung bạn đã liệt kê tất cả những gì tôi cần?
Shahmeer Navid

2
Một điều khác là bạn có thể cần các điện trở kéo xuống trên các chân nút của mình, để đảm bảo rằng pin ở mức logic thấp khi nút không được ấn (trừ khi bạn có kéo xuống bên trong, nhưng tôi nghĩ rằng PIC sẽ chỉ có sẵn pullups) khó có thể chắc chắn về những thứ có sơ đồ như nó (ví dụ: ký hiệu không chuẩn, không có số / tên pin, v.v.) Tôi sẽ nắm giữ một số phần mềm chụp PCB / sơ đồ (ví dụ Eagle [phổ biến / miễn phí cho phi thương mại], Kicad [phổ biến / miễn phí], Diptrace [giá rẻ], Altium [$$$], v.v.) và sử dụng nó trong tương lai.
Oli Glaser

1
6. Đừng quên điện trở kéo lên trên chân MCLR. Hoặc đặt bit cấu hình sử dụng pull-up bên trong, nếu có.
ajs410

2

Tôi đặc biệt giới thiệu cuốn sách O'Reilly "Thiết kế hệ thống nhúng" của John Catsoulis cho ai đó ở vị trí của bạn. Có một Chương "Điện tử 101" sẽ giúp bạn tăng tốc độ chức năng khá nhanh và khác về xây dựng thực tế.


2
  1. Không vượt quá 5V, PIC của bạn có thể bị cháy trên mức điện áp 5V. Bạn có thể sử dụng pin 9V hoặc bộ chuyển đổi AC / DC với bộ điều chỉnh điện áp tuyến tính như LM7805 để tạo ra 5V cho mạch của bạn. Cách nối dây:

    http: // ware.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-USE-78l05-7805.html

  2. Giống như hầu hết đã nói: Đừng quên cung cấp chân MCLR với một điện trở nối tiếp. Bạn có thể sử dụng cấu hình kéo lên để thiết lập lại PIC của bạn. Đây là liên kết cho lược đồ: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php

  3. Luôn luôn sử dụng một điện trở nối tiếp trước khi dẫn. Nó sẽ tiết kiệm được đèn led khỏi bị đốt cháy và giảm mức tiêu thụ điện năng. Đối với đèn led 3,3V 220 hoặc 330 ohms sẽ ổn.


2

Nút chức năng đơn giản. Khi chúng ta nhấn một nút, hai tiếp điểm được nối với nhau và kết nối được thực hiện. Tuy nhiên, nó không đơn giản như vậy. Vấn đề nằm ở bản chất của điện áp như một chiều điện, và trong sự không hoàn hảo của các tiếp xúc cơ học. Điều đó có nghĩa là, trước khi tiếp xúc được thực hiện hoặc cắt, có một khoảng thời gian ngắn khi rung (dao động) có thể xảy ra do sự không đồng đều của các tiếp xúc cơ học, hoặc do tốc độ khác nhau trong việc ấn nút (điều này phụ thuộc vào trên người nhấn nút). Thuật ngữ được đưa ra cho hiện tượng này được gọi là DEBOUNCE. Nếu điều này bị bỏ qua khi chương trình được viết, có thể xảy ra lỗi hoặc chương trình có thể tạo ra nhiều hơn một xung đầu ra cho một lần nhấn nút. Để tránh điều này, chúng tôi có thể đưa ra một độ trễ nhỏ khi chúng tôi phát hiện việc đóng liên lạc. Điều này sẽ đảm bảo rằng việc ấn nút được hiểu là một xung đơn. Độ trễ gỡ lỗi được tạo ra trong phần mềm và độ dài của độ trễ phụ thuộc vào nút và mục đích của nút. Vấn đề có thể được giải quyết một phần bằng cách thêm một tụ điện qua nút, nhưng một chương trình được thiết kế tốt là một câu trả lời tốt hơn nhiều. Chương trình có thể được điều chỉnh cho đến khi phát hiện sai hoàn toàn. Hình ảnh dưới đây cho thấy những gì thực sự xảy ra khi nhấn nút. Chương trình có thể được điều chỉnh cho đến khi phát hiện sai hoàn toàn. Hình ảnh dưới đây cho thấy những gì thực sự xảy ra khi nhấn nút. Chương trình có thể được điều chỉnh cho đến khi phát hiện sai hoàn toàn. Hình ảnh dưới đây cho thấy những gì thực sự xảy ra khi nhấn nút.

Đọc thêm: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR


1

Ngoài những gì người khác đã viết: không gán cho các chân đầu ra PIC riêng lẻ, ví dụ như "PORTB.RB0 = 1;". Thay vào đó, thực hiện thay đổi bit trong một biến có kích thước byte và sau đó ghi biến đó vào cổng.

Bạn có thể

  • Dùng từ ngữ của tôi cho nó,
  • đọc về vấn đề "đọc-sửa-ghi" hoặc
  • chịu các hệ quả
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.