Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

7 Segment display sürme

Başlatan Maxim, 07 Haziran 2007, 11:29:36

Maxim

Öğrenmeye çalışıyorum ,

ilk örnek Gramo isimli elektronikçinin sitesinden .
Bu şekilde 4 tane display sürmek için picin 11 adet çıkışını kullanıyoruz .



Kod:

Device 16F877

Xtal = 4

Dim Number As Word

Dim Temp_Byte As Byte
Dim Temp_Word As Word
Dim Ones As Byte
Dim Tens As Byte

Symbol Display_Ones = PORTA.3
Symbol Display_Tens = PORTA.2

Symbol TMR0_Enable = INTCON.5
Symbol TMR0_Overflow = INTCON.2
Symbol GIE = INTCON.7

Symbol Segment_1 = PORTC.0
Symbol Segment_2 = PORTC.1

ON_INTERRUPT Goto Int_Sub
			
Goto Initialization
			
Int_Sub:

	If TMR0_Overflow = 1 And TMR0_Enable = 1 Then
	   
	   TMR0_Overflow = 0                ' Check if TMR0 Overflow occurred
	   If Segment_1 = 1 Then            '  and alternate displays
	   	  Segment_1 = 0
		  PORTB = Tens
	   	  Segment_2 = 1
	   Else 
	   	  Segment_2 = 0
		  PORTB = Ones
	   	  Segment_1 = 1
	   EndIf
	
	EndIf
	
        GIE = 1	
	
	Context Restore
	
Initialization:

		ALL_DIGITAL = True
		PORTB_PULLUPS = False

		TRISB = %00000000               ' Make PORTB all outputs
		Low Segment_1                   '  and setup segment control Pins
		Low Segment_2

		TMR0_Enable = 0
		
		OPTION_REG.0 = 0                ' Setup TMR0
		OPTION_REG.1 = 0                ' 100 = ~8mS Interrupt
		OPTION_REG.2 = 1                ' 
		OPTION_REG.5 = 0                ' 
		TMR0 = 0
		TMR0_Enable = 1
				
		Ones = 0                        ' Reset variables
		Tens = 0                        '
		
        GIE = 1
		
Main:
	 
	 Number = 0

	 Repeat                                    ' Create a loop
	 	 
		 Temp_Word = Number                ' Move the Number register into Temp_Word
		 
		 Gosub Breakdown                   ' Break down to units (ones and tens)

		 Temp_Byte = Ones                  ' Now convert the ones data into segment
		 Gosub Encode_Segment_Display      '  information
		 Ones = Temp_Byte                  '
		 
		 Temp_Byte = Tens                  ' And the same for Tens
		 Gosub Encode_Segment_Display      ' 
		 Tens = Temp_Byte                  '
		 
		 Inc Number                        ' Increment the Number register
		 
		 DelaymS 500                       ' Small delay to slow down counting
		  
	 Until Number = 100                        ' Loop until number = 100, then reset

	 Goto Main                                 ' Loop forever
	 
Breakdown:

	Temp_Byte = DIG Temp_Word, 1               ' DIG Val, X will return the value of X in the number
	Tens = Temp_Byte                           '  For example DIG 9790, 3 = 9 
	Temp_Byte = DIG Temp_Word, 0               '  and DIG 7845, 0 = 5
	Ones = Temp_Byte                           ' Now we know how many ones/tens in the number
			
	Return                                     ' Leave the routine

Encode_Segment_Display:

	SELECT Temp_Byte
	    CASE 0                                 ' Turn  Temp_Byte into segment display data
	   		 Temp_Byte = %00111111
	    CASE 1			
	   		 Temp_Byte = %00000110
	    CASE 2			
			 Temp_Byte = %01011011
	    CASE 3			
	   		 Temp_Byte = %01001111
	    CASE 4			
	   		 Temp_Byte = %01100110
	    CASE 5			
	   		 Temp_Byte = %01101101 
	    CASE 6			
   			 Temp_Byte = %01111100
	    CASE 7			
 			 Temp_Byte = %00000111
	    CASE 8			
			 Temp_Byte = %01111111
	    CASE 9			
 			 Temp_Byte = %01100111		 
	ENDSELECT
	
	Return




********

Bu ete ustanın derslerinden ,
4511 engegresi kullanılarak yapılmış olanı .
Bu şekilde 4 tane display için 8 tane pin harcıyoruz .



kodu:

Programımız ise söyle;
'****************************************************************
'* Name : Sayıcı.BAS *
'* Author : [ETE] *
'* Notice : Copyright (c) 2005 [ERO] *
'* : All Rights Reserved *
'* Date : 17.05.2005 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
@ DEVICE pic16F84A 'islemci 16F628
@ DEVICE pic16F84A, WDT_on 'Watch Dog timer kapalı
@ DEVICE pic16F84A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F84A, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F84A, XT_OSC ‘4 MHz Kristal osilatör kullandık
PortA=0
TrisA=%00000011 ‘portA.0 ve PortA.1 giris digerleri çıkıs yapıldı
PortB=0
TrisB=%00000000 ‘PortB tamamı çıkıs yapıldı.
Symbol TUSA=PORTA.0
SYMBOL TUSB=PORTA.1
SAYI var byte
BIRLER VAR BYTE
ONLAR VAR BYTE
PORTB=0
SAYI=0
'--------------------------------------------------
PAUSE 200
BASLA:
IF TUSA=0 THEN ‘Sayet ilk tusa basılmıs ise
SAYI=SAYI+1 :PAUSE 150 ‘Sayı degerini bir artır ve 150 ms bekle
IF SAYI=100 THEN SAYI=99 ‘Sayı 100 olmuş ise 99 yap çünki 2 digit displayimiz var.
ENDF
IF TUSB=0 THEN ‘Sayet ikinci tusa basılmıs ise
SAYI=SAYI-1:PAUSE 150 ‘Sayı degerini bir azalt ve 150 ms bekle
IF SAYI=255 THEN SAYI=0 ‘sayı 255 olmuş ise (sıfırdan sonra tekrar 255 olur) sayı yı 0 yap.
ENDF
BIRLER=SAYI DIG 0 ‘Birler hanesi Sayının sıfırıncı digitidir.
ONLAR= SAYI DIG 1 ‘Onlar hanesi sayının birinci digitidir.
PORTB=240 | BIRLER ‘PortB nin üst 4 biti daima High olmalı bu nedenle 240 kullanıyoruz.
LOW PORTB.5 ‘Birler hanesi 4511 (LE ) sini Low yaptık yeni sayı çıkısta demektir.
PAUSE 1 ‘Biraz bekledik
HGH PORTB.5 ‘Tekrar (LE) yi High yaptık.
PAUSE 1
PORTB=240 | ONLAR ‘PortB ye (240 OR ONLAR) sonucunu koyduk . Söylede olabilirdi (240+onlar)
LOW PORTB.4 ‘ 4511 in (LE) si enable yapıldı
PAUSE 1
HGH PORTB.4 ‘ LE, tekrar disable yapıldı
PAUSE 2
GOTO BASLA
END


*************

gene ete ustanın derslerinden ,
74HC595 kullanarak yapılan 4 digit display devresi için 6 adet boş uca ihtiyacımız var .



bir tane lookup table oluşturulmuş ve shiftout komutu kullanılmış ,
kod çok uzun olduğu için (aslında devre saat ve ısı gösterge devresi ) buraya yazmıyorum zaten eminim herkeste vardır .

************

son olarak ,
spi like diye bir bağlanti tipinden bahsediliyor ,
sadece clock ve data ( 2 pin )kullanılarak 4 tane display sürülüyormuş ,bunun için 74hc164 kullanılıyor ,
Bu tip bir örnek bilen varmıdır ?


Şimdi benim anlamadığım ,
2 tane pin bu iş için yeterli olurken neden 11 tane ayak bu iş için harcanır ?Acaba bir takım dezavantajlarımı vardır ?

Proton plus kodu çokmu farklıdır ?

Hangisini kullanmalıyım ?

OG

İlk bağlantıda donanım desteği yok, bütün yükü pic almış. Displayde görüntünün kaybolmaması/titrememesi için pic taramaya ara vermemesi gerekir. Diğer başka işleri yoğun yapacak pic e uygun değil.

