7 Segment display sürme

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

sitenindelisi

Proton için söylemiştim.
164 kullanmayı oldum olası sevmedim kontrol bende olmadığı için. 595 te bulunan storage olayı bu sorunları büyük ölçüde çözüyor. Bunun da bir bedeli var tabi; hız kaybı. Storageı açmak için uyguladığın puls+ bir ilave bit kaydırma olayı var. 164 te kaskat bağlarsan 8. bit data ine bağlandığı için 8. clk ta  2. 164 data almaya başlıyor. 595 te ise 9. clk ta. puls ise seri girip paralele yazılan datanın porta aktarılması için uyguladığın clk. Buna 164 te ihtiyacın yok.

CaFFeiNe

@maxiboost

74HC164 kullanarak 2 pin ile sürmek istiyorsan

http://www.rentron.com/Myke1.htm (2pin ile LCD sürme)

buradan esinlenerek birşey yapmak lazım, bu devrede DATA ve shift registerin son çıkışı 1 ise ENABLE ucu 1 oluyor aksi halde 0 oluyor, direnç ve diyot AND kapısı işlevi görüyor
sen bunu ENABLE yerine 7-segmentlerin ortak uçları için uyarlayabilirsin şöyleki;



önce shift registere 8 tane 0 yüklersin
sonra transistörü iletime geçirmek için 1 yüklersin (tüm bitler yüklenince iletime geçecek)
sonra istedigin rakam için gerekli 7 biti yüklersin bu 7 bit yüklenirken 8.çıkış sürekli 0 olacak ve DATA ucu 1 olsa bile transistör iletime geçmeyecek ve display sönük kalacak.
8.palsi verdiğinde ilk yüklediğin 1 bilgisi 8. çıkışa gelecek ve transistör iletime geçerek gönderdiğin 7 bitlik bilgi displayde görünecek
bu şekilde olması lazım

yalnız ben önceki gönderdiğin 3pinli 74HC164 uygulamasını daha çok beğendim bir pin fazla kullanırsın ama pwm kullanarak display parlaklığını ayarlayabilirsin (denemedim ama bir ara denemeyi düşünüyorum)
bundada yine ortak uçları transistör ile sürdüğümüzü düşünelim
önce transistörü kapatarak (pwm duty değerini sıfırlayarak mesela) displayi söndürürüz.
ardından shift registerlere bilgiyi yükleriz
sonra pwm duty değerini istediğimiz değere ayarlayarak istediğimiz ekran parlaklığını elde ederiz

gibime geliyor :) güzel olur kanımca

Maxim

arkadaşlar ,
galiba protectionunda dediği gibi ,
1 tane daha pin kullanarak yapmak en doğrusu ,
2 tane pinlede oluyor ama 3 pin ile daha az kıpraşma sağlanıyor diye düşünüyorum ,siz ne dersiniz ? Ben böyle bir sonuca vardım .

şu an ,
fazladan 1 pinle displaylerin ortak uçlarını sürerek dememe yapmaya çalışıyorum ,

acaba o daha önce verdiğim kod için hem assembler hem basic bilen birinden yardım istesemmi ?

Caffein ,
dediğin şekilde denedim düzgün bir şey yapamadım .
yani kodu oluşturamadım .

Maxim

şimdiye kadar hep proteus ile deneme yapmıştım ,

devreyi kurdum ,
aşağıdaki kod ile devre mükemmel çalışmaktadır ,
3 adet uç kullandım ,

şimdi 2 pin ile deneme yapıcam .

yanlız ,bu kodu sadeleştirmek lazım ,
fazlalıklar olduğunu biliyorum ama nasıl düzeltirim bilmiyorum .

device 16f628A
xtal 4

ALL_DIGITAL = TRUE
CMCON=7
delayms 500

TRISA = %11111111
TRISB = %00000010
SYMBOL DTA PORTB.0
SYMBOL CLK PORTB.1
SYMBOL DIMM PORTB.2

dim ABC as word
ABC=0

DIM X1 AS WORD
dim X2 as word
dim X3 as word
dim X4 as word

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

SHOUT DTA , CLK , LSBFIRST , [ 252,252,252,252 ] '0
delayms 500

loop:
abc=abc + 2

IF ABC >3500 THEN 
ABC=0
ENDIF

x1=abc dig 0:gosub tablO1
x2=abc dig 1:gosub tablO2
X3=ABC DIG 2:GOSUB TABLO3
X4=ABC DIG 3:GOSUB TABLO4

low DIMM
SHOUT DTA , CLK , LSBFIRST , [ A1,a2,A3,A4 ]
delayms 1
High DIMM
delayms 10

goto loop

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

PARSIC

herkese selam ben aynı sistemi hi-tech ile bir türlü çalıştıramadım yardımcı olabilir misiniz..yazdığım kod aşağıda;

#include <pic.h>
__CONFIG(0x3ff9);
void sayi(unsigned char a){
char i;
for(i=0;i<8;i++){
RB0=0;
RB0=1;
if((a<<i)&(0x80))
RB1=1;
else
RB1=0;
}
}
void main(){
TRISB=0x00;
PORTB=0x00;
while(1){
sayi(0x3f);
}
}
********************************************************************HI-TECH*******************************************************************

Maxim

parsic, burası proton bölümü
sorunu hitec bölümüne sormalısın

PARSIC

********************************************************************HI-TECH*******************************************************************

FUNKY


merhabalar..konu ilgili diye  burada soruyorum

ilk defa 4 haneli seven segment display  çalışması yapıyorum  .tarama sistemi ile  basıt olarak "1234" yazdırmakla başladım  ama "2341" yazıyor.

