Umumiy anodli 7 segmentli, 4 xonali belgini qanday ishlatish kerak?

Iltimos, ushbu savolni quyida keltirilgan javobga misol sifatida keltiring.

Menda 7 ta segment, 4 dyuymli LED displey bor, lekin uni qanday qilib simli qilish haqida hech qanday tasavvurga ega emasman.

Umumiy anot/katod orasidagi farqni tushunmayapman va har bir LED uchun 2 ta pin yo'q, bu g'alati. So'nggi paytlarda "7 segmentli 4 xonali umumiy anod" bo'yicha savol o'chirildi. O'sha onda men javob yozyapman.

Shunga qaramay, siz hali ham mening javobimni, yoki so'ragan odam bilan baham ko'rishni istayman. Qo'shimcha ma'lumot bilan mening javobingizni tasdiqlang/yangilab turing. Ayniqsa, kimdir ish kodini qo'sha olishi mumkinmi, hozir men buni qila olmayman.

6
Buning uchun imkoniyat bor. Biroq, mening savolimdagi izohlar "fon hikoyasini" ham aytadi. Men o'chirib yuborilgan savolga javob berardim. Va javobimga javob berish kerakligini his qildim. Xullas, ha. Lekin bu to'g'ri uslub va savoldan oldin javob oldim. Shunday qilib, men uchun mantiqiy edi. Agar sizda juda yaxshi savol bo'lsa (va javob berish) bo'lsa, men sizni faqat bir narsani qilishga undashingiz mumkin, chunki u bir nuqtada kimnidir foydalidir.
qo'shib qo'ydi muallif dotnetengineer, manba
Faqat qiziq. Siz unga javob bera olasizmi?
qo'shib qo'ydi muallif anu, manba

2 javoblar

Pavlusning javobiga qo'shimcha sifatida men ko'rsatadigan qisqa dasturni yozdim uning 7-segmentli 4-raqamli ekranini qanday suratga olish kerak:

wiring schematic

Bu aslida umumiy katodli displey hisoblanadi, shuning uchun dastur, shuningdek raqamning alohida kabellari. Qiziqarli qism vaqti-vaqti bilan chaqirilishi kerak bo'lgan refresh_display() funktsiyasi. Algoritm quyidagicha:

  • raqamlardan biri uchun tegishli signallari bilan 7 anodni boshqaring
  • ni ko'rsatishni xohlaymiz
  • HIGH raqamini katodini boshqaruvchi chiqdi NPN tranzistorlari.
  • 2.5 msni kuting (100 Hz yangilash tezligi uchun)
  • LOW ni katot-nazorat qiluvchi chiqdi
  • ni o'rnating
  • keyingi raqamga o'ting.

Shuni ta'kidlash kerakki, kutish CPUni blokirovka qilmasdan amalga oshiriladi "Blink Without Kechikish tutorial. Mana dastur:

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();
}

Pavel o'quv qo'llanmasiga link berdi. Parallax Bu esa Multiplex7Seg Arduino kutubxonasi. Ushbu kutubxona misol kodidan ko'ra umumiydir yuqorida aytilganidek, ishlatilgan pinlar haqida taxminlar keltirmaydi. Lekin katta kutubxona bilan bu kodning orasidagi farq vaqtni belgilaydi boshqariladi:

  • Kutubxonani Taymer 2 to'ldirishni to'xtatish orqali boshqariladi. Bu kerak bir taymerga ega bo'lish uchun juda barqaror vaqtni ta'minlash Ushbu ishga bag'ishlangan.
  • Yuqoridagi kod tez-tez refresh_display() deb nomlangan foydalanuvchini qo'llab-quvvatlaydi yetarli. Bu alohida qo'shimcha qurilmalarga kerak emas, lekin u loop() uchun juda uzoq vaqt talab qilinadigan dasturlar bilan yaxshi o'ynashmaydi: u delay() deb chaqirganingiz kabi bo'lmaydi.