Diğerlerinde donanım desteği var.
4511 entegresine BCD girip direk 7 segment çıkış alınır. Program içinde elde ettiğiniz 0~9 arası değerleri direk display edebilirsiniz.

HC595 için elde ettiğiniz rakamı 7 segment e göre dönüştürüp doğru bir sıralama ile 595'lere göndermeniz ardından çıkışa vermeniz gerekir. Bu da bir nevi SPI sürmedir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Maxim

evet galiba en mantıklısı SPI gibi sürmek heralde ..

acaba bu şemada bir hata varmı ?
bilenler bakabilirmi
74hc164 kullanıyorum .


Maxim

HELP !

çalıştırdım ama sorun var ,
sırası ile 0,1,2,3,4,5,6,7,8,9 sayılarını gönderiyorum ,

önce digit1de 0 çıkıyor ,sonra digit1de 1 çıkıyor aynı anda digit2 de 0 ,
digit1 2 oluyor ,digit2,1,digit3 0 ,
digit1 3 ,digit2 2 ,digit3 1 ,digit4 0 ,
digit1 4 ,digit2 3 ,digit3 2 ,digit4 1 ,
digit1 5 ,digit2 4 ,digit3 3 ,digit4 2 ,
....
diye gidiyor ,
bu nasıl düzelecek ?

ben bir kerede örnek 2540 nasıl yazdırıcam ???

işte şema ,





işte kod ,

device 16f628
xtal 4

ALL_DIGITAL = TRUE
CMCON=7

delayms 500

TRISA = %11111111
TRISB = %00000010

delayms 500

loop:
SHOUT portb.0 , portb.1 , LSBFIRST , [ 252 ] '0
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 96 ] '1
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 218 ] '2
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 242 ] '3
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 102 ] '4
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 182 ] '5
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 190 ] '6
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 224 ] '7
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 254 ] '8
delayms 500

SHOUT portb.0 , portb.1 , LSBFIRST , [ 246 ] '9
delayms 500


goto loop

e3

Hocam, en son yazdırmak istediğinizi ilk olarak göndermeniz gerekiyor diye düşünüyorum.Yani "2540" yazmak istediğinizde önce "0" bilgisini sonra "4", sonra "5" ve "2"'yi göndermeniz gerekiyor.Çünkü her bir sayı kaydığında ilk olarak "0" girdiğinde ötelemeden dolayı en son haneye yazılacaktır.İyi çalışmalar.İyi günler. :)
.eem.

Maxim

yok hocam ya ,
tuhaf ,

mesela sadece "1" gönderiyorum diyelim peş peşe .
sırayla ,

1. digit 1 ,diğerleri boş ,
1. digit 1 ,2. digit 1 ,diğerleri boş ,
1. digit 1 ,2. digit 1, 3. digit 1 ,diğeri boş ,
1. digit 1 ,2. digit 1, 3. digit 1 ,4. digit 1

e3

Hocam, zaten bu registerlar öyle çalışıyorlar. :D Bu durumda yapacağınız tek şey displaylerin ortak uçlarını Pic ile kontrol etmeniz olacaktır.Yani siz verileri ardarda gönderirsiniz, ardından Pic'le displayleri açarak değeri hiç kayma görüntüsü oluşmadan direkt olarak görebilirsiniz.Kolay gelsin.İyi çalışmalar. ;)
.eem.

Maxim

hocam slm ,

şöyle bir kod buldum,
hangi dilde yazılmış bilmiyorum ,
bu kod ile pic16f676 ya 1234 yazdırıyorsunuz 4 tane displaye 4 adet 74hc164 vasıtası ile . (sadece 2 pin kullanarak )

bu kodu anlatabilecek kimse varmı acaba ?

data in ,
clk in ,

dimm in ,ortak katot uçarında parlaklık kontrolü için



