Nixie Saat/Gösterge Yapıyoruz

Başlatan FxDev, 13 Ekim 2016, 19:12:30

FxDev

Tekli nixie'de gol yemiştim. Şimdi hatalarından arındırdım. 5V'tan 170V elde edince işler daha da kolaylaştı ve daha önceki devrede olan butonları ve ledleri kaldırdım. Yerine Buzzer koydum. Bakalım gelince diklerde de denemek lazım.

Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

FxDev

Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

gokhangokcen

Buda benim yapmış olduğum (normalde nixie olması lazım ama imkansızlıklar..) displayli dijital saat projesi



















Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

MrDarK

gokhangokcen çok başarılı bir tasarım olmuş. Şimdiye kadar gördüklerim arasında tasarım konusundaki en iyisi !

Böyle bir tasarımın maliyeti ne kadar tuttu ?
Picproje Eğitim Gönüllüleri ~ MrDarK

vedo35

Merhabalar gokhangokcen cok guzel bir tasarim ve calisma olmus tebrik eder, bizlerle paylastigin icin ayrica tesekkur ederim. Yanliz bir sorum olacak bende coktandir VFD displayli saat yapma isine girmistim epey ugrasmistim ama olmadi. Display olarak DVD oynaticilarin displayini sectim. PT6312 olanlardan. Sizde boyle bir calisma varmi? Bu arada o zamanlar googleda arastirdigimda Nixie tuplu saatler bildigimiz Elketron lambali, oysa seninkisi Led displayli. Bildigim kadari ile nixie tup boyle degildi. Cevabini bekliyorum. Ornek su linkte:
https://neon1.net/nixieclock/
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

gokhangokcen

@MrDarK üstad saati deneme yanılmalar ile birlikte çöpe attığım lazer kesimleri vs takribi 700tl yi buldu. Ama tekrardan yapacak olursam 150tl gibi bir maliyetle biteceğini düşünüyorum yenisinin çalışmalarına başladım.Aslında yapmak istediğim http://www.instructables.com/id/Lamina-Nixie-Clock/ linkteki üründü. Çizimlerini falan ayarladım. Yurt dışından bir arkadaşım in14 nixie tube getirecek yakın tarihte inşaAllah onunla projeyi sonlandırmak istiyorum.
@vedo35 hocam vfd ile çalışmadım. Nixieler ile çalışma yapacağım. Malzeme bekliyorum
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

vedo35

Nixie ile VFD ayni mantik ile calismiyormu? Benim incelemelerimde oyle idi. Bu pt6312 ler seri girisli sadece 1 i 2 yi gosterecek tanimlamalar yapilmasi lazim. VFD driver +5 ve VFD gosterge icin -24V yada -45 V olan tipleride vardi. Onu Displayinizin gri voltajina gore belirliyorsunuz.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

Zoroaster

 Nixi ve VFD çok benzer. VFD de fazladan grid var.
Seytan deliginden kacti.

gokhangokcen

#98
üstadlar yapmış olduğum saatin programı üzerinde sizlerin yardımına(tavsiyelerine) ihtiyacım var. sıkıntım şu; her 7 segment display devresinde oluşabilecek tarama yaparken "titreme" sorunu muhtemelen ds18b20 sensörünü ve ds3231 rtc yi okur iken oluşan zaman gecikmelerinden kaynaklı sıkıntım var. Displaylerde birbirinin gölgesi çıkıyor. Programı şu pozisyonda deneme amaçlı yazıp üzerindeki düzenlemeleri sizlerin sayesinde son nokta haline getirip bırakacağım. Belki birilerine de faydası olur.

isis şematiği çalışmadım. Direkt pcb üzerinde kurulu düzenle ıcsp üzerinden yükleyerek çalıştım. Bağlantılar ise şöyle;

DS3231 SDA = pin_C4, SCL = pin_C3 donanımsal ı2c ile direkt ilişkilendirildi.
DS18B20 = Pin_B2
74hc595 = Data Pin =PIN_D5 ,Enable pin = PIN_D6 ,Clock Pin = PIN_D7 (Reset pini(10) direkt "+" OE pini direkt "-" de)
Display Tarama uçları = Pin_D4 ve Pin_D3

Main.c

#include <16F877A.h>
#include <74595.c>



#fuses XT,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP

#use delay(clock=4000000)
#use I2C(Master, SDA = pin_C4, SCL = pin_C3)

#define arti PIN_A0
#define eksi PIN_A1
#define enter PIN_A2
#define dsp1 PIN_D4
#define dsp2 PIN_D3
//#define ONE_WIRE_PIN PIN_B0


