TM1637

Başlatan POWER, 04 Haziran 2017, 04:40:42

POWER

TB6BKG

tekosis

Bu cihazı her mcu ve programlama dili ile çalıştırabilisiniz.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

POWER

#2
elinizde tm1637 ile 4 digit led display sürmeyle ilgili basic yada proton kodu mevcutmu?
TB6BKG

OG

Denemek için elinizde ürün varmı? Uğraşalım.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

POWER

evet hocam elimde 2 adet var.
TB6BKG

OG

#5
ISIS de baktım yanlızca, isis de çalışıyor.

'****************************************************************
'*  Name    : TM1637.BAS                                        *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2017 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 12.06.2017                                        *
'*  Version : 1.0                                               *
'*  Notes   : TM1637 icin temel surum sekli                     *
'*          :                                                   *
'****************************************************************
;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F628A

Declare Reminders Off
@ CONFIG_REQ = 0 ; Override Compiler's configuration settings
Asm-
__Config  0x1F1C ;FOSC_INTOSCIO & WDTE_ON & PWRTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & CP_ON 
Endasm-
Declare Reminders On

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------

                        
Declare Xtal 4 
All_Digital = TRUE



PORTB = %00000011
TRISB = %11111100
PORTB = %00000011


INTCON=0
OPTION_REG=%10001111


Dim segment As Byte
Dim dongu_cikis As Byte
Dim index As Byte
Dim surulen_bitler As Byte
Dim digit_deger As Byte

Dim segment_cikisa As Byte


Dim ekran_degeri As Word

Dim nokta_yak As Bit

''' sürülmek istenen GRID çıkışları için, datasheet'den bakınız 2- Address command setting 
Dim GRID_0 As $C0   ; %11000000 GRID1 çıkış adresi  
Dim GRID_1 As $C1   ; %11000001 GRID2 çıkış adresi 
Dim GRID_2 As $C2   ; %11000010 GRID3 çıkış adresi   
Dim GRID_3 As $C3   ; %11000011 GRID4 çıkış adresi
Dim GRID_4 As $C4   ; %11000100 GRID4 çıkış adresi
Dim GRID_5 As $C5   ; %11000101 GRID4 çıkış adresi  


''' Display ışığı degerleri, bakınız datasheet 3- Display control 
Dim disp_isik_max As $8F     ; %10001111     ( Işık Full )
Dim disp_isik_off As $87     ; %10000111     ( Işık Off  )
Dim disp_isik_1_16 As $88    ; %10001000     ( Işık  1/16 )
Dim disp_isik_2_16 As $89    ; %10001001     ( Işık  2/16 )
Dim disp_isik_4_16 As $8A    ; %10001010     ( Işık  4/16 )
Dim disp_isik_10_16 As $8B   ; %10001011     ( Işık 10/16 )
Dim disp_isik_11_16 As $8C   ; %10001100     ( Işık 11/16 )
Dim disp_isik_12_16 As $8D   ; %10001101     ( Işık 12/16 )
Dim disp_isik_13_16 As $8E   ; %10001110     ( Işık 13/16 )
Dim disp_isik_14_16 As $8F   ; %10001111     ( Işık 14/16 )
''''''''''''

''''  Segmentlere ait bit ler. 
'Dim seg_x As %ngfedcba  
 Dim seg_a As %00000001
 Dim seg_b As %00000010
 Dim seg_c As %00000100
 Dim seg_d As %00001000
 Dim seg_e As %00010000
 Dim seg_f As %00100000
 Dim seg_g As %01000000
 Dim seg_n As %10000000

'''' değişik karakterler için segment atamaları
'  Dim char_ As %ngfedcba 
Dim char_b_A As %01110111   ''' Karakter büyük A 
Dim char_k_a As %01011111   ''' Karakter kücük a 
Dim char_k_b As %01111100   ''' Karakter kücük b 
Dim char_b_C As %00111001   ''' Karakter büyük C
'  Dim char_ As %ngfedcba  
Dim char_k_c As %01011000   ''' Karakter kücük c 
Dim char_k_d As %01011110   ''' Karakter kücük d 
Dim char_b_E As %01111001   ''' Karakter büyük E 
Dim char_k_e As %01111011   ''' Karakter kücük e  
Dim char_b_F As %01110001   ''' Karakter büyük F
'  Dim char_ As %ngfedcba 
Dim char_b_H As %01110110   ''' Karakter büyük H
Dim char_b_I As %00000110   ''' Karakter büyük I
Dim char_b_J As %00001110   ''' Karakter büyük J
Dim char_b_L As %00111000   ''' Karakter büyük L
Dim char_k_n As %01010100   ''' Karakter kücük n
Dim char_u_o As %01100011   ''' Karakter ustte o 
Dim char_a_o As %01011100   ''' Karakter altta o 
Dim char_b_P As %01110011   ''' Karakter büyük P  
'  Dim char_ As %ngfedcba 
Dim char_k_r As %01010000   ''' Karakter kücük r
Dim char_k_t As %01111000   ''' Karakter kücük t
Dim char_b_U As %00111110   ''' Karakter büyük U 
Dim char_k_u As %00011100   ''' Karakter kücük u
Dim char_b_Y As %01101110   ''' Karakter büyük Y


'''''''''
Dim CLK As PORTB.0
Dim DIO As PORTB.1

DelayMS 10
Clrwdt


    GoSub aydinlik_ayari    
    ''' isis de "ışık" olarak farkedilmeyebilir. 
    ''' display Pinlerini skop ile gözlemek fikir verebilir.

    GoSub oto_ilerlemeyi_kur
''''''''''    
basla:
    Clrwdt
    
    ''' segment test yapalım
    GoSub segment_test


    ''' rakam ekranlayalım, ekranlayacağımız değer
    For ekran_degeri = 0 To 5234 
'        ekran_degeri = 5234
        GoSub gonderim_x_hane
        
        ''' 10 a kadar yavaş saysın sonra hızlansın
        If ekran_degeri < 10 Then   
            DelayMS 300
        Else
            DelayMS 1
        EndIf
        Clrwdt
    Next
    

    
GoTo basla
''''''''''	




'''''''''''
segment_gonder:
    surulen_bitler = segment
    
bitleri_itele:             ''' surulen_bitler değerini gönderen dongu
	For dongu_cikis = 0 To 7	 
		Low CLK
		DIO = surulen_bitler.0      ''' data pinine surulen_bitler 'in 0. bitini yükle
		Nop              ''' mcu hızı düşük ve bekleme gerekmiyorsa bunu sil
        High CLK
        surulen_bitler = surulen_bitler >> 1   ''' 1 bit saga kayar		
	Next 
	
	Low CLK		  ;  
    While DIO =1
    Clrwdt
    Wend
	High CLK
	Low CLK
Return

''''''''''''
''' data gönderimi başlıyor
start_ver:
    Clrwdt
	High CLK
	High DIO
	Low DIO
Return

'' data gönderimi bitti.	
stop_ver:
    Clrwdt
	Low CLK
	Low DIO
	High CLK
	High DIO
Return


''''''''
segment_degeri_al:
    Clrwdt
    segment = LookUp digit_deger, [$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$00] ; 0-9 ve Blank (10 degeri)
    
    ''' digitin noktası yakılacak ise 
    If nokta_yak = 1 Then
        segment.7 = 1           ''' ilgili biti setle
        nokta_yak = 0
    EndIf
        
Return

''''''''''''''''
gonderim_x_hane:    
    ''' Gönderim başlıyor bildirgesi START pulse i
	GoSub start_ver
	
	''' Gösterime Hangi haneden başlayacağız  
	GoSub ilk_hane_ne

    ''' Kaç hane sürecek isek digitleri almak gerek.
    ''' 4 hane
    For index = 3 To 0 Step -1
        ''' ekran_degeri değişkeninin digitlerini sırayla al 5, 2, 3, 4 gibi
        digit_deger = Dig ekran_degeri, index
        
        '''' gereksiz segmentler sönsün denirse
        GoSub gereksizse_sondur
        
        
        ''' alınan digite göre segment bitleri nedir, oradan dönen deger degişkeni "segment" dir
        GoSub segment_degeri_al      ''' segment bitleri oluşturuldu                 
        GoSub segment_gonder         ''' mcu pininden TM1637 'ye sür.
    Next
    
    ''' Gönderim bitti STOP pulse i
    GoSub stop_ver
Return    
''''''''''

gereksizse_sondur:
    If ekran_degeri < 10 Then                   ''' 0 - 9 arası degerde, 3 hane boşa yanar
        If index > 0 Then digit_deger = 10      ''' 10 değeri blank yapar
    EndIf
    
    If ekran_degeri < 100 Then                   ''' 0 - 9 arası degerde, 3 hane boşa yanar
        If index > 1 Then digit_deger = 10      ''' 10 değeri blank yapar
    EndIf
    
    If ekran_degeri < 1000 Then                   ''' 0 - 9 arası degerde, 3 hane boşa yanar
        If index > 2 Then digit_deger = 10      ''' 10 değeri blank yapar
    EndIf
Return 
'''''''''''''


'''''''''''''''
''    ''''  Segmentlere ait bit ler. 
''    'Dim seg_x As %ngfedcba  
''     Dim seg_a As %00000001
''     Dim seg_b As %00000010
''     Dim seg_c As %00000100
''     Dim seg_d As %00001000
''     Dim seg_e As %00010000
''     Dim seg_f As %00100000
''     Dim seg_g As %01000000
''     Dim seg_n As %10000000
segment_test:

    segment = %00000001 ''' seg_a
    
segment_test_2:
   
    ''' Gönderim başlıyor bildirgesi START pulse i
	GoSub start_ver
	
	''' Gösterime Hangi haneden başlayacağız  
	GoSub ilk_hane_ne

    ''' Kaç hane sürecek isek digitleri almak gerek.
    ''' 4 hane
    For index = 3 To 0 Step -1
        GoSub segment_gonder         ''' mcu pininden TM1637 'ye sür.
    Next

    ''' Gönderim bitti STOP pulse i
    GoSub stop_ver
    
    DelayMS 300
    Clrwdt
    
    segment = segment << 1
    If segment > 0 Then segment_test_2

Return


;;;;;;;;;;;;;;;
''''''''''' KURULUM KOMUTLARI
ilk_hane_ne:
    '''' Hangi haneden başlıyacağız gösterime, onu bildirelim	
	''' Haneleri Peşisıra süreceğimiz için ilk haneyi hangisinden versin
	''' oto ilerlemeli gösterim için ilk hane hangisi olsun
    surulen_bitler = GRID_0        ''' soldan 1.       
'    surulen_bitler = GRID_3       ''' soldan 3. gibi.
    ''' GRID_x 'lerin sayı değerleri en üstte, sabitlerin atamalarında 
    GoSub bitleri_itele            ''' hane bildirimi komutunu TM1637 ye sür
Return


''' bakınız 1- Data command setting bölümünde 
''' Address adding mode setting sekmesi 2 deger içerir
    ''' Automatic address adding. Değeri %01000000 = $40
    ''' Fix address               Değeri %01000100 = $44
oto_ilerlemeyi_kur:
	GoSub start_ver    ''' data gönderimi başlıyor
	''' Automatic address adding. Otomatik adres ekleme için değer %01000000 = $40
	surulen_bitler = %01000000        ''%01000000 adresi oto arttırma,  bakınız 1- Data command setting 
	GoSub bitleri_itele    '' datayı gönder, Command datası olarak 1 byte gönderir
	GoSub stop_ver         '' data gönderimi bitti.
Return

'''
aydinlik_ayari:
    ''' Display ışık seviyesi ayarı
	GoSub start_ver
	surulen_bitler = disp_isik_max    ''' max ışık
'    surulen_bitler = disp_isik_off   ''' ışık kapalı
'    surulen_bitler = disp_isik_12_16  ''' 12/16
	GoSub bitleri_itele
	GoSub stop_ver
Return



FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Deneme imkanı oldu mu merak ettim. Çünkü, ben de "uygun fiyatı"ndan dolayı bir iş için kullanmayı düşündüm.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ÜC

  OG hocam datasheette modülün aynı zamanda buton kontrol içinde kullanılabileceğini anladım belki yanlış anlamışda olabilirim (ingilizcem yok)  sizin bilginiz varmı ?

OG

Evet klavye girişide yapılabiliyormuş, ama ben dataya bakarken klavye tarafı ile ilgilenmedim.
Hatta, mikrodalga fırın gibi "elektriksel gürültünün çok olduğu ortamlar için güvenli" gibi birşeyler yazıyordu datada.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

POWER

Bu akşam deneyeceğim inşallah hocam.
TB6BKG

ÜC

  Fakat Türkiye'de entegre olarak yok modül olarak var oda 15Tl. Klavye kontrol için modül kullanılamaz çünki modülde bağlantıları yok. Çinde 100 tane entegre 17 dolar. Katılım olsada getirtip paylaşsak ne iyi olur.

POWER

OG hocam şimdi sizin proğramda herhangi bir değişiklik yapmadan olduğu gibi yükleyip denedim. sorunsuz olarak simülasyonda olduğu gibi çalıştı.
TB6BKG

private_korsan

og hocam merhaba verdiğiniz program gerçekten sorunuz çalışıyor.bazı değişiklikler yaptım.fakat displaylerde aynı anda hem karakter hem rakam göstermeyi bitürlü başaramadım.sanırım olayı tam kavrayamadım.mesela ekranda "ba12" gibi bişey göstermek istesem ne yapmam gerekir

OG

Ben de ne nasıl yapılıyor unuttum, tekrar bakmam gerek ama şu an vaktim yok, programda yeterince açıklama satırları ekledim, oradan çözebilirsiniz.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

private_korsan

teşekkür ederim.gerçekten o kadar detaylı açıklama satırları varki.biraz üzerine düşünce çözdüm.tekrar teşekkürler