#include <pic.h>
__CONFIG(BORDIS&PWRTEN&UNPROTECT&MCLREN&WDTDIS&INTOSCIO); //Configure
Bits
#define DIMM_IN RA5
#define CLK_IN RC4
#define DAT_IN RC5
unsigned char LED_thousend, LED_hundred, LED_ten, LED_one;
unsigned char Value_thousend, Value_hundred, Value_ten, Value_one;
//The total of cathode
const unsigned char Digital_TAB[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,
0xbe,0xe0,0xfe,0xf6,0xee,0x3e}; //0123456789
void init(void); //Initial Function
void LED_data(unsigned int data, unsigned char dot); //Calculate data
void LED_display(void); //Display Function
void init(void)
{
TRISA5 = 0;
TRISC4 = 0;
TRISC5 = 0;
CM0 = 1; //Comparator Off
CM1 = 1;
CM2 = 1;
ANSEL=0; //All digital
RAPU = 1; //Pull-up disabled
}
void LED_data(unsigned int data, unsigned char dot)
{
unsigned int i;
LED_thousend = 0;
LED_hundred = 0;
LED_ten = 0;
LED_one = 0;
for(i = 0; i < data; i++)
{
LED_one++;
if(LED_one>=10){LED_one = 0; LED_ten++;}
if(LED_ten>=10){LED_ten = 0; LED_hundred++;}
if(LED_hundred>=10){LED_hundred = 0; LED_thousend++;}
}
for(i = 0; i < 10; i++)
{
if(i==LED_thousend){Value_thousend = Digital_TAB[i];}
if(i==LED_hundred){Value_hundred = Digital_TAB[i];}
if(i==LED_ten){Value_ten = Digital_TAB[i];}
if(i==LED_one){Value_one = Digital_TAB[i];}
}
switch(dot)
{
case(0): //No decimal
{
Value_one = Value_one | 0x00;
}break;
case(1): //one decimal
{
Value_ten = Value_ten | 0x01;
}break;
case(2): //two decimal
{
Value_hundred = Value_hundred | 0x01;
}break;
case(3): //three decimal
{
Value_thousend = Value_thousend | 0x01;
}break;
}
}
void LED_display(void)
{
unsigned char i;
for(i = 0;i < 8; i++)
{
DAT_IN = Value_one & 0x01;
CLK_IN = 0;
CLK_IN = 1;
Value_one = Value_one>>1;
}
for(i = 0;i < 8; i++)
{
DAT_IN = Value_ten & 0x01;
CLK_IN = 0;
CLK_IN = 1;
Value_ten = Value_ten>>1;
}
for(i = 0;i < 8; i++)
{
DAT_IN = Value_hundred & 0x01;
CLK_IN = 0;
CLK_IN = 1;
Value_hundred = Value_hundred>>1;
}
for(i = 0;i < 8; i++)
{
DAT_IN = Value_thousend & 0x01;
CLK_IN = 0;
CLK_IN = 1;
Value_thousend = Value_thousend>>1;
}
}
void main(void)
{
unsigned int disp_data;
init();
while(1)
{
disp_data = 1234;
LED_data(disp_data, 0);
DIMM_IN = 0; //Audion off
LED_display();
DIMM_IN = 1; //Audion on
}
}

e3

Hocam bu program C dili ile yazılmış ancak ben C bilmiyorum.Ayrıca sizin devrenizde de 2 adet pin ile haberleşme yapıyorsunuz bu devreden bir farkı olduğunu sanmıyorum.Sizin yapacağınız tek şey bir pini daha ayırıp transistör sürmek ve bu transistör ile de displayleri kontrol etmek olacaktır.Yani yapacağınız şey şöyle olmalı :.
KODLARI GONDER:
.....
.....
Pause 10
High PORTB.2
Pause 100
Goto BASLA


Devre şemanızda displaylerin katodlarını birleştirin, bir transistörün kollektörüne girin(NPN tip), emiterini şaseye bağlayın.Geriye kalan beyz ucunu da PORTB.2'ye bağlayın.Kolay gelsin.İyi çalışmalar. ;)
.eem.

Maxim

@Protection`um ,high security`im :)

Sana katılmak isterdim ama üzgünüm ,

Bak ne yaptım ,
evet biraz ilkel oldu ,önce şu "if" leri kaldırmak lazım ,
onun için lookup table kullanmak gerekiyor heralde ,

Kod ,bu şekilde sorunluda olsa çalışmaktadır ,
ekran her döngüde komple kıpraşmakta ve yavaş olmak zorundadır .
Halletmeye çalışıyorum .


device 16f628
xtal 4

ALL_DIGITAL = TRUE
CMCON=7

delayms 500

TRISA = %11111111
TRISB = %00000010

dim abc as word
abc=0

dim binler as byte
dim yuzler as byte
dim onlar as byte
dim birler as byte
'------------------
dim binler_ as word
dim yuzler_ as word
dim onlar_ as word
dim birler_ as word

SHOUT portb.0 , portb.1 , LSBFIRST , [ 252,252,252,252 ] '0
delayms 500


loop:

abc=abc+2
binler =dig abc ,3
yuzler =dig abc ,2
onlar  =dig abc ,1
birler =dig abc ,0

if binler =0 then
binler_=252
endif
if binler =1 then
binler_=96
endif
if binler =2 then
binler_=218
endif
if binler =3 then
binler_=242
endif
if binler =4 then
binler_=102
endif
if binler =5 then
binler_=182
endif
if binler =6 then
binler_=190
endif
if binler =7 then
binler_=224
endif
if binler =8 then
binler_=254
endif
if binler =9 then
binler_=246
endif

if yuzler =0 then
yuzler_=252
endif
if yuzler =1 then
yuzler_=96
endif
if yuzler =2 then
yuzler_=218
endif
if yuzler =3 then
yuzler_=242
endif
if yuzler =4 then
yuzler_=102
endif
if yuzler =5 then
yuzler_=182
endif
if yuzler =6 then
yuzler_=190
endif
if yuzler =7 then
yuzler_=224
endif
if yuzler =8 then
yuzler_=254
endif
if yuzler =9 then
yuzler_=246
endif

if onlar =0 then
onlar_=252
endif
if onlar =1 then
onlar_=96
endif
if onlar =2 then
onlar_=218
endif
if onlar =3 then
onlar_=242
endif
if onlar =4 then
onlar_=102
endif
if onlar =5 then
onlar_=182
endif
if onlar =6 then
onlar_=190
endif
if onlar =7 then
onlar_=224
endif
if onlar =8 then
onlar_=254
endif
if onlar =9 then
onlar_=246
endif

if birler =0 then
birler_=252
endif
if birler =1 then
birler_=96
endif
if birler =2 then
birler_=218
endif
if birler =3 then
birler_=242
endif
if birler =4 then
birler_=102
endif
if birler =5 then
birler_=182
endif
if birler =6 then
birler_=190
endif
if birler =7 then
birler_=224
endif
if birler =8 then
birler_=254
endif
if birler =9 then
birler_=246
endif


SHOUT portb.0 , portb.1 , LSBFIRST , [ birler_,onlar_,yuzler_,binler_ ]

delayms 500

goto loop

Adnankaplan

selam arkadaslar ben 7 segment displayli ve alarmlı  saat devresi arıyorum.internette cok dolastm ama aradıgım istedigim gibi bisiy bulamadım , cokvar ama derece ısı nem sensorlu falan.Lcd li br iki devre denedim ve calıstırdım fakat birinde alarm yoktu digerininse alarmı duz ve surekli bir ses cıkarıyordu.ete arkadasımızın yayınladıgı devrelerden birne alarm olsaydı cok iyi oludu.Umarım yardımcı olacak biri cıkar.Şmdiden teşekkürler... :cry:

e3

Alıntı yapılan: "maxiboost"@Protection`um ,high security`im :)

Sana katılmak isterdim ama üzgünüm ...

@ Maxiboost hocam, neden üzgünsünüz anlayamadım, sadece 1 pini daha harcadığınız için mi? :D

@Adnankaplan forumumuza hoşgeldin.Acaba aşağıdaki linkteki işini görür mü? Orada LCD var ama yapman gereken tek değişiklik LCD yerine display verilerini oluşturmak. http://picproje.org/index.php/topic,15829&highlight=saat
Şimdiden kolay gelsin.İyi çalışmalar.İyi günler. ;)
.eem.

Maxim

ee böylede aynı oldu !
illa 3 pinmi kullanmak zorundayız yaw ,bir yanlışlık var bu işte

device 16f628
xtal 4

ALL_DIGITAL = TRUE
CMCON=7

delayms 500

TRISA = %11111111
TRISB = %00000010

dim abc as word
abc=0

DIM X AS WORD
DIM A1 AS WORD
dim A2 AS WORD
DIM A3 AS WORD
DIM A4 AS WORD

SHOUT portb.0 , portb.1 , LSBFIRST , [ 252,252,252,252 ] '0
delayms 500

ABC=3451

loop:

x=abc dig 0:gosub tablO1
SHOUT portb.0 , portb.1 , LSBFIRST , [ A1 ]
x=abc dig 1:gosub tablO2
SHOUT portb.0 , portb.1 , LSBFIRST , [ A2 ]
X=ABC DIG 2:GOSUB TABLO3
SHOUT portb.0 , portb.1 , LSBFIRST , [ A3 ]
X=ABC DIG 3:GOSUB TABLO4
SHOUT portb.0 , portb.1 , LSBFIRST , [ A4 ]

delayms 250

goto loop

Tablo1: lookup X,[252,96,218,242,102,182,190,224,254,246 ],A1 :return
Tablo2: lookup X,[252,96,218,242,102,182,190,224,254,246 ],A2 :return
Tablo3: lookup X,[252,96,218,242,102,182,190,224,254,246 ],A3 :return
Tablo4: lookup X,[252,96,218,242,102,182,190,224,254,246 ],A4 :return

sitenindelisi

Maxi, ahhh birde şu user manuelleri, helpleri okusan ahhhh!!!!
2 pin için 164;
device =16F648A
config  INTRC_OSC_NOCLKOUT, WDT_OFF , PWRTE_On , CP_On, BODEN_On,mclre_off ,LVP_OFF 
XTAL 4
ALL_DIGITAL = TRUE
Declare SHOW_SYSTEM_VARIABLES = On

symbol  DTA     =PORTB.6
SYMBOL  CLK     =PORTB.7
DIM     SAY     AS WORD
DIM     TEMP[4] AS BYTE
DIM     X       AS BYTE

CMCON   =7
TRISA   =%00011111
TRISB   =%00000001
PORTB   =0
PORTA   =0


    
MAIN:        
FOR X= 0 TO 3
    TEMP[X]= DIG SAY,X
    TEMP[X]= LOOKUP TEMP[X],[63,6,91,79,102,109,125,7,127,103]
NEXT X
SHOUT DTA,CLK,5,[STR TEMP\4]
DELAYMS 1000
INC SAY
GOTO MAIN



3 pin temiz ekran için 595;
device =16F648A
config  INTRC_OSC_NOCLKOUT, WDT_OFF , PWRTE_On , CP_On, BODEN_On,mclre_off ,LVP_OFF 
XTAL 4
ALL_DIGITAL = TRUE
Declare SHOW_SYSTEM_VARIABLES = On 
symbol  DTA      =PORTB.5
SYMBOL  ST       =PORTB.6
SYMBOL  SH       =PORTB.7
DIM     SAY     AS WORD
DIM     TEMP[4] AS BYTE
DIM     X       AS BYTE            
CMCON   =7
TRISA   =%00011111
TRISB   =%00000001
PORTB   =0
PORTA   =0                         
    
MAIN:        
FOR X= 0 TO 3
    TEMP[X]= DIG SAY,X
    TEMP[X]= LOOKUP TEMP[X],[126,12,182,158,204,218,250,14,254,206]
NEXT X
SHOUT DTA,SH,1,[STR TEMP\4]:PULSOUT ST,1000,HIGH
DELAYMS 1000
INC SAY
GOTO MAIN


DSN ve section dosyaları (proteus 7.1);
http://picproje.4shared.com//picproje örnekler içinde.

Maxim

Ama ama sitenindelisi üstad ,
neyi atladım ben ;?

birde senin devrede`de her döngü sırasında blinkleme kıpraşma oluyor ve hızlı olamıyor
birşeyimi atladım ?