avatar_Hattuşa

çoklu 7-segmen sürme

Başlatan Hattuşa, 03 Aralık 2014, 13:31:44

Hattuşa

slm arkadaşlar;
bir arkadaşımın projesi için 7-8 adet 7-segment kullanmak gerekiyor. bu segmentleri 595 entegresi ile kullandığımızda her segmente bir adet 595 gerekiyor. bunun daha pratik çözümü yokmu? PCB de yer kalmadığı için 595 in daha çoklusu veya farklı kullanımı varmıdır?


Hattuşa

Alıntı yapılan: ete - 03 Aralık 2014, 13:33:28
http://etepic.com/index.php/topic,5.0.html

ete


ete hocam daha şemayı ekleyene kadar cevabı vermişsiniz, çok hızlısınız, tşk ederim

Hattuşa

hocam 5 adet 7seg için aşağıdaki şemayı kullanıyorum. 5 adet 595 kullanmak zorunda kalıyorum. 8 adet 7seg için acaba daha az yer kaplayan nasıl bir devre kurmalıyım.

ete

En basit bağlantı bütün segment uçlarını paralel olarak Pic den alıp her bir displayi bir transistörle sürmektir.
Ondan sonra yukarıda örneklerini verdiğim tek 595 kullanıp buna 8 adet 7 segmenti bağlamak olur.
Örnekte birden fazla 595 kullanılmış ama sen bir tanesini alacaksın ve display adedini 8 e çıkaracaksın.
Yada 2 sıra kullanıp 2 adet 595 ve her birine 4 er display bağlayacaksın.
Başkada seçenek yok zaten.

Ete

Hattuşa

hocam aşağıdaki şekliyle bir isis şeması oluşturdum ama henüz çalıştıramadım. digitler 0 gösteriyor.

ete

Verdiğim linkte örnek program var. Çok mu zor onu alıp senin sisteme adepte etmek biraz düşünsen halledersin. Orda alt alta bir kaç sıra var. Sen sadece 1 sırasını ancak display adedini artırarak kullanacaksın.

Ete

Hattuşa

Alıntı yapılan: ete - 03 Aralık 2014, 15:40:56
Verdiğim linkte örnek program var. Çok mu zor onu alıp senin sisteme adepte etmek biraz düşünsen halledersin. Orda alt alta bir kaç sıra var. Sen sadece 1 sırasını ancak display adedini artırarak kullanacaksın.

Ete


hocam bende onu inceliyordum. zorluğu konusunda kaygım yok, zira beceremezsem siz varsınız. sorunum elektronik bizim için malum 2. hayat, gerçek hayat sıkıştırınca işin kolayına kaçıyoruz işte, ,idare edin  ;D

Hattuşa

ete hocam;
Device 18F4520
Xtal 4

Config_Start
   OSC =XT ; HS oscillator, PLL enabled (Clock Frequency = 4 x FOSC1)
   FCMEN = OFF ; Fail-Safe Clock Monitor disabled
   IESO = OFF ; Oscillator Switchover mode disabled
   PWRT = On ; PWRT disabled
   BOREN = OFF ; Brown-out Reset disabled in hardware and software
   WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit)
   MCLRE = On ; MCLR pin enabled; RE3 input pin disabled
   LPT1OSC = OFF ; Timer1 configured for higher power operation
   PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
   CCP2MX = PORTC ; CCP2 input/output is multiplexed with RC1
   STVREN = OFF ; Stack full/underflow will not cause Reset
   LVP =OFF ; Single-Supply ICSP enabled
   XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
   Debug = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
Config_End
Declare LCD_DTPin PORTD.4  ' LCD Data Pin   
Declare LCD_RSPin PORTD.2  ' LCD RS Pin
Declare LCD_ENPin PORTD.3  ' LCD EN Pin
Declare LCD_Lines 2        ' LCD Satır
Declare LCD_Interface 4    ' LCD Data Pin Sayısı 4
Cls
DelayMS 100
TRISA =%00000001
TRISB =%00000000
TRISC =%00000000
TRISD =%00000000
TRISE =%00000000
PORTA =0
PORTB =0
PORTC =0
PORTE =0
Symbol  cLk =PORTC.0     :Output cLk
Symbol  sT =PORTC.2      :Output sT
Symbol  DtA =PORTC.1     :Output DtA
Symbol  aK0 =PORTC.3    :Output aK0
Symbol  Ak1 =PORTC.4      :Output Ak1
Symbol  Ak2 =PORTC.5     :Output Ak2
Symbol  AK3 =PORTC.6     :Output AK3
Symbol  AK4 =PORTC.7     :Output AK4
ADCON0 =%00000011
ADCON1 =%00001110  '1 kanal aktif
ADCON2.7 =1
Declare Adin_Res 10         ' 10-bit result required
Declare Adin_Tad FRC       ' RC OSC chosen
Declare Adin_Stime 50      ' Allow 50us sample time
Dim AdC As Word
Dim X As Byte
Dim vErI As Byte
Dim dIgIT As Byte
Dim bIr1 As Byte
Dim on1 As Byte
Dim yuz1 As Byte
Dim bInX As Byte
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte

Declare All_Digital FALSE
INTCON2.7 =1 'portb pullups off
aK0 =1
Ak1 =1
Ak2 =1
AK3 =1
AK4 =1


MaIn:
AdC =ADIn 0
DelayUS 100
bIr1 =Dig AdC,0
on1 =Dig AdC,1
yuz1 =Dig AdC,2
bInX =Dig AdC,3

