Làm thế nào để sử dụng một anode chung 7 màn hình, 4 chữ số?


9

Hãy lấy câu hỏi này làm ví dụ cho câu trả lời (của riêng tôi) bên dưới.

Tôi đã có một màn hình LED 7 đoạn, 4 chữ số, nhưng tôi không biết làm thế nào để nối nó.

Tôi không hiểu sự khác biệt giữa cực dương / cực âm thông thường và tôi không có 2 chân cho mỗi đèn LED, điều này thật lạ. Khá gần đây, một câu hỏi về "anode chung 7 chữ số 4 chữ số" đã bị xóa. Ngay lúc đó tôi đang gõ một câu trả lời.

Mặc dù vậy, tôi vẫn muốn chia sẻ câu trả lời của mình với bạn hoặc người hỏi nó. Vui lòng xác minh / cập nhật câu trả lời của tôi với nhiều thông tin hơn. Cụ thể, ai đó có thể thêm mã làm việc, tôi không thể vào lúc này.


Chỉ tò mò thôi. Bạn đã đăng một câu hỏi để bạn có thể trả lời nó?
PhillyNJ

Thực sự có một lựa chọn cho điều đó. Tuy nhiên, các ý kiến ​​trong câu hỏi của tôi cũng nói lên "câu chuyện nền". Tôi đã trả lời một câu hỏi, đã bị xóa. Và cảm thấy cần phải đăng câu trả lời của tôi không bao giờ. Vì vậy, có, tôi đã làm. Nhưng đó là một phương pháp hợp lệ và tôi đã có câu trả lời trước câu hỏi. Vì vậy, nó có ý nghĩa với tôi. Nếu bạn có một câu hỏi thực sự hay (và trả lời), tôi chỉ có thể khuyến khích bạn làm điều tương tự, vì nó có thể hữu ích với ai đó vào một lúc nào đó.
Paul

Câu trả lời:


7

Cũng như một phần bổ sung cho câu trả lời của Paul, tôi đã viết một chương trình ngắn để chỉ ra cách điều khiển màn hình 7 chữ số gồm 4 chữ số của anh ấy:

sơ đồ nối dây

Đây thực sự là một màn hình cực âm phổ biến, vì vậy chương trình giả định rằng, cũng như hệ thống dây điện cụ thể của hình. Phần thú vị là refresh_display()chức năng, nên được gọi là định kỳ. Thuật toán như sau:

  • lái 7 cực dương với các tín hiệu thích hợp cho một trong các chữ số chúng tôi muốn hiển thị
  • đặt HIGHđầu ra điều khiển cực âm của chữ số đó thông qua bóng bán dẫn NPN
  • chờ trong 2,5 ms (cho tốc độ làm mới 100 Hz)
  • đặt LOWđầu ra điều khiển catốt
  • di chuyển đến chữ số tiếp theo.

Cần lưu ý rằng việc chờ đợi được thực hiện mà không chặn CPU, bằng cách sử dụng kỹ thuật được mô tả trong hướng dẫn Blink Without Delay Arduino. Đây là chương trình:

const int NB_DIGITS     = 4;  // 4-digit display
const int FIRST_ANODE   = 2;  // anodes a..g on pins 2..8
const int FIRST_CATHODE = 9;  // cathodes, right to left, on pins 9..12

// Digits to display, from right to left.
uint8_t digits[NB_DIGITS];

// Set all the used pins as outputs.
void init_display()
{
    for (int i = 0; i < 7; i++)
        pinMode(FIRST_ANODE + i, OUTPUT);
    for (int i = 0; i < NB_DIGITS; i++)
        pinMode(FIRST_CATHODE + i, OUTPUT);
}