#use fast_io(a)
//#use fast_io(b)
//#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

#include "DS3231.c"
#include "ds18b20.c"


/**********************************Display Tanımlamaları*********************************/
const int digit[12]={0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE,0x72,0xC6};
//                     0 ,  1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9 , C  , o
const int ndigit[12]={0x7F,0x0D,0xB7,0x9F,0xCD,0xDB,0xFB,0x0F,0xFF,0xDF,0x73,0xC7};
//          noktalı    0 ,  1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9 ,  C  , o

/**********************************DS3231 Tanımlamaları*********************************/
unsigned int set;
unsigned char s = 00;
unsigned char min = 57;
unsigned char hr = 14;
unsigned char dy = 5;      //1 pazar 2 pazartesi 3 salı 4 çrşmba 5 perşmbe 6 cuma 7 cumartesi
unsigned char dt = 9;      // gün
unsigned char mt = 02;     //Ay
unsigned char yr = 17;     //yıl
short hr_format = _24_hour_format;
short am_pm = 0;

/**********************************Global Değişkenler*********************************/
unsigned int sayac,s1,s2,min1,min2,hr1,hr2,dt1,dt2,mt1,mt2,yr1,yr2,dr1,dr2,temperature=99;
int data[3];
unsigned long sure,x=0,deger=0;


/**********************************Display Tarama Kesmesi*********************************/
#int_timer0
void timer0_kesme ()
{
x++; //kesme ile arttır
  sayac%=2;                  // reset to 0 if > 1 
  if (!sayac)               // test for digit 0 
  { 
       output_high(dsp1);
       if (sure<7000){
       s1 = s/10;
       min1 = min/10;
       hr1 = hr/10;
       data[2]=digit[s1];data[1]=digit[min1];data[0]=digit[hr1];}
       if (sure>=7000&&sure<7500){
       dt1 = dt/10;
       mt1 = mt/10;
       yr1 = yr/10;
       data[0]=digit[dt1];data[1]=digit[mt1];data[2]=digit[yr1];
       }
       if (sure>=7500&&sure<8000){
       dr1 = temperature/10;
       data[0]=0x00;data[1]=digit[dr1];data[2]=digit[11];
       }
       write_expanded_outputs(data);
       output_low(dsp1);
  #asm
  nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
  #endasm
  }else{
       output_high(dsp2);
       if (sure<7000){
       s2 = s%10;
       min2 = min%10;
       hr2 = hr%10;
       data[2]=digit[s2];data[1]=ndigit[min2];data[0]=ndigit[hr2];}
       if (sure>=7000&&sure<7500){
       dt2 = dt%10;
       mt2 = mt%10;
       yr2 = yr%10;
       data[0]=ndigit[dt2];data[1]=ndigit[mt2];data[2]=digit[yr2];
       }
       if (sure>=7500&&sure<8000){
       dr2 = temperature%10;
       data[0]=0x00;data[1]=digit[dr2];data[2]=digit[10];
       }
       write_expanded_outputs(data);
       output_low(dsp2);
  #asm
  nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
  #endasm       
   }
   sure++;if(sure>8000)sure=0;
   sayac++;if(sayac>1)sayac=0;
   
}



/**********************************Ana Program*********************************/
void main()
{
   setup_psp(PSP_DISABLED); // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32|RTCC_8_bit);
   enable_interrupts(INT_TIMER0);                            
   enable_interrupts(GLOBAL);
   setup_comparator(NC_NC_NC_NC);
   setup_adc(ADC_OFF);
   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_OFF);
   
   set=DS3231_read(controlREG);
   if(bit_test(set,7)){DS3231_init();}

set_tris_a(0x07);
set_tris_d(0x00);
set_tris_e(0x00);

output_d(0x00);
output_e(0x00);

         //setTime(hr, min, s, am_pm, hr_format);
         //setDate(dy, dt, mt, yr);

while(TRUE)
{

//getTime(hr, min, s, am_pm, hr_format);
//getDate(dy, dt, mt, yr);
temperature = ds1820_read();
getDate(dy, dt, mt, yr);
getTime(hr, min, s, am_pm, hr_format);  

}
}


74595.c

///////////////////////////////////////////////////////////////////////////
////   Library for a 74595 Expanded Output Chip                        ////
////                                                                   ////
////   Any number of these chips may be connected in serise to get     ////
////   8 additional outputs per chip.  The cost is 3 I/O pins for      ////
////   any number of chips.                                            ////
////                                                                   ////
////   write_expanded_outputs(eo);  Writes the array eo to the chips   ////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services           ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                               ////
///////////////////////////////////////////////////////////////////////////