taramayı sağdan sola doğru yapıyorum . ortak anod display  ilk olarak en sağdaki   birler hanesine "4" ü yazdırmak için anodunun bağlı olduğu pini  "high  porta.3" yapıyorum ve en sağdaki  sayı için "birler= Dig var1,0" komutunu yazıyorum diğerleri de  sırayla   gidiyor.

birtane  tarama animasyonu vardı sitemizde onun gibi.. neden  sıralı çıkmıyor..



Device=16F628A
Xtal=8
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_on, WDT_OFF, LVP_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT

Dim x As Byte
Dim var1    As Word
Dim segments As Byte
Dim binler  As Byte
Dim yuzler  As Byte
Dim onlar   As Byte
Dim birler  As Byte  

TRISB=%00000000
TRISA=%00010000
PORTA=0                                                                                             
PORTB=0
var1=0
DelayMS 1 
 
 basla:
  var1=1234
  GoSub yaz
 GoTo basla
 
yaz:
PORTB=segments
High PORTA.3
DelayMS 1
birler= Dig var1,0
segments= LookUpL birler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 10
Low PORTA.3
PORTB=0
DelayMS 1

PORTB=segments
High PORTA.2
DelayMS 1
onlar= Dig var1,1
segments= LookUpL onlar,[192,249,164,176,153,146,130,248,128,144]
DelayMS 10
Low PORTA.2
PORTB=0
DelayMS 1

PORTB=segments
High PORTA.1
DelayMS 1
yuzler= Dig var1,2
segments= LookUpL yuzler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 10
Low PORTA.1
PORTB=0
DelayMS 1

PORTB=segments
High PORTA.0
binler = Dig var1,3
segments= LookUpL binler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 10
Low PORTA.0
PORTB=0
DelayMS 1

Return

End

kudretuzuner

Merhaba
Başka bir forumdan 3 dijit olarak indirdiğim projeyi yazılımında ve de tasarımında değişikler yaparak 4 digit haline getirdim.PAUSE  komutundaki süreyi de kırpışmayı minimum hale getirecek değerlere getirdim.Arşivimde bulunan bu çalışmayı paylaşayım dedim.Buyrun.
http://www.4shared.com/file/418GClkW/628_4d_multplex_2.html
Amatör

FUNKY


kudretuzuner hocam  teşekkür ederim projenizi indirdim  basic le yazıldığı için deneyemedim  inceledim  .ben okuduklarıma göre  doğru yağtığımı  zannediyordum    hata nerede onu bilmek istiyorum   tarama sistemi böyle olmıyacak mı?

muhittin_kaplan

tarama sistemi:
1 1. dsiplayi aktif et (ortak anoduna 1 ver.)
2 Gerekli sayıyı yolla
3 5Ms Bekle
4 2. dsiplayi aktif et (ortak anoduna 1 ver.)
5 Gerekli sayıyı yolla
6 5Ms Bekle


kudretuzuner

Merhaba
Aradım ama bulamadım.Galiba "Bunalmış" hocanın vermiş olduğu bir likte multiplexin çalışma prensibini simulasyon olarak gayet güzel gösteriyordu.
Amatör

FUNKY

kudretuzuner     bahsettiğin animasyonu biliyorum  pc imde var teşekkürler...

muhittin_kaplan  hocam  izah etmeye çalıştığınız  böyle değilmi  porta.0= binler
porta.1=yüzler
porta.2=onlar
porta.3=birler  hanelerinin anoduna bağlı
'
  yani bu kod ile "1234"   rakamlarından "4" ü göstermesi gerekmezmi ..

PORTB=segments
High PORTA.3
birler= Dig var1,0
segments= LookUpL birler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 5
Low PORTA.3


hala "2341" gösteriyor

yaz:
PORTB=segments
High PORTA.3
birler= Dig var1,0
segments= LookUpL birler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 5
Low PORTA.3
DelayMS 1
'
PORTB=segments
High PORTA.2
onlar= Dig var1,1
segments= LookUpL onlar,[192,249,164,176,153,146,130,248,128,144]
DelayMS 5
Low PORTA.2
DelayMS 1
'
PORTB=segments
High PORTA.1
yuzler= Dig var1,2
segments= LookUpL yuzler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 5
Low PORTA.1
DelayMS 1
'
PORTB=segments
High PORTA.0
binler = Dig var1,3
segments= LookUpL binler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 5
Low PORTA.0
DelayMS 1

Return

muhittin_kaplan

PORTB=segments
High PORTA.3
birler= Dig var1,0
segments= LookUpL birler,[192,249,164,176,153,146,130,248,128,144]
DelayMS 5
Low PORTA.3

ile birler basamağına Birler le belirlediğin sayının Lookup değerini gönderceksen eğer

High PORTA.3
birler= Dig var1,0
segments= LookUpL birler,[192,249,164,176,153,146,130,248,128,144]
PORTB=segments
DelayMS 5
Low PORTA.3

Yapman Gerekli LookUpla Aldığın Birler Değişkeninin karşılığını atacaksın (Segment) PortB ye (Display PortB ye bağlı sanırım)

FUNKY

#29
muhittin_kaplan hocam  dediğinizi yaptım    son halı böyle oldu..
"PORTB=segments" i başa yazarsam rakamlar gözüküyor  ama sıralama ters oluyor


[IMG]http://dc300.4shared.com/img/I5fGb_zP/0.5819228166198901/dig.gif[/img]

bu durumda doğru gösteriyor..kısaca şöyle
PORTB=segments
High PORTA.0
birler= Dig var1,2
'
PORTB=segments
High PORTA.1
onlar= Dig var1,1
'
PORTB=segments
High PORTA.2
yuzler= Dig var1,0
'
PORTB=segments
High PORTA.3
binler = Dig var1,3



doğru çalışıyor ama   aktif edilen   anodla oraya yazılan "Dig" karmaşası var..?