mv ölçme devresi

Başlatan acemdiyarı, 05 Eylül 2013, 18:02:50

acemdiyarı

Merhaba hocam sizden bir  şey rica edecegim gene bu dipleyleri hepsini yani 000 yanık değilde , dijitleri sıra ile yükseldikce yakmak için programda ne  değişiklik yapmam lazım acaba.

ete

Elimizde "0000" şeklinde 4 digit display takımı olsun bunların sıralaması hane değeri olarak ,"Onbinler-binler-yuzler-birler" şeklindedir. Bu displaylerde göstereceğin sayı değerine göre işlem yapman gerekiyor.
Normal şartlarda şunu yapıyoruz.  Temp=rakam dig0 : gosub al : birler=sayı.
Bu satırı açarsak ekranaberilecek rakam isimli sayının birler hanesini alıyoruz ve al isimli yere yollayarak onun 7 segment karşılığını bulup onu birler değişkenine yerleştiriyoruz. Aynı işlemleri diğer haneler içinde yapıp sonra hepsini muhtemelen kesme kısmında ekrana veriyoruz.
Şimdi düşünelim. Rakam=3 olsun. Buna göre onlar - yüzler -binler ve onbinler haneleri hep sıfırdır.
Bu şekilde 10 dan küçük sayılarda bu haneler hep sıfır olacaktır. O halde ben önce rakam değerine bakmam lazım. Diğer taraftan bir sayının 7 segment karşılığı sıfır olur ise ekranda hiç bir şey göremezsin. Çünkü bütün segmentler kapalı kalır. Bu özelliği kullanarak;
Şayet rakam<10 ise onlar=0 dersen o haneye ait display kapalı kalır.  Benzer şekilde;
İf rakam<100 then yuzler=0. Dersen yuzler haneside kapalı kalır. Yine benzer şekilde ;
If rakam<1000 then bınler=0. Ve If rakam<10000<then onbınler=0 dediğinde son hanede kapalı kalacaktır. Bu if ifadelerini her birini ya en sona yani hanelerin 7 segment karışlıklarını aldığın yerden sonra yada herbirini alıp değişkenine yerleştirdiğin yere koymalısın.
Bu kadar açıklamadan sonra bunu yapacağını umuyorum.
Ete

acemdiyarı

#32
Cevabınız için tşk ederim bu gün müsait olup sizin anlattıklarınızı anladım ve yapmaya çalıştım ama düzgün çalışmadı lookup tabloya (0, başa ekledim fakat 8 e  kadar sayıp 9 u göremiyorum malesef x degişkenin yanınada  işlemleri uyguladım olmadı:( Tablodamı bier eksik var acaba? bir kaç şekilde denedim ama olmadı.Yada güzel anlaşılır anlatımınıza karşılık benmi anlayamıyorum.:(
AL: LOOKUP X,[0,63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN

    IF VOLT <1 THEN BIRLER=0
    IF VOLT <10 THEN ONLAR=0
    IF VOLT <100 THEN YUZLER=0
    IF VOLT <1000 THEN BINLER=0

END

ete

Bir defa birler hanesinide kapatmak akıllıca değil. Aletin çalıştığını anlayamazsın.
İkincisi volt isimli değişken nasıldır.? Onuda açıklaman lazım. Örnek vermek gerekir ise ondalık kullanıyorsan yani 12 v değilde 12,6 v şeklinde değerler gösteriyorsan farklı yalnızca 12 v gösteriyorsan farklı tedbir almak gerek.
Ondalık kullanmıyor isen ve gösterilecek değer volt değişkeninde saklanıyor ise,
X=Dig0 volt: gosub al: birler=sayı. Şeklinde bir kullanım satırın olmalı. Birler hanesine bir şey yapmıyoruz. Ama onlar hanesi için aşağıdaki şekilde bir kullanım olmalı;
X=Dig1 Volt:Gosub Al:Onlar=Sayı: If volt<10 then onlar=0. 
Bu şekilde yuzler ve binler hanesinide ayarlayınca çalışması gerekir.
Ete

acemdiyarı

Alıntı yapılan: ete - 31 Ekim 2013, 16:04:54
Bir defa birler hanesinide kapatmak akıllıca değil. Aletin çalıştığını anlayamazsın.
İkincisi volt isimli değişken nasıldır.? Onuda açıklaman lazım. Örnek vermek gerekir ise ondalık kullanıyorsan yani 12 v değilde 12,6 v şeklinde değerler gösteriyorsan farklı yalnızca 12 v gösteriyorsan farklı tedbir almak gerek.
Ondalık kullanmıyor isen ve gösterilecek değer volt değişkeninde saklanıyor ise,
X=Dig0 volt: gosub al: birler=sayı. Şeklinde bir kullanım satırın olmalı. Birler hanesine bir şey yapmıyoruz. Ama onlar hanesi için aşağıdaki şekilde bir kullanım olmalı;
X=Dig1 Volt:Gosub Al:Onlar=Sayı: If volt<10 then onlar=0. 
Bu şekilde yuzler ve binler hanesinide ayarlayınca çalışması gerekir.
Ete

Tamam hocam şimdi normal çalıştı :) yardımınız için ne kadar teşekkür etsek azdır  teşekkür ederim ,bu sölemeye çalıştıgınız ondalık yada tam sayı tedbiri volt=(HAM+1)*/265 bu satır hesabı ilemi yoksa lookup tablo ile ilgilimi hocam az acabilirmisiniz bu çalışma ile bayagı bir şeyler ögrendim çünki aklımda bu soru da takılı kalmasın.

ete

Formülü esas alırsak, Maksimum ADC okuma değeri 1023 dür. O halde formülde HAM=1023 değerini yerine koyarsak;
Volt=(1023+1)*265/256=1060 değeri elde edilir. Bu nedir bende anlamadım. 106,0 V desek uymaz. 10,60V desek uymaz.
Bu senin sistem kaç volt aralığında çalışıyor acaba?
Ondalıklı gösterim sistemi elbette formülle alakalıdır.
Diyelimki 0-15V luk bir güç kaynağımız var. Bunun çıkışını ekranda 0-16V olarak göstermek var birde 0,0 - 15,0 olarak göstermek var.
Birisi tamsayı gösteriyor diğeri tamsayı yanında ondalıkda gösteriyor. Şimdi her ikisinin formülünü ele alırsak daha iyi anlayacaksın zaten.
ADC den okunan maksimum 1023 değerini (aslında 1024) 15V olarak göstermek için sabit çarpan hesabımız;
15/1024=0,0146484375 *256 = 3,75 bunuda 375 (3,75 x 100=375) olarak kullanıp çıkan sonucu 100 e bölerek doğru sonucu elde ederiz. O halde formül  VOLT=((HAM+1)*/375)/100 şeklinde uygulanır.
Bu formül maksimum ADC okumasında Volt=(1023+1)*375/256*100=15 değerini verir.
Şimdi ekranda 15 değilde 15,0 şeklinde bir gösterim yapacak isem sayıyı 15 değilde 150 olarak hesaplamam gerekecek.
Bu durumda formül Volt=((Ham+1)*/375)/10 şeklinde uygulanmalıdır.Yada normal aritmetik ile  Volt=(ham+1)*375)/256*10 şeklinde uygulanır. Hemen hesap yapalım  Volt=((1024*375)/256*10=150
Bunu ekrana yazdırırken 5 rakamına bir virgül koydurmak (noktasnını aktif etmek) sureti ile ekrana 15,0 değerini vermiş oluruz.

Ete

acemdiyarı

Anladım hocam aydınlatıcı bilgileriniz için teşekkür ederim.

acemdiyarı

#37
Hocam şöle bişi yapmak mümkünmü acaba haneleri 0-9a kadar saydırıp sonra bir yandakini 0-9a kadar saydırmak için ,
    X=VOLT DIG 0:GOSUB AL:BIRLER=SAYI
    IF VOLT <10 THEN
    GOSUB SAY
    else
    GOTO BASLA
   
    ENDIF
   
SAY:   
    SHIFTOUT DTA,CLK,1,[BIRLER]
    PULSOUT GONDER,1
    PAUSE 100   
    GOTO BASLA


ete

Gerçekten ne yapmak istediğini anlayamadım.  Yan yana iki display olduğunu varsayarsak, önce birler hanesinin 0-9 saymasını ve sayı 9 dan büyük ise bu seferde onlar hanesinin 0*9 saymasınımı istiyorsun?

Şayet bunu istiyorsan yalnızca koda bakarak bu iş yaptırılamaz.
Zira displaylerde gösterilen bilgi bir şekilde isteğine uygun olarak saydırılmalıdır.
Örneğin SAY=SAY+1 şeklinde sayan bir sayaçta istediğinin olması için;
IF SAY>9 then SAY=SAY+10 şeklinde sayma şeklini değiştirmek gerekir.
Böylece 0-9 arasında birer artan Birler hanesi say değeri 9'u aşınca bu seferde onlar hanesi birer artarak sayacaktır.

Geriye bunu yalnızca göstermek kalıyor. Normal sayan bir sistemde istediğini yapmak zor ama imkansız değil.
Onuda şöyle yapabiliriz.

X=VOLT DIG 0:GOSUB AL:BIRLER=SAYI
X=VOLT DIG1:GOSUB AL:ONLAR=SAYI
    IF VOLT >10 THEN
      ONLAR=BIRLER:BIRLER=63 'sıfır sayısının 7 segment karşılığı 63 dür
    endif
    GOSUB SAY

    GOTO BASLA
     
SAY:   
    SHIFTOUT DTA,CLK,1,[BIRLER,ONLAR]
    PULSOUT GONDER,1
    PAUSE 10   
    GOTO BASLA


Şem aolmadığı için sayı nasıl gösteriliyor bilemiyorum. Sende yalnızca birler hanesini vermişsin. Gerekirse kodu değiştirmen gerekir.

Ete

acemdiyarı

Hocam verdiginiz örnekler çok işime yaradı teşekkür ederim, halen üzerinde çalışıyorum zaman bulabildikce.

Powered by EzPortal