Print At 1,1,Dec AdC," "
Print At 1,6,Dec bInX," "
Print At 1,8,Dec yuz1," "
Print At 1,10,Dec on1," "
Print At 1,12,Dec bIr1," "
Print At 2,1,Dec A," "
Print At 2,4,Dec B," "
Print At 2,8,Dec C," "
Print At 2,12,Dec D," "
GoSub gOnDeR


GoTo MaIn

gOnDeR:
'birler hanesi
A =LookUpL bIr1,[63,6,91,79,102,109,125,7,127,111]
SHOut DtA,cLk,1,[A] 'Verileri aktar
      PulsOut sT,1 
aK0 =0 :DelayMS 100 :aK0 =1
'onlar hanesi     
B =LookUpL on1,[63,6,91,79,102,109,125,7,127,111]
SHOut DtA,cLk,1,[B] 'Verileri aktar
      PulsOut sT,1
Ak1 =0 :DelayMS 100 :Ak1 =1     

'yüzler hanesi 
C =LookUpL yuz1,[63,6,91,79,102,109,125,7,127,111]   
SHOut DtA,cLk,1,[C] 'Verileri aktar
      PulsOut sT,1
Ak2 =0 :DelayUS 100 :Ak2 =1
'binler hanesi   
D =LookUpL bInX,[63,6,91,79,102,109,125,7,127,111] 
SHOut DtA,cLk,1,[D] 'Verileri aktar
      PulsOut sT,1
AK3 =0 :DelayUS 100 :AK3 =1                             
Return

End



deli etti beni hocam ya süreyi kısaltıyorum, binler hanesini basıyor, süreyi uzatıyorum kırpışıyo, saçmalıyor.
mantığını anladım aslında, tranzistoru on-of yapıp yeni değeri segmene verdiriyoruz ama sağlıklı olmuyor, her birine 595 bağlamak gibi temiz bir iş yokmudur. zira bu konuyu bir süre önce yine bu sitede bir arkadaş için uğraşmıştıkta son hane titreme yapıyordu. bunun rahmetli azer bülbülsüzü olmaz mı?

ete

Usulüne uygun yapmazsan böyle olur. Verdiğim örneğe hiç benziyormu bu yaptığın.

Ete

Hattuşa

Alıntı yapılan: ete - 03 Aralık 2014, 20:40:26
Usulüne uygun yapmazsan böyle olur. Verdiğim örneğe hiç benziyormu bu yaptığın.

Ete

hocam şimdi benim anladığım mantık şu (hatam varsa lütfen düzeltiniz ki hatamı bulayım ki öğrenmiş olayım)
max. değerim 1024 olduğunu düşünerek adc değeri mi basamakladım.
1024 örneğine göre: önce 0 sevene 4 rakamını gönderdim ve 0.digitin katotunu açıp kapatarak yeni değeri bastırdım, aynı şekilde onlar basamağında ki 2 içinde 1. digitin katotunu açıp kapattım, aynı şekilde yüzler hanesinde ki 0 ıda shout ile 2. digite gönderdim. derken binler hanesini de 4. digite gönderdim. belki mantık olarak digitlerin katotunu açıp kapatırken ki ben katotları on/of yaparak yeni değerin digitte gösterileceğini düşündüm.
şimdi hocam eğer mantık doğru kodlar yanlış derseniz, yakında kel kalacağım.

ete

Temel mantık şudur. 1 nolu displaye bilgi yüklenir ve display so ra aktif hale getirilir. 1 ms aktif durumda bekletilir. Sonra aynı şey sıradaki ikinci displaye uygulanır.
Bu sistemde her bir displayin 1-2 ms süre ile aktif olması esastır. Bu işinde  eşit aralıklarla yapılması gerekirki buda ancak kesme kullanılarak yapılabilir. Kesme olmadan aralıklar eşit olmaz ve buda görüntüde kırpışma yaratır.

Ete

Hattuşa

hmm hocam şimdi anladığım mantık şu;(aslında hile yapıyorsunuz siz)
0. digite bir değeri basıp, diğer digitleri off konuma getiriyorsunuz, sonra 1. digiti de aynı şekilde aktif ediyorsunuz diğerleri off konumda, derken böyle böyle tüm digitler yakılıp söndürülüyor. tabi arka planda çok hızlı bir işlem olduğu için göz yanılıyor ve sanki hepsi de ayrı ayrı değeri yakıyor gibi geliyor. o zaman benim işlemcinin işi gücü yok digitleri kovalasın. hocam sevmediğim tekniği, benim işlemci nazik onu yormayacak başka bi teknik uygulanamaz mı?

İlyas KAYA

#13
5 display'e çeviremiyeceğim ancak zaten çevirmek çok basit.

Siz kendinize göre devreyi yeniden tasarlayabilirsiniz.

Aşağıda PIC'den sadece 4 pin kullanarak 4094 ve 74HC164 ile çizdiğim
- 3 adet 7seg.display ,
- 4 led ve
- 10 buton kontrolü

şeması var.

Buna göre devrenizi kurup basitce halledebilirsiniz.
Devre ticari olarak kullanılmakta olup yıllarca sorunsuz çalışmaktadır.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Hattuşa

ilyas hocam;
verdiğiniz şemaya göre; ete hocamın mantığında ki gibi tarama tekniği mi kullanılmalı?

Powered by EzPortal