DIY Devir Sayaci

DIY Devir Sayaci

Sümer Yamaner' Alıntı:
... Bu arada Türker'ciğim senin projeyi bekletiyorum ki arada biraz daha para biriktir... :p :D
Tahmin ediyordum Sümer abi, bankacım sürekli soruyor " Bu kadar parayı niye açıkta tutuyorsunuz vade yapmıyorsunuz ? " diye. Ben onun yeri belli diyorum, dokunmayın sakın. :laugh: :lollol: :lol:

Yeni ekran süper olmuş Sümer abi, bende bundan istiyorum. :laugh:
 
DIY Devir Sayaci

Türker Akgün' Alıntı:
Tahmin ediyordum Sümer abi, bankacım sürekli soruyor " Bu kadar parayı niye açıkta tutuyorsunuz vade yapmıyorsunuz ? " diye. Ben onun yeri belli diyorum, dokunmayın sakın. :laugh: :lollol: [emoji38]
Yeni ekran süper olmuş Sümer abi, bende bundan istiyorum. :laugh:
Ohh ohh süper. Ben türbin motor siparişimi kesinleştireyim. :)

SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
 
DIY Devir Sayaci

Sümer Yamaner' Alıntı:
Bu akşam biraz daha yol aldık.
Üzülerek şimdilik de olsa bir library ile sürüyorum göstergeyi. Muhtemelen ileride doğrudan sürerim. Çünkü her zamanki gibi library dokümantasyonu sıfır. Ancak deneme yanılma ile yol alınabiliyor. Yine de şimdilik emin adımlarla ilerliyoruz.
Bence sonuç gayet başarılı :thumbup: Peki LOGO yazımış ne olacak ?? Artık onu kutunun üstüne sticker şeklinde yazarız :)
 
DIY Devir Sayaci

8 haneli ve 8 segmentli led göstergeyi seri porttan aldığım rakam değerleri ile sürmek için aşağıdaki kodu kullanmıştım, hem de kütüphanesiz :). Belki işine yarayabilir Sümer abi...

Şimdi aklıma düştü, madem kütüphanesi varmış ben bu kadar kodu niye yazmıştım acaba, onu hatırlayamadım :D :D :D ...

Kod:
//         A
//      _______
//     |       |
//   F |   G   | B
//     |_______|
//     |       |
//   E |       | C
//     |_______|  o  H
//
//         D

// 8 DIGIT LED DISPLAY
#define DIGITS 8
// SINK PINS FOR 8 DIGITS
int gPin[DIGITS] = {14,15,16,17,18,19,11,10};        //A0,A1,A2,A3,A4,A5,D11,D10
long digi[DIGITS];
int DTime = 4;
long sNum;

void d_PREP() {
    PORTD &= B00000011; // 2 - 7 0'lanıyor,  0,1(TX/RX) değişmiyor
    PORTB &= B11111100; // 8 - 9 0'lanıyor, diğerleri değişmiyor
}

void setup(){
    DDRD |= B11111100; // 2 - 7 output,  0,1(TX/RX) değişmiyor
    DDRB |= B00000011; // 8 - 9 output, diğerleri değişmiyor
    d_PREP();          // 2 - 7 0'lanıyor, 8 - 9 0'lanıyor, 0,1(TX/RX) ve diğer pinler değişmiyot
    for (int i=0;i<DIGITS;i++){
        pinMode(gPin[i], OUTPUT);
    }
    Serial.begin(9600);
}

void loop(){
    if (Serial.available() > 0) {
        sNum = Serial.parseInt();
        digiCalc(sNum);
    }
    for (int i=0;i<DIGITS;i++){
        int j = (DIGITS - 1) - i;
        digitalWrite(gPin[i], LOW);
        pickNumber(digi[j]);
        digitalWrite(gPin[i], HIGH);
        delay(DTime);
        digitalWrite(gPin[i], LOW);
    }
}

void digiCalc(long num){
    // Serial.println(num);
    /*for (int i=0;i<DIGITS;i++){
        long j = (DIGITS - 1) - i;
        long k = 0.5 + pow(10,j);
        digi[j] = num / k;
        num = num - (digi[j] * k);
    }*/
    digi[7] = num / 10000000;
    num = num - (digi[7] * 10000000);
    digi[6] = num / 1000000;
    num = num - (digi[6] * 1000000);
    digi[5] = num / 100000;
    num = num - (digi[5] * 100000);
    digi[4] = num / 10000;
    num = num - (digi[4] * 10000);
    digi[3] = num / 1000;
    num = num - (digi[3] * 1000);
    digi[2] = num / 100;
    num = num - (digi[2] * 100);
    digi[1] = num / 10;
    num = num - (digi[1] * 10);
    digi[0] = num / 1;
}

void d_dot() {
    // DIGIT -FEDCBA00
    PORTD |= B00000000;
    // DIGIT -000000HG
    PORTB |= B00000010;
}

void d_zero(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B11111100;
    // DIGIT -000000HG
    PORTB |= B00000000;
    if(bDot) d_dot();
}

void d_one(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B00011000;
    // DIGIT -000000HG
    PORTB |= B00000000;
    if(bDot) d_dot();
}

void d_two(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B01101100;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}

void d_three(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B00111100;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}

void d_four(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B10011000;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}

void d_five(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B10110100;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}

void d_six(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B11110100;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}

void d_seven(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B00011100;
    // DIGIT -000000HG
    PORTB |= B00000000;
    if(bDot) d_dot();
}

void d_eight(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B11111100;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}

void d_nine(boolean bDot){
    // DIGIT -FEDCBA00
    PORTD |= B10111100;
    // DIGIT -000000HG
    PORTB |= B00000001;
    if(bDot) d_dot();
}
 
void pickNumber(char x){
    d_PREP();
    switch(x){
        case 0: d_zero(0); break;
        case 1: d_one(0); break;
        case 2: d_two(0); break;
        case 3: d_three(0); break;
        case 4: d_four(0); break;
        case 5: d_five(0); break;
        case 6: d_six(0); break;
        case 7: d_seven(0); break;
        case 8: d_eight(0); break;
        case 9: d_nine(0); break;
        default: d_dot(); break;
    }
}
 
DIY Devir Sayaci

Vahh yazııkkk klavyeneee... Çok üzüldüm şimdi. :p

Bu kodu nasıl bir donanım ile kullandın? Orası zurnanın zırt dediği yer. :)

7 segment gösterge için iki temel yaklaşım var. Birisi işlemciden 8 port segmentler için, kaç hane olacaksa o kadar port da haneler için alıp bağlamak. İkincisi ise üç hat ve shift register kullanarak seri iletim yapmak. Devre tasarımı ve uygulaması açısından ikincisi çok avantajlı çünkü üzerinde iki adet 74HC595 bulunan dört haneli 7 segment gösterge modülü 2.5 dolar civarında. Bu plaketi kendi boyutunda bir plaketin üzerine monte ederek işi bitirmek mümkün. Son derece kompakt bir yapı elde ediliyor ve ekstra zahmetli bir baskılı devre tasarımından kurtarıyor.

Benim kullandığım kütüphaneyi inceledim. Sonuçta yaptığı basit shiftout komutu ile veri aktarmaktan ibaret. Bunu kütüphanesiz de yapabilirim. Ancak modülün teknik özellikleri bilinmiyor. Muhtemelen bir byte segment datası bir byte da hane datası iletiliyor. Onu biraz denemeyle bulup tablosunu hazırlayacağım.

Asıl sorun multiplekslemenin sürekli yapılması. Yani ekranın sürekli ve düzenli olarak tazelenmesi gerekiyor. Kullandığım kütüphane bu konuda başarılı değil. Ben de bir timer interrupt kullanarak saniyede 60 kez tazeleme sağladım.

Şimdi biraz daha sistematik çalışıp tüm bilinmeyen noktaları da dokümante edersem kendi kütüphanemi oluşturabilirim.
 
DIY Devir Sayaci

Elimde tamamen yalın 2 tane 4 haneli LED gösterge modülü vardı ve bunlara 8 basamak yazdırmam gerekiyordu, o sebeple bu kodu yazdım. Shift register olmadığından dolayı, arduino'nun 8 adet pinini(PORTB'nin son 6 pini ve PORTD'nin ilk 2 pini), segmentler için kullandım. Daha sonra da 8 adet pini de her bir hanenin sink pinine bağlı 2n2222'yi sürmek için kullandım.

Ve de bu göstergenin her bir hanesi için mecburen blocking delay kullandım. 4ms'lik delay harika iş gördü ...