6
qo'shib qo'ydi
Shuning uchun ochiq manba narsalarni yoqtiraman. Dunyo bo'ylab ish yukini baham ko'rishingiz va chindan ham yoqimli bir narsa yaratishingiz mumkin. Keyin yana dunyoning boshqa qismlari bilan o'rtoqlashadi :) Siz boshqa ishlab chiquvchilardan juda ko'p narsani o'rganishingiz mumkin va bu ma'lumot qat'iy va boshqa har qanday kishidan yashirin bo'lmaydi.
qo'shib qo'ydi muallif dotnetengineer, manba

Men sizni LED-ning to'liq asoslari va boshqalar bilan olib boraman. 4-raqamli 7 segmentli displeylar bir nechta "LED texnikasi" ning birikmasidir.

Elektr yoritish LED'lari

LED yoki Light Emitting Diodes, Arduino ning qiziqarli narsalaridan biridir.

Aslida, ularni ishlatish oson, ularni quvvat va ular yoritadi.

Ular bezovtalanishi mumkin, chunki ular polaritning bir turiga ega, ya'ni ular sizni to'g'ri yo'naltirganda ishlaydi. Agar siz ijobiy va salbiy kuchlanishni qaytarib olsangiz, ular umuman yoqilmaydi.

Qanday bezovta qiluvchi bo'lsa, u ham juda foydalidir.

Katod va boshqalar Anode

An'anaviy LEDda uzoq o'q (+), Anode hisoblanadi. Boshqa qo'rg'oshin esa (-) katotdir.

"Yoki, agar kimdir oyoqlarini kesib tashlasa, LEDning tashqi qopqog'idagi tekis chekkani topishga harakat qiling, tekis qirraga yaqin pin salbiy, katod pin bo'ladi." - Sparkfun

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

Sparkfun

Asosiy simli aloqa

Internetning rasmini yirtib tashlaganim uchun, bu to'g'ri yoki aniq emasligiga amin emasman.

Basic LED wiring

LEDni payvandlash juda oson, Anote (+) musbat voltajga, tercihen oqim cheklash rezistoriga ulanadi. Katod (-) erga ulanadi (agar siz ijobiy tomonga ega bo'lmasangiz oqim limiti qarshiligi bilan).

Mavjud cheklash qarshiligi LEDni yoki Microcontroller/Arduino shikastlanishiga olib keladi.

Bir nechta LED, matrits, RGB nuri

Bir nechta LED bilan ko'pincha ijobiy tomonni (+), "keng tarqalgan Anote" ni yoki (-) "umumiy katot" ga ulangan holda ularni qo'llashingiz mumkin.

Asosan u bunga tushadi.

RGB common cathode/anode

Umumiy katot uchun siz o'zingiz istagan pinlarni oqartirasiz.

Umumiy anot uchun LEDni oqim bilan chayqatasiz.

Multiplekslash (bir nechta raqam, 7 segment)

You should check out the tutorial of parallax: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

Parallax 4digit7seg

Sizda juda ko'p LEDlar mavjud bo'lganida, ularni "ko'paytirish" ko'pincha aqlli. Odatda siz LED-larning "guruhlari" orqali tezkor tarzda harakatlanasiz, ular bir vaqtning o'zida hammasi kabi ko'rinadi.

Odatda siz oqimni LEDning bir sütunundan va besleme oqimidan bir qator LED indikatoriga chiqarasiz.

Yoki siz LEDning bir sütununa va bir qator LED indikatoridan oqimlarni oqim bilan ta'minlaysiz.

Shunday qilib siz qaysi ustunni faollashtirishni tanlashingiz va qaysi ustunning qaysi yoritgichlari yoritilishini tanlashingiz mumkin. Ushbu ustunlarni/satrlarni tezda o'zgartirish sizni bir nechta LEDni juda kam pim bilan boshqarishga imkon beradi.

Agar sizda dasturiy ta'minotni almashtirish haqida g'amxo'rlik qilishni istamasangiz, buning uchun ekran nazoratchilari ham bor.

Shunday qilib, siz 4 ta raqam, 7 multipleksli segment, umumiy anot mavjud bo'lganda

Diagramma shunga o'xshash bo'ladi:

enter image description here

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

5
qo'shib qo'ydi