// This should be called periodically.
void refresh_display()
{
    // Our 7-segment "font".
    static const uint8_t font[10] = {
        //abcdefg
        0b1111110, // 0
        0b0110000, // 1
        0b1101101, // 2
        0b1111001, // 3
        0b0110011, // 4
        0b1011011, // 5
        0b1011111, // 6
        0b1110000, // 7
        0b1111111, // 8
        0b1111011  // 9
    };

    // Wait for 2.5 ms before switching digits.
    static uint32_t last_switch;
    uint32_t now = micros();
    if (now - last_switch < 2500) return;
    last_switch = now;

    // Switch off the current digit.
    static uint8_t pos;
    digitalWrite(FIRST_CATHODE + pos, LOW);

    // Set the anodes for the next digit.
    pos = (pos + 1) % NB_DIGITS;
    uint8_t glyph = font[digits[pos]];
    for (int i = 0; i < 7; i++)
        digitalWrite(FIRST_ANODE + i, glyph & 1 << (6-i));

    // Switch digit on.
    digitalWrite(FIRST_CATHODE + pos, HIGH);
}

/***********************************************************************
 * Example usage.
 */

void setup()
{
    init_display();
}

void loop()
{
    uint32_t now = millis();

    // Change the number displayed every second.
    static uint32_t last_change;
    if (now - last_change >= 1000) {
        digits[3] = digits[2];
        digits[2] = digits[1];
        digits[1] = digits[0];
        digits[0] = (digits[0] + 1) % 10;
        last_change = now;
    }

    refresh_display();
}

Paul đã cung cấp một liên kết đến một hướng dẫn về Parallax gợi ý sử dụng thư viện Arduino Multiplex7Seg . Thư viện đó tổng quát hơn mã ví dụ ở trên, vì nó không đưa ra các giả định về các chân được sử dụng. Nhưng sự khác biệt lớn giữa thư viện và mã này nằm ở cách quản lý thời gian:

  • Thư viện được điều khiển bởi ngắt tràn Timer 2. Điều này sẽ cung cấp một thời gian rất ổn định, với chi phí có một bộ đếm thời gian dành riêng cho công việc này.
  • Các mã trên phụ thuộc vào người dùng gọi refresh_display()thường xuyên đủ. Nó không yêu cầu tài nguyên phần cứng chuyên dụng, nhưng nó không chơi tốt với các chương trình mất quá nhiều thời gian loop(): nó sẽ không giống như bạn gọi delay().

Đây là lý do tại sao tôi thích các công cụ nguồn mở. Bạn có thể chia sẻ khối lượng công việc với phần còn lại của thế giới và tạo ra một cái gì đó thực sự tốt đẹp. Sau đó được chia sẻ với phần còn lại của thế giới :) Bạn có thể học hỏi rất nhiều từ các nhà phát triển khác và kiến ​​thức đó sẽ bền bỉ và không chỉ bị ẩn khỏi mọi người khác.
Paul

Tôi có một câu hỏi trong đầu về giá trị điện trở cơ sở của Tranistor. Tôi có một vấn đề lớn với việc tính toán giá trị điện trở. Lý do của việc sử dụng điện trở 4,7K trong bốn bóng bán dẫn 2N2222 là gì? Nếu một phân đoạn duy nhất tiêu thụ 10mA thì sẽ có bản vẽ hiện tại tối đa 80mA cho tất cả các phân khúc bao gồm DP. Nếu V (BE * sat) = 1.3v và I (B) = 15mA thì 300ohm là đủ. Có bất kỳ sai với tính toán của tôi?
Maruf

@maruf: I_B yêu cầu tối thiểu là I_C dự kiến ​​chia cho mức tăng bóng bán dẫn tối thiểu. Nếu bạn muốn 80 mA trên trình thu thập và mong muốn đạt được ít nhất 100 (có thể lạc quan, tôi đã không kiểm tra biểu dữ liệu), thì bạn cần ít nhất 80/100 = 0,8 mA trên cơ sở. Khi đó giá trị tối đa của điện trở cơ sở là điện áp rơi trên nó (khoảng 5 V - 0,7 V) chia cho dòng điện đó, hoặc khoảng 5,3 kΩ.
Edgar Bonet

