avatar_elektro77

dac0808 uğraşısı

Başlatan elektro77, 08 Eylül 2018, 15:05:45

elektro77

Bu DAC0808 i kullanmak ne zor şey imiş.
Şöyleki:
portc nin tamamını dac a bağladım.
ben zannediyordumki bitleri sıra ile açınca Örn:
portc=1
portc=2
portc=3.....
şeklinde.
zannettimki opamp çıkış voltajıda simetrik olarak artar.
Fakat dac0808 sıradan anlamıyor. Voltajı azar azar arttırmak yerine kendi içinde bitlere karşılık gelen çıkışı veriyor.
Şimdi oturdum tablo yapıyorum.1.bitte opamp çıkışı şu volt, 2.bitte şu volt, 3. bitte şu volt diye yazıyorum.
Daha sonra 1 volt çıkış almak istediğimde bu tablodan bakıp 1 volta karşılık gelen bitleri bulup kullanmam gerekli.
Daha basit bir yolu varsa anlatırmısınız.
NOT:
Vref=15volt
VREF direnc. 7k5
opamp Çıkış=0-10 volt

Dosya ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#1
ete hocam portc nin bit durumunu ekrana nasıl yazdırırız.
Yani  portc nin binary olarak yazılışını kullanıp bit durumuna çevirip ekrana yazacağım.
Örn:
portc=255 bu değeri alıp bit durumuna convert edip
PORTC=11111111 Ekranda bu ibare gözükecek.
Bu işlemi yapan özel bir komut varmı.
sonra ben bu bitleri aşağıdaki formüle uyarlayacağım.
dAC0808 in çıkış voltajı formülü      Vout=10*(A1/2+A2/4+A3/8+................A8/256) burdaki A ibareleri bitleri temsil ediyor.

İlgili dosyalar ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

LCDOUT .....BIN sayı  şeklindeki komut SAYI değişkenindeki değeri direk Binary olarak ekrana yazdırır. Bu tür kullanımda hane formatı yoktur. Bit sayısınıda kontrol etmek istersen BIN8 veya BIN4 gibi yanına kaç bit gösterilecek ise ona ait sayıyı da yazarsın.

ete

elektro77

Hocam aşağıdaki formüllerde bitlerin bulunduğu bitin bit değerini alıp nasıl hesaplarız.
Örn:
00000111
BIT1+BIT2+BIT3=7 GİBİ.
Benim yaptıklarımda herbirini 1 olarak kabul ediyor ve sonucu 3 olarak çıkarıyor.

VO=(A1+A2+A3+A4+A5+A6+A7+A8) mesala bunun 255 yapması gerek ama 8 olarak hesaplıyor.

bu hesaplamayı doğru yaptığımda aşagıdaki formulun sonucu dac0808 in çıkış voltajını verecek. istediğim bu.

VO=10*(A1/2+A2/4+A3/8+A4/16+A5/32+A6/64+A7/128+A8/256)
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

128*bit7 + 64*bit6 + 32*bit5 + 16*bit4 + 8*bit3 + 4*bit2 + 2*bit1 + bit0
Formül budur
Ete

elektro77

#5
Teşekkürler hocam.Pratik zekanıza hayranım.Hiç aklıma gelmemişti bu çözüm.
Fakat yinede büyük bir sorunum var.
DAC0808 in datasheetine bakarsanız typical application devresindeki devreyi aynen uygulayınca çıkış voltajını aşagıdaki formulle hesaplayabileceğimizi söylüyor.
VO=10*(A1/2+A2/4+A3/8+A4/16+A5/32+A6/64+A7/128+A8/256)
ben bu formülü şu şekilde yaptım
VO=10*(1*A1/2)+(2*A2/4)+(4*A3/8)+(8*A4/16)+(16*A5/32)+(32*A6/64)+(64*A7/128)+(128*A8/256)
formülü ilk hali ilede kullasam nasıl kullanırsam kullanayım sonuç doğru çıkmıyor.
Nerdede yanlış yapıyorum söylermisiniz.
NOT: opamp beslemesi +15v /-15v volt simetrik
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#6
işte bu imiş hocam sonunda çözdüm
VO=(1000*A1/2)+(1000*A2/4)+(1000*A3/8)+(1000*A4/16)+(1000*A5/32)+(1000*A6/64)+(1000*A7/128)+(1000*A8/256)
LCDOUT $fe,$C0,"VO=",dec1(VO/100),",",dec2(VO//100)," VOLT"

bu formül sonuçları ondalıklı olarak tam olarak verdi.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#7
şimdi geldik işin en can alıcı noktasına.
Şu ki:
Ben keypedden 1.10 volt yazarak VO nun 1.10 volt olmasını istediğimde formul bunu hesaplayıp dac0808 in girişlerini buna göre hıgh veya low yapmalı.
Şimdi bu formulu yazmalıyım.
yani şöyle VO=1.10 ise burası ne olmalı=(1000*A1/2)+(1000*A2/4)+(1000*A3/8)+(1000*A4/16)+(1000*A5/32)+(1000*A6/64)+(1000*A7/128)+(1000*A8/256)
Bir fikriniz varmı?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Hattuşa

MCU dan ayarlı bir voltaj çıkarmaksa gaye neden içerisinde DAC barındıran MCU yu tercih etmiyorsunuz? mesela 16F1826 da dahili dac var, 32 adımlık 0-5v çıkış veriyor ve tek pin buna yetiyor.hassasiyeti az derseniz ucuz dijital potansiyometreler var 1024 adım 0-5v u 0,0048v hassasiyette bölüp veriyor bunda da 3 pin gidiyor. onunla ilgili sitede paylaşım yaapmıştık. ne yalan söyleyeyim bu DAC serisi dacları hiç sevemedim

elektro77

#9
ben çıkış voltajını keypedle yazarak yapacağım ve 0-10 volt istediğim için
malesef bende nefret ettim bu dactan
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#10
EVET MALESEF DACLAR KULLANIM AÇISINDAN ÇOK ZAHMETLİ.
Şimdi oturup 0-10volt için  0.1 volt hassasiyetle 100 adet IF-THEN komutu
ve 100 adet bın8 komutu yazacagım.
Örn: 1 VOLTTAN BAŞLATIRSAM
IF SAYI=100 THEN PORTC=88  '1 VOLT İÇİN
IF SAYI=110 THEN PORTC=56  '1.10 VOLT İÇİN
IF SAYI=120 THEN PORTC=120'1.20 VOLT İÇİN
IF SAYI=130 THEN PORTC=68.......................'10 volt için

Ha birde bunları yapmadan önce tüm bitleri manuel olarak aktif edip tek tek yazmam gerek buda 255 satırlık bir tablo eder demektir.İşin en zor kısmıda bu zaten.En iyisimi dac yerine başka bir çözüm bulmak.

Bir fikri olan varmı.
Ete Hocam ne dersiniz. değerli fikirlerinizi almak isterim



"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal