Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: POWER - 04 Haziran 2017, 04:40:42

Başlık: TM1637
Gönderen: POWER - 04 Haziran 2017, 04:40:42
https://tr.aliexpress.com/item/Free-shipping-4-digital-display-with-adjustable-brightness-LED-module-clock-Point-Accessories-Blocks-for-arduino/1889678421.html?spm=2114.13010608.0.0.tnBfE0

linkteki modülü picbasic ile çalıştırabilirmiyim? Çalışırsa örnek kod varsa paylaşabilirmisiniz?
Başlık: Ynt: TM1637
Gönderen: tekosis - 05 Haziran 2017, 02:00:25
Bu cihazı her mcu ve programlama dili ile çalıştırabilisiniz.
Başlık: Ynt: TM1637
Gönderen: POWER - 11 Haziran 2017, 10:20:45
elinizde tm1637 ile 4 digit led display sürmeyle ilgili basic yada proton kodu mevcutmu?
Başlık: Ynt: TM1637
Gönderen: OG - 12 Haziran 2017, 02:23:16
Denemek için elinizde ürün varmı? Uğraşalım.
Başlık: Ynt: TM1637
Gönderen: POWER - 12 Haziran 2017, 08:34:53
evet hocam elimde 2 adet var.
Başlık: Ynt: TM1637
Gönderen: OG - 12 Haziran 2017, 18:30:04
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

(https://i.ibb.co/d0HbDBJ/TM1637.jpg) (https://ibb.co/ccsbQJX)

(https://s20.postimg.cc/5e4h4wmzh/TM1637.jpg) (https://postimg.cc/image/gqh2movo9/)
Başlık: Ynt: TM1637
Gönderen: OG - 13 Haziran 2017, 13:09:57
Deneme imkanı oldu mu merak ettim. Çünkü, ben de "uygun fiyatı"ndan dolayı bir iş için kullanmayı düşündüm.
Başlık: Ynt: TM1637
Gönderen: ÜC - 13 Haziran 2017, 14:27:02
  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ı ?
Başlık: Ynt: TM1637
Gönderen: OG - 13 Haziran 2017, 15:09:34
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.
Başlık: Ynt: TM1637
Gönderen: POWER - 13 Haziran 2017, 17:42:04
Bu akşam deneyeceğim inşallah hocam.
Başlık: Ynt: TM1637
Gönderen: ÜC - 13 Haziran 2017, 22:03:00
  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.
Başlık: Ynt: TM1637
Gönderen: POWER - 13 Haziran 2017, 22:43:53
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ı.
Başlık: Ynt: TM1637
Gönderen: private_korsan - 07 Ağustos 2017, 11:35:46
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
Başlık: Ynt: TM1637
Gönderen: OG - 07 Ağustos 2017, 16:51:10
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.
Başlık: Ynt: TM1637
Gönderen: private_korsan - 07 Ağustos 2017, 18:21:39
teşekkür ederim.gerçekten o kadar detaylı açıklama satırları varki.biraz üzerine düşünce çözdüm.tekrar teşekkürler
Başlık: Ynt: TM1637
Gönderen: Maxim - 15 Ekim 2021, 15:25:30
Tekrar allah rahmet eylesin

OG`nin paylaşmış olduğu yukarıdaki kod ile 2. digitteki noktayı nasıl yakabilirim çözemedim.
Bilen varsa yardımcı olabilirmi
Başlık: Ynt: TM1637
Gönderen: ACM - 16 Ekim 2021, 01:28:59
Alıntı yapılan: Maxim - 15 Ekim 2021, 15:25:30Tekrar allah rahmet eylesin

OG`nin paylaşmış olduğu yukarıdaki kod ile 2. digitteki noktayı nasıl yakabilirim çözemedim.
Bilen varsa yardımcı olabilirmi

Hangi dijitin noktasını yakmak istiyorsanız o dijite ait byte değerindeki yedinci biti 1 yapıyorsunuz diya not almışım.