#IFNDEF EXP_OUT_ENABLE

/*#define EXP_OUT_ENABLE  PIN_B0
#define EXP_OUT_CLOCK   PIN_B1
#define EXP_OUT_DO      PIN_B2
#define NUMBER_OF_74595 1*/
#define EXP_OUT_ENABLE PIN_D6
#define EXP_OUT_CLOCK PIN_D7
#define EXP_OUT_DO PIN_D5

#define NUMBER_OF_74595 3

#ENDIF


void write_expanded_outputs(BYTE* eo) {
  BYTE i;

  output_low(EXP_OUT_CLOCK);
  output_low(EXP_OUT_ENABLE);

  for(i=1;i<=NUMBER_OF_74595*8;++i) {  // Clock out bits from the eo array
    if((*(eo+(NUMBER_OF_74595-1))&0x80)==0)
      output_low(EXP_OUT_DO);
    else
      output_high(EXP_OUT_DO);
   shift_left(eo,NUMBER_OF_74595,0);
   output_high(EXP_OUT_CLOCK);
   output_low(EXP_OUT_CLOCK);
  }
  output_high(EXP_OUT_ENABLE);
  output_low(EXP_OUT_ENABLE);
}


DS3231.c

#include "DS3231.h"                                                        
                                                                  
                                                          
unsigned char bcd_to_decimal(unsigned char d)                
{                                                                                          
         return ((d & 0x0F) + (((d & 0xF0) >> 4) * 10)); 
}                                
                                                              

unsigned char decimal_to_bcd(unsigned char d) 
{ 
         return (((d / 10) << 4) & 0xF0) | ((d % 10) & 0x0F); 
}                                                    
                                        
                  
unsigned char DS3231_Read(unsigned char address) 
{                                      
         unsigned char value = 0; 
         I2C_start();                                                      
         I2C_write(DS3231_Write_addr);      
         I2C_write(address);            
         I2C_start();                  
         I2C_write(DS3231_Read_addr);    
         value = I2C_read(0);                      
         I2C_stop();                  
         return value; 
}                      


void DS3231_Write(unsigned char address, unsigned char value)    
{  
         I2C_start();                  
         I2C_write(DS3231_Write_addr); 
         I2C_write(address); 
         I2C_write(value);    
         I2C_stop(); 
}  


void DS3231_init() 
{                                    
         DS3231_Write(controlREG, 0x00);  
         DS3231_Write(statusREG, 0x08); 
}                        


void getTime(unsigned char &p3, unsigned char &p2, unsigned char &p1, short &p0, short hour_format) 
{                        
         unsigned char tmp = 0; 
         p1 = DS3231_Read(secondREG); 
         p1 = bcd_to_decimal(p1); 
         p2 = DS3231_Read(minuteREG); 
         p2 = bcd_to_decimal(p2); 
         switch(hour_format) 
         {                                              
                  case 1:          
                  {          
                           tmp = DS3231_Read(hourREG); 
                           tmp &= 0x20; 
                           p0 = (short)(tmp >> 5);              
                           p3 = (0x1F & DS3231_Read(hourREG)); 
                           p3 = bcd_to_decimal(p3);                            
                           break;      
                  }    
                  default: 
                  { 
                           p3 = (0x3F & DS3231_Read(hourREG));            
                           p3 = bcd_to_decimal(p3);    
                           break;      
                  } 
         }  
}                                  
                                                      
                                
void getDate(unsigned char &p4, unsigned char &p3, unsigned char &p2, unsigned char &p1) 
{ 
         p1 = DS3231_Read(yearREG); 
         p1 = bcd_to_decimal(p1);                  
         p2 = (0x1F & DS3231_Read(monthREG)); 
         p2 = bcd_to_decimal(p2);                                
         p3 = (0x3F & DS3231_Read(dateREG)); 
         p3 = bcd_to_decimal(p3);    
         p4 = (0x07 & DS3231_Read(dayREG));    
         p4 = bcd_to_decimal(p4);                    
} 

                                                    
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format)  
{                                                                                                              
         unsigned char tmp = 0; 
         DS3231_Write(secondREG, (decimal_to_bcd(sSet))); 
         DS3231_Write(minuteREG, (decimal_to_bcd(mSet)));        
         switch(hour_format) 
         { 
                  case 1: 
                  {        
                           switch(am_pm_state) 
                           { 
                                    case 1: 
                                    {            
                                             tmp = 0x60; 
                                             break; 
                                    } 
                                    default: 
                                    {    
                                             tmp = 0x40; 
                                             break; 
                                    } 
                           }                            
                           DS3231_Write(hourREG, ((tmp | (0x1F & (decimal_to_bcd(hSet))))));                    
                           break; 
                  }                                              
                  
                  default: 
                  { 
                           DS3231_Write(hourREG, (0x3F & (decimal_to_bcd(hSet)))); 
                           break; 
                  }  
         }    
}                                                  

                                    
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet) 
{          
         DS3231_Write(dayREG, (decimal_to_bcd(daySet)));            
         DS3231_Write(dateREG, (decimal_to_bcd(dateSet)));  
         DS3231_Write(monthREG, (decimal_to_bcd(monthSet))); 
         DS3231_Write(yearREG, (decimal_to_bcd(yearSet)));    
} 

                                
float getTemp()                                                  
{ 
         register float t = 0.0; 
         unsigned char lowByte = 0; 
         signed char highByte = 0; 
         lowByte = DS3231_Read(tempLSBREG); 
         highByte = DS3231_Read(tempMSBREG);  
         lowByte >>= 6;                  
         lowByte &= 0x03;      
         t = ((float)lowByte);  
         t *= 0.25;      
         t += highByte;          
         return t; 
                                      
}