5

Tôi sẽ thử và đưa bạn qua những điều cơ bản hoàn chỉnh của đèn LED, v.v ... Vì màn hình 7 chữ số gồm 4 chữ số là sự kết hợp của nhiều "kỹ thuật LED".

Đèn LED

LED, hay Điốt phát sáng, là một trong những điều thú vị của Arduino.

Về cơ bản, chúng dễ sử dụng, cung cấp năng lượng cho chúng và chúng sẽ sáng lên.

Chúng có thể gây phiền nhiễu, bởi vì chúng có một số loại cực, có nghĩa là chúng sẽ chỉ hoạt động khi bạn nối chúng đúng. Nếu bạn đảo ngược điện áp dương và âm, chúng sẽ không sáng lên chút nào.

Khó chịu như nó là, nó cũng khá hữu ích.

Cathode vs Anode

Trên một đèn LED truyền thống, dây dẫn dài là (+), Anode. Dẫn khác là Cathode (-).

"Hoặc, nếu ai đó tỉa chân, hãy thử tìm cạnh phẳng trên vỏ ngoài của đèn LED. Chốt gần cạnh phẳng nhất sẽ là cực âm, cực âm." - Sparkfun

Nguồn: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

Sparkfun

Hệ thống dây điện cơ bản

Tôi không chắc điều này có đúng không, vì tôi đã xé hình ảnh từ internet.

Dây LED cơ bản

Đấu nối một đèn LED khá dễ dàng, Anode (+) kết nối với điện áp dương, tốt nhất là thông qua một điện trở giới hạn dòng điện. Cathode (-) kết nối với mặt đất (với một điện trở giới hạn dòng điện, nếu bạn không có một mặt tích cực).

Điện trở giới hạn hiện tại sẽ tránh cho đèn LED bị chập, làm hỏng đèn LED hoặc Vi điều khiển / Arduino.

Nhiều đèn LED, ma trận, đèn led RGB

Với nhiều đèn LED, bạn thường có chúng với mặt tích cực được kết nối (+), "Anode chung" hoặc tất cả được kết nối với (-) "Cathode chung".

Về cơ bản nó sẽ đi xuống này.

RGB cực âm / cực dương

Đối với một cực âm thông thường, bạn cung cấp dòng điện cho các chân mà bạn muốn có.

Đối với cực dương thông thường, bạn chìm dòng điện qua đèn LED.

Ghép kênh (nhiều chữ số, 7 đoạn)

Bạn nên xem hướng dẫn về thị sai: http://learn.parallax.com/4-digit-7-seribution-led-display-arduino-demo

Parallax 4digit7seg

Khi bạn có nhiều đèn LED, việc "ghép" chúng thường rất thông minh. Thông thường, bạn đi qua "nhóm" đèn LED một cách nhanh chóng, để có vẻ như tất cả chúng đều bật cùng một lúc.

Thông thường, bạn chìm dòng điện từ một cột của đèn LED và cung cấp dòng điện cho từng đèn LED riêng lẻ.

Hoặc, bạn cung cấp dòng điện cho một cột của đèn LED và dòng điện chìm từ các đèn LED riêng lẻ của một hàng.

Để bạn có thể chọn cột nào sẽ kích hoạt và đèn LED nào của cột đó sẽ sáng lên. Thay đổi nhanh chóng các cột / hàng này sẽ cho phép bạn điều khiển nhiều đèn LED với ít chân hơn.

Thậm chí còn có bộ điều khiển hiển thị cho việc này, nếu bạn không muốn quan tâm đến việc chuyển đổi trong phần mềm của mình.

Vì vậy, khi bạn có một phân đoạn gồm 4 chữ số, 7 chữ số, cực dương chung

Sơ đồ sẽ giống như thế này:

nhập mô tả hình ảnh ở đây

http://www.mytutorialcafe.com/Microcontler%20Application%20C%207segmen.htmlm

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.