Arduino ile 3 adet 4 digit 7 segment kullanımı
  • İyi çalışmalar.Arduino ile 3 adet sıcaklık sensöründen gelen veriyi 3 farklı 4 digit 7 segment displayde göstermek istiyorum.Nasıl bir kod yazmalıyım.
    1 adet 4 digit 7 segment display komutu altta belirtimiştir.

    const int D1=4;
    const int D2=5;
    const int D3=6;
    const int D4=7;
    const int digitPins[] = {D1, D2, D3, D4}; //4 common anode pins of the

    display
    const int clockPin = 11; //74HC595 Pin 11
    const int latchPin = 12; //74HC595 Pin 12
    const int dataPin = 13; //74HC595 Pin 14
    const int tempPin = A0; //temperature sensor pin
    const byte digit[10] = //seven segment digits in bits
    {
    B00111111, //0
    B00000110, //1
    B01011011, //2
    B01001111, //3
    B01100110, //4
    B01101101, //5
    B01111101, //6
    B00000111, //7
    B01111111, //8
    B01101111, //9
    };
    int digitBuffer[4] = {0};
    int digitScan = 0, flag=0, soft_scaler = 0;

    float tempC,tempK;

    void setup(){
    for(int i=0;i<4;i++)<br /> {
    pinMode(digitPins[i],OUTPUT);
    }
    pinMode(tempPin, INPUT);
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);

    }

    //writes the temperature on display
    void updateDisp(){
    for(byte j=0; j<4; j++) <br /> digitalWrite(digitPins[j], LOW);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
    digitalWrite(latchPin, HIGH);

    delayMicroseconds(100);
    digitalWrite(digitPins[digitScan], HIGH);

    digitalWrite(latchPin, LOW);
    if(digitScan==2)
    shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | B10000000));

    //print the decimal point on the 3rd digit
    else
    shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);

    digitalWrite(latchPin, HIGH);
    digitScan++;
    if(digitScan>3) digitScan=0;
    }

    void loop(){
    tempK = analogRead(tempPin);

    tempC = tempK * 0.4887; //500Volt giriş için 5V karşılık gelen 0.489'un 10 katı alındı


    tempC = int(tempC*10);
    digitBuffer[0] = int(tempC)/1000;
    digitBuffer[1] = (int(tempC)%1000)/100;
    digitBuffer[2] = (int(tempC)%100)/10;
    digitBuffer[3] = (int(tempC)%100)%10;


    updateDisp();
    delay(2);
    }
  • 12 tane 7 digit suruyormuş gıbı duşün ona gore tasarımını yaparsın
  • İyi çalışmalar.Bu durumda 12 tane 74hc595 mi kullanmam gerekiyor
  • oyle gorunuyor ama kontrol ıcın bıraz datasheet ve protokol ıncelemen lazım. entegrelerin çıkışı 7. bit onu diğerinin girişine bağlaman lazım ayrıca regıster ve strob bacaklarınıda ayrı ayrı surmen gerekebılır bu kadar dısplayı baglayhınca tum protokolu kendın yazıp yonetmen lazım. birer birer ekle kontrol programınıda birer birer ekleyerek yaz geliştir birden hepsını montaj yaptıgında buyuk ıhtımal çalışmayacaktır. yada yapılmış bir proje bulup ıncelemek senın ıcın en uygun yol olacak.
  • yukarıda anlattıgım yontem seri verıyı 7 segmentte gostermek ıcın ama dotmatrıx gıbı sürüp multıplexer mantığı da yapabilirsin çok zaman kaybettırıcı işler yoksa ana işlerde tum ledleri aynı anda surebılırsın. bu durumda 4x8x3=96 led surecek bır surucu ıle multıplex çözebılırsın.
    şuradaki projede 64 ledi 2 tane hc595 ile suruyor sen 4 tanesi ile 128 ledi surersın
    https://www.sunfounder.com/learn/Super-Kit-V2-0-for-Arduino/lesson-12-dot-matrix-led-display-super-kit.html

    dotmatrix led kullanmayacaksın sen tabi sadece baglantı mantıgını 7 segmente gore planlayacaksın
  • En basit max7219 yada 7921 entegresi ile yaparsın 8 digite kadar tek entegre ile sürüyosun. Şuanda 3 tane ile 24 digit kullanıyorum. Örnekte çok var internette bence boşa 74hc595 ile uğraşma. Digitlerin sırasınıda karıştırmazsın digit0 dan digit7 ye kadar ayrı ayrı yazıyor. SegmentA-SegmentDp ye kadar oda ayrılmış baya güzel bir entegre ayrıca tek entegre ile 64 tane ledde sürebiliyosun. 8x8 öylede kullandım. Bence bi araştır.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.