DS3231.h

#define DS3231_Address              0x68            
                                                  
#define DS3231_Read_addr            ((DS3231_Address << 1) | 0x01) 
#define DS3231_Write_addr           ((DS3231_Address << 1) & 0xFE) 
                                            
#define secondREG                   0x00 
#define minuteREG                   0x01 
#define hourREG                     0x02 
#define dayREG                      0x03 
#define dateREG                     0x04                              
#define monthREG                    0x05                            
#define yearREG                     0x06                    
#define alarm1secREG                0x07        
#define alarm1minREG                0x08 
#define alarm1hrREG                 0x09            
#define alarm1dateREG               0x0A  
#define alarm2minREG                0x0B    
#define alarm2hrREG                 0x0C 
#define alarm2dateREG               0x0D 
#define controlREG                  0x0E 
#define statusREG                   0x0F 
#define ageoffsetREG                0x10 
#define tempMSBREG                  0x11 
#define tempLSBREG                  0x12 
                                  
#define _24_hour_format             0 
#define _12_hour_format             1 
#define am                          0 
#define pm                          1 

                                                                
unsigned char bcd_to_decimal(unsigned char d); 
unsigned char decimal_to_bcd(unsigned char d);                      
unsigned char DS3231_Read(unsigned char address); 
void DS3231_Write(unsigned char address, unsigned char value); 
void DS3231_init();  
void getTime(unsigned char &p3, unsigned char &p2, unsigned char &p1, short &p0, short hour_format);  
void getDate(unsigned char &p4, unsigned char &p3, unsigned char &p2, unsigned char &p1);    
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format); 
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet);    
float getTemp();


DS18B20.c

//Bu kodu ds18b20.c olarak kaydediniz
// (C) copyright 2003 j.d.sandoz / jds-pic !at! losdos.dyndns.org 
 
#define ONE_WIRE_PIN PIN_B2 // sensörün DQ bacağının bağlanacağı pin
void onewire_reset()
{
output_low(ONE_WIRE_PIN);
delay_us( 500 ); //1-wire resetleme için sıfıra çekilir
output_float(ONE_WIRE_PIN); //1-wire bir yapılır
delay_us( 500 ); // sensörün hazırlanması için beklenir.
output_float(ONE_WIRE_PIN);
} 
 
void onewire_write(int data)
{
int count;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // Sensöre yazma işlemine başlamak için 1-wire sıfıra çekilir.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // yazılacak bilgi 1-wire'da
delay_us( 60 ); // Yazma işlemi zamanı doldurulur.
output_float(ONE_WIRE_PIN); // 1-wire bir yapılır,
delay_us( 2 ); // 1us'den fazla beklenir.
}
} 
 
int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); //Sensördem okuma işlemi içinl 1-wire sıfıra çekilir.
output_float(ONE_WIRE_PIN); //1-wire bir yapılır,
delay_us( 8 ); // Sensörün kendine gelmesi beklenir,
shift_right(&data,1,input(ONE_WIRE_PIN)); // sonuc bilgisi alınır.
delay_us( 120 ); //Okuma işlemi zamanı doldurulur.
}
return( data );
} 
 
float ds1820_read()
{
int8 busy=0, temp1, temp2;
signed int16 temp3;
float result;
onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);
//result = (float) temp3 / 2.0;//18s20
result = (float) temp3 / 16.0;//18b20
//delay_ms(200);
return(result);
}
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

zamzam23

@gokhangokcen tasarım güzel eline sağlık.
herşey güzel yapılır da ahşabı nerden ayarlıyoruz böyle ince işçilikle? :D

gokhangokcen

#100
Çiziyorsun veriyorsun reklamcıya lazer ile ya da cnc ile kesiyorlar @zamzam23

üstadlar program hakkında yorum yapacak yok mu? Kesme içerisinde tarama yapmaktan hoşnut değilim ama nasıl bir yol izleyebilirim? Dışarıya aldığımda düzensiz çalışma söz konusu
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

zamzam23

#101
Alıntı yapılan: gokhangokcen - 14 Şubat 2017, 10:54:41
Çiziyorsun veriyorsun reklamcıya lazer ile ya da cnc ile kesiyorlar @zamzam23

üstadlar program hakkında yorum yapacak yok mu? Kesme içerisinde tarama yapmaktan hoşnut değilim ama nasıl bir yol izleyebilirim? Dışarıya aldığımda düzensiz çalışma söz konusu
Genel olarak şunları söyleyebilirim.
1-)
saat entegresi içerisinde dahili sıcaklık sensörü var. o yeterli gelirse ds18b20 yi iptal edebilirsin.

2-) sıcaklığı tıpkı zaman gibi sürekli okuman gerekmez. her 1dk da bir yada daha uzun bir süre bile olabilir okuma yapabilirsin. ben olsam 5dk da bir okurum.

bunları bir deneyin yine titreme yaparsa o zaman başka bişi düşünelim.

ugurer

Belki bir faydası olur emin değilim ama, saat dakika vb hesaplamaları programın içinde yapabilirsin. Birde tüm digitlere tek seferde değilde sırayla bilgi gönderirsen belki titreme sıkıntısını engelleyebilir. Bir proje için bende 7 segment display kullanıyorum ve şöyle bir yol izliyorum tarama için,
#INT_TIMER0  
void  TIMER0_isr(void) 
{              
 
 switch(syc)                    
  {                    
    case 0:               
      output_low(seg4);                     
      buffer=data[0];                                                                                    
      write_expanded_outputs(&buffer);
      output_high(seg0);
    break;        
    case 1:                    
      output_low(seg0);
      buffer=data[1];    
      write_expanded_outputs(&buffer);         
      output_high(seg1);
    break;
    case 2:                       
      output_low(seg1);
      buffer=data[2];
      write_expanded_outputs(&buffer);
      output_high(seg2);
    break;
    case 3:
      output_low(seg2);         
      buffer=data[3];        
      write_expanded_outputs(&buffer);                       
      output_high(seg3);
    break; 
    case 4:                                       
      output_low(seg3);             
      buffer=data[4];                 
      write_expanded_outputs(&buffer);   
      output_high(seg4);   
    break;                                         
  } 
  syc++;if(syc>4)syc=0;
set_timer0(193);
clear_interrupt(int_timer0);                                                                    
}


gokhangokcen




@ugurer üstad bağlantıları kabaca çizdim dsp1 ve dsp2 uçları npn transistörlerin kollektörüne bağlı. Pic ile sırasıyla 1. display ve 2. grup displayler olarak tarama yapıyorum. 1. transtistör 1. tüpteki 1. display 2. tüpteki 1. display ve 3. tüpteki 1. display'i anahtarlayacak şekilde çalışmaktadır. 2. ise tam tersi şeklinde 74hc595 ler ise komple 1. tüpteki displaylere hitap etmekte 2. tüpe ise 2. 595 gibi.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

Klein

#104
Alıntı YapDisplaylerde birbirinin gölgesi çıkıyor.
Gecikme kaynaklı titreme için bir önerim yok. döngü ile oluşturulmuş delay kullanma, state machine çalıpştır diyebilirim ancak.
Segmentlerin diğer segmente sarkması (gölgelenme) geceikme ile ilgili değil.  Tararken dijit değiştirmeden önce tüm segmentleri karartıp ondan sonra dijit değiştirmelisin. Karartmadan dijit değiştirirsen ya da dijit değiştirmeden önce segmentleri değiştirirsen gölgelenme olur.

Ekleme: Tasarım gerçekten güzel olmuş. Eline sağlık.