Ama kabloları bağlamak gerçek bir işkenceydi :) .

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol
 
DIY Devir Sayaci

Kütüphane iptal. Misyonunu tamamladı. Bana nasıl yapacağımı öğretti. Birkaç deneme yanılma sonrası artık tüm kontrol bende! :)

Bu VIDEOYU görmek için izniniz yok. Giriş yap veya üye ol

Yaklaşık 60 Hz tazeleme frekansı ile çalışıyor. Normalde en ufak bir titreşim hissedilmiyor.
 
DIY Devir Sayaci

Sümer Yamaner' Alıntı:
Kütüphane iptal. Misyonunu tamamladı. Bana nasıl yapacağımı öğretti. Birkaç deneme yanılma sonrası artık tüm kontrol bende! :)

Yaklaşık 60 Hz tazeleme frekansı ile çalışıyor. Normalde en ufak bir titreşim hissedilmiyor.
Istedigini yapincaya kadar gosterdigin azim takdire sayan abi, Supersin :bravo: :thumbup:
 
DIY Devir Sayaci

Devir saati adaptasyonu tamamlandı. Son aşama Arduino yerine Attiny85 işlemci kullanıp önce breadboard testi sonra plaket tasarımı ile nihai ürün...
Sanırım yarın akşam prototip hazır olur. Fotoğraflarını paylaşırım... Bu akşamki mesaim bitti...
 
DIY Devir Sayaci

Kötü çuvalladık...
7 segment göstergenin sürekli tazelenmesi gerekiyor. Bunun için de bir timer ve interrupt kullanılıyor. Ana kod zamanlama ve sayma için zaten Timer1'i kullanıyordu. Arduino'da gösterge tazeleme için ben de Timer2'yi kullandım. Gayet güzel oldu. Ama Attiny85'e geçince işler karıştı. Attiny'de sadece iki timer var. Dolayısıyla tazeleme interruptu için Timer0 kalıyor geriye. Arduino sistemi ise Timer0'ı kendi zamanlama işlemleri için rezerve etmiş durumda. Kullanmama izin vermiyor. Burada kötü takıldım. Arduino forumuna yazdım. Bakalım nasıl bir yol bulacağım. Mehmet istediğimi yapıncaya kadar gösterdiğim azimden söz ediyordu ya. Bakalım o azmi şimdi göreceğiz. :)
 
DIY Devir Sayaci

OBEB OKEK gibi iki timer'in ortak carpani boyutunda bir timer yazilip cozulebilir mi ?

Ornegin biri 6ms diger 8ms'de bir calismasi gerekiyor. Timer 2ms'ye kurulur. Bir degisken 1,2,3,4,1,2,3,4 gidecek sekilde ayarlanir 3 ise ilk timer'in geregini 4 ise ikincisinin geregini 1 yada 2 ise hicbirseyi yapmaz gibi.
 
DIY Devir Sayaci

Sümer Yamaner' Alıntı:
...Arduino forumuna yazdım. Bakalım nasıl bir yol bulacağım. Mehmet istediğimi yapıncaya kadar gösterdiğim azimden söz ediyordu ya. Bakalım o azmi şimdi göreceğiz. :)
Bence sonuc belli ama yine de teyid icin biraz bekleyelim abi :laugh: ;D
 
DIY Devir Sayaci

Hikmet G' Alıntı:
OBEB OKEK gibi iki timer'in ortak carpani boyutunda bir timer yazilip cozulebilir mi ?

Ornegin biri 6ms diger 8ms'de bir calismasi gerekiyor. Timer 2ms'ye kurulur. Bir degisken 1,2,3,4,1,2,3,4 gidecek sekilde ayarlanir 3 ise ilk timer'in geregini 4 ise ikincisinin geregini 1 yada 2 ise hicbirseyi yapmaz gibi.

Pek kafama yatmadı...

Mehmet Kucuksari' Alıntı:
Bence sonuc belli ama yine de teyid icin biraz bekleyelim abi :laugh: ;D

Herifler ciddi ciddi aptal (Arduino forumdakiler). Ayrıntılı anlatıma rağmen nereleri ile okuyup anladılar bilmiyorum ama işe yarar bir yanıt yok.
Ben şimdi farklı bir çözüm düşündüm. Onu test edeceğim.