Ortak bir anot 7 segmentli, 4 basamaklı ekran nasıl kullanılır?


9

Lütfen bu soruyu aşağıdaki (kendi) cevabım için örnek olarak ele alalım.

7 segmentli, 4 basamaklı bir LED ekranım var, ancak kabloyu nasıl bağlayacağım hakkında hiçbir fikrim yok.

Ortak anot / katot arasındaki farkı anlamıyorum ve LED başına 2 pim yok, bu da garip. Son zamanlarda, "7 segment 4 basamaklı ortak anot" ile ilgili bir soru silindi. O anda bir cevap yazıyordum.

Yine de cevabımı sizinle veya bunu soran kişiyle paylaşmak istiyorum. Lütfen cevabımı daha fazla bilgi ile doğrulayın / güncelleyin. Özellikle, birisi çalışma kodu ekleyebilir miyim, şu anda yapamam.


Sadece merak. Yanıtlayabilmeniz için bir soru gönderdiniz mi?
PhillyNJ

Aslında bunun için bir seçenek var. Ancak, sorumdaki yorumlar da "arka plan hikayesini" anlatıyor. Silinen bir soruyu cevaplıyordum. Ve yine de cevabımı göndermem gerektiğini hissettim. Evet, yaptım. Ama geçerli bir yöntem ve sorudan önce cevabı aldım. Bu yüzden bana mantıklı geldi. Gerçekten iyi bir sorunuz (ve cevabınız) varsa, sadece aynı şeyi yapmanıza teşvik edebilirim, çünkü bir noktada birileri için yararlı olabilir.
Paul

Yanıtlar:


7

Paul'ün cevabının bir tamamlayıcısı olarak, figürünün 7 segmentli 4 basamaklı ekranının nasıl sürüleceğini gösteren kısa bir program yazdım:

kablo şeması

Bu aslında ortak bir katot ekranıdır, bu nedenle program, şeklin belirli kablolarının yanı sıra bunu varsayar. İlginç refresh_display()olan, periyodik olarak çağrılması gereken işlevdir. Algoritma aşağıdaki gibidir:

  • göstermek istediğimiz rakamlardan biri için 7 anotu uygun sinyallerle sürün
  • HIGHNPN transistörü üzerinden bu rakamın katotunu kontrol eden çıkışı ayarlayın
  • 2,5 ms bekleyin (100 Hz yenileme hızı için)
  • LOWkatot kontrol çıkışını ayarlama
  • sonraki basamağa geç.

Beklemenin Gecikmesiz Göz Kırpma Arduino öğreticisinde açıklanan tekniği kullanarak CPU'yu engellemeden yapıldığına dikkat edilmelidir . İşte program:

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 , Parallax'ta Multiplex7Seg Arduino kütüphanesinin kullanılmasını öneren bir eğiticiye bağlantı sağladı . Bu kütüphane, kullanılan pinler hakkında varsayımlarda bulunmadığından yukarıdaki örnek koddan daha geneldir. Ancak kütüphane ve bu kod arasındaki büyük fark, zamanlamaların yönetilme şeklidir:

  • Kütüphane, Zamanlayıcı 2 taşma kesmesi tarafından tahrik edilir. Bu, bu işe adanmış bir zamanlayıcı olması pahasına çok sabit bir zamanlama sağlamalıdır.
  • Yukarıdaki kod kullanıcının refresh_display()yeterince sık aramasına dayanır . Özel donanım kaynakları gerektirmez, ancak çok uzun süren programlarla iyi oynamaz loop(): aramanızı sevmez delay().

Bu yüzden açık kaynaklı şeyleri severim. İş yükünü dünyanın geri kalanıyla paylaşabilir ve gerçekten hoş bir şey yaratabilirsiniz. Bu daha sonra dünyanın geri kalanıyla paylaşılır :) Diğer geliştiricilerden çok şey öğrenebilirsiniz ve bu bilgi kalıcı olacaktır ve sadece herkesten gizlenmeyecektir.
Paul

Tranistor'un temel direnç değeri hakkında bir sorum var. Direnç değerini hesaplamada büyük bir sorunum var. Dört 2N2222 transistörde 4.7K direnç kullanmanın nedeni nedir? Tek bir segment 10mA tüketirse, DP dahil tüm segmentler için maksimum 80mA akım çizimi olacaktır. V (BE * sat) = 1.3v ve I (B) = 15mA ise 300ohm yeterli olacaktır. Hesaplamamda bir sorun var mı?
maruf

@maruf: Gereken minimum I_B, beklenen I_C'nin minimum transistör kazancına bölünmesidir. Toplayıcıda 80 mA istiyorsanız ve en az 100 kazanç bekliyorsanız (iyimser olabilir, veri sayfasını kontrol etmedim), o zaman tabanda en az 80/100 = 0.8 mA gerekir. Daha sonra baz direncin maksimum değeri, üzerindeki akımın (yaklaşık 5 V - 0,7 V) o akıma bölünmesiyle veya yaklaşık 5,3 kΩ'dur.
Edgar Bonet

5

4 basamaklı 7 segmentli ekranlar çoklu "LED tekniklerinin" bir kombinasyonu olduğu için sizi LED'lerin tüm temelleri üzerinde deneyeceğim.

Kablolama LED'leri

LED'ler veya Işık Yayan Diyotlar, Arduino'nun eğlenceli şeylerinden biridir.

Esasen, kullanımı kolaydır, onları güçlendirir ve yanarlar.

Can sıkıcı olabilirler, çünkü bir çeşit kutupları vardır, yani sadece onları doğru bağladığınızda çalışacaklardır. Pozitif ve negatif voltajı ters çevirirseniz, hiç yanmazlar.

Olduğu gibi can sıkıcı, aynı zamanda oldukça yararlı.

Katot ve Anot

Geleneksel bir LED'de, uzun uç (+), Anot'tur. Diğer ipucu (-) Katottur.

"Ya da birisi bacaklarını keserse, LED'in dış kasasında düz kenarı bulmayı deneyin. Düz kenara en yakın pim negatif, katot pimi olacaktır." - Kıvılcım

Kaynak: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

SparkFun

Temel kablolama

Görüntünün internetten kopyalandığından, bunun doğru olup olmadığından emin değilim.

Temel LED kablolama

Bir LED'i kablolamak oldukça kolaydır, Anot (+), tercihen bir akım sınırlayıcı direnç yoluyla pozitif voltaja bağlanır. Katot (-) toprağa bağlanır (pozitif tarafta yoksa akım sınırlama direnci ile).

Akım sınırlama direnci, LED'in kısa devre yapmasını ve LED'e veya Mikrodenetleyici / Arduino'ya zarar vermesini önleyecektir.

Çoklu LED'ler, matrisler, RGB ledler

Birden fazla LED ile genellikle pozitif tarafı bağlı (+), "ortak Anot" veya hepsi (-) "ortak Katot" a bağlı olur.

Temel olarak buna gelecek.

RGB ortak katot / anot

Ortak bir katot için, sahip olmak istediğiniz pimlere akım sağlarsınız.

Ortak bir anot için akımı LED'den batırırsınız.

Çoklama (çok basamaklı, 7 segmentli)

Paralaks eğitimine göz atmalısınız: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

Paralaks 4digit7seg

Çok fazla LED'iniz olduğunda, bunları "çoğaltmak" genellikle zekidir. Genellikle LED'lerin "gruplarından" hızlı bir şekilde geçersiniz, böylece hepsi aynı anda yanmış gibi görünür.

Genellikle akımı bir LED sütunundan batırır ve bir satırın ayrı LED'lerine akım sağlarsınız.

Ya da, bir LED sütununa akım sağlar ve bir satırın ayrı LED'lerinden gelen batma akımı.

Böylece hangi sütunun etkinleştirileceğini ve o sütunun hangi LED'lerinin yanacağını seçebilirsiniz. Bu sütunları / satırları hızlı bir şekilde değiştirmek, çok daha az iğneli birden fazla LED'i kontrol etmenizi sağlar.

Yazılımınızdaki geçişe bakmak istemiyorsanız, bunun için ekran denetleyicileri bile vardır.

Yani 4 basamaklı, çoklanmış 7 segmentli, ortak anotunuz olduğunda

Diyagram daha çok şöyle olacak:

resim açıklamasını buraya girin

http://www.mytutorialcafe.com/Microcontroller%20Application%20C%207segmen.htm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.