avatar_elektro77

Picte 0-5Volt, 8 bit analog çıkış oluşturma

Başlatan elektro77, 25 Haziran 2020, 20:12:12

elektro77

Aşağıdaki devrede amacım, picin bir portunun tamamını kullanarak 0 ila 5 volt arası bir gerilim elde etmek.
Bunu yapabilmek ve 8 bit çözünürlükte bir gerilim elde etmek için direnç değerleri ne olmalıdır?
Kod kısmında ise hangi mantıkla çıkışları aktif edeceğimi bilmiyorum. Yardımcı olabilirmisiniz.

"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


elektro77

#2
Alıntı yapılan: ete - 26 Haziran 2020, 08:22:18R-2R prensibini araştır.

https://www.elektrik.gen.tr/2015/08/dac-ve-adc/319

Ete

Hocam gönderdiğiniz linkteki kaynakta aşağıdaki gibi bir hesaplama yapılmış. Fakat çözünürlük birim voltajı olan 0.046Voltu nasıl hesapladığını bilemedim. Nasıl buldu bu sonucu.

Çözünürlük değerinin matematiksel formülü şöyledir.
Çözünürlük = 1 / 2 Giriş bit sayısı
Çözünürlük Voltajı = Maksimum Çıkış voltajı * 1 / 2 Giriş bit sayısı
Örnek: Maksimum çıkış voltajı 10V olabilen bir bir DAC devresinde 4 adet dijital giriş varsa çözünürlük nedir?
Çözünürlük = 1 / 2 Giriş bit sayısı = 1 / 2 4 = 1/16 = 0,0625 başka bir değişle % 6,25'dir.
Çözünürlük Voltajı = Maksimum Çıkış voltajı * 1 / 2 Giriş bit sayısı= 10*0,0625=0,625 V
Örnek deki DAC devresinin çıkışı 0,046 V katları şeklinde değişecektir.
"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

Nasıl buldu bende bilemiyorum.
Bildiğim tek şey senin sisteminde maks. voltaj 5V olacak ve 8 bit sistem kullanacaksın.
Bu durumda çözünürlüğün;
çöz=5v * /2 üzeri 8 yada 5v * 1/256 = ‭0,01953125‬V olacağıdır.

Ete

elektro77

#4
hocam bu işlemi DAC entegresi kullanmadan yukarıda çizdiğim şemadaki gibi yapamıyormuyuz?
Kara düzen, gerilim bölücü hesabına göre çıkışları uygun dirençlere uygun şekilde ve sayıda çıkış aktif ederek yapabiliyorum ama bir düzeni ve kolay bir mantığı olmalı diye düşünüyorum.Ama DAC kullanmadan. Nedir bu?
bu çözünürlük formülünü r-2r devresinde kullanabilirmiyiz.
Eğer kullabilirsek pinleri hangi kod prensibi ile açıp kapatacağım. örnek olarak aşağıdaki 8 bit R-2R devresinde 0-5 volt arasında bir çıkış almam için hangi algoritma prensibini kullanmalıyım?

"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

#5
Tüm sorularımın cevabını buldum.
Tasarladığım devre  ve yazılım ektedir.

Ete hocama ÇOK Teşekkür ederim.

@ __config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
DEFINE OSC 4
TRISA=%00000000
TRISB=%00000000
TRISC=%00000011
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
'--------------------------------------------------------------------------------
ADCON1=%00000111      'ADC KANALLARI DİJİTAL YAPILDI - ADC İPTAL
CMCON=7               'komparatör pinleri iptal hepsi giriş çıkış yapıldı.16F877 de yok.
OPTION_REG.7=1        'portB deki dahili PULL-UP lar İPTAL edildi. 
'OPTION_REG=%00000101  
'INTCON=%10100000  
'TMR0=0
'--------------------------------------------------------------------------------
DEFINE LCD_DREG		PORTC	
DEFINE LCD_DBIT		4		
DEFINE LCD_RSREG	PORTC	
DEFINE LCD_RSBIT	2	
DEFINE LCD_EREG		PORTC	
DEFINE LCD_EBIT		3		
DEFINE LCD_BITS		4	
DEFINE LCD_LINES	2
'--------------------------------------------------------------------------------
SYMBOL ARTIR=PORTC.0
SYMBOL AZALT=PORTC.1
A VAR BYTE:A=0
SYMBOL B=PORTB
 

lcdout $FE,1 'EKRANI TEMİZLEME İŞLEMİ
pause 100 
'*******************************************************************************
BASLA:
GOSUB EKRAN

IF ARTIR=1 THEN 'ARTIRMA İŞLEMİ
PAUSE 50 
A=A+1
IF A=0 THEN A=255
B=A
GOSUB EKRAN
ENDIF

IF AZALT=1 THEN'AZALTMA İŞLEMİ
PAUSE 50 
A=A-1
IF A=255 THEN A=0
B=A
GOSUB EKRAN
ENDIF

GOTO BASLA
'-------------------------------------------------------------------------------
EKRAN:
LCDOUT $FE,$80,BIN8 A,"            "
LCDOUT $FE,$C0,DEC3 A,"            "
RETURN


END


"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
Hocam yukarıdaki devreyi picin b portunun ilk 4 bitini kullanarak yapmak istersek yazılım nasıl olmalıdır.
Ben Symbol B=portb diye tanımlamıştım ve A diye tanımladığım byte değerlikli başka bir değişkeni B ye aktarıveriyordum. Fakat b portunun ilk 4 bitine bunu nasıl aktarırım, ancak son 4 biti istediğim başka amaçlarla kullanabilmeliyim.
0-5 volt için direnç düğüm noktasını ilk dört bitin bittiği yerden alıp ve 127 ye kadar aktardınmı olur diyeceksiniz ama o anda b portunun son 4 bitinde başka bir amaçla 1 yaptığım bir pin 0 olmaz mı?
Nasıl bir yol izlemeliyim hocam?
Umarım anlatabilmişimdir.
"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

8 bitlik bir sayının veya 8 bitlik bir PIC portunun bazı bitlerinin değerlerinşi aynı bırakıp diğer bitleri ile oynama yada o bitlerde değişiklik yapma işine bit izolasyonu deniliyor.
İşlem sırası şöyle;
Önce Portun (veya 8 bitkik sayının) değişmeyecek olan bitlerinin kopyasını alırsın
KOPYA=PORTB & %11110000   Böylece PORTB nin son 4 bitini izole etmiş olduk.
SOnra değişecek bitlerin yerine gelecek olan değeri Kopya ya eklersin. KOPYA=KOPYA + SAYI
SOnra bitlerin son halini tekrar porta yazarsın. PORTB=KOPYA
Hepsi bu . Bu örnekte PORTB nin son 4 biti hiç değişmemiş oldu. Tabiiki burada kullandığımız ve değişen bitlere karşılık gelen SAYI değişkeninde yer alacak en büyük sayı 4 bitlik olmalıdır. Yani %1111 sayısı. Burada hata yaparsan değişmeyecek bitleri değiştirmiş olursun.

Ete

elektro77

#8
Hocam
Bunlar çok değerli bilgiler. Teşekkür ederim.
Bit izolasyonu veya buna benzer bilgiler ile ilgili bir dökümanınınız veya dersiniz var mı Hocam. Bu devre ile ilgilii dosyanın içine koymak 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"

elektro77

#9
4 bit olanını aşağıdaki şekilde çalıştırdım. Teşekkürler Ete Hocam
kopya var byte  
KOPYA=PORTB & %11110000'KOPYA=PORTB & %11110000'B PORTUNUN KOPYASI ALINIP SON 4 BİT İZOLE EDİLMİŞ OLUR
'BÖYLELİKLE SON 4 BİT BAŞKA BİR İŞ İÇİN KULLANILABİLİR.

lcdout $FE,1 'EKRANI TEMİZLEME İŞLEMİ
pause 100 
'*************************4 bit kullanım****************************************
BASLA:
GOSUB EKRAN4BIT

IF ARTIR=1 THEN 'ARTIRMA İŞLEMİ
WHILE ARTIR=1:WEND 
KOPYA=KOPYA+1
IF KOPYA=16 THEN KOPYA=15
B=KOPYA
GOSUB EKRAN4BIT
ENDIF

IF AZALT=1 THEN'AZALTMA İŞLEMİ
WHILE AZALT=1:WEND
KOPYA=KOPYA-1
IF KOPYA=255 THEN KOPYA=0
B=KOPYA
GOSUB EKRAN4BIT
ENDIF

GOTO BASLA
'-------------------------------------------------------------------------------
EKRAN4BIT:
LCDOUT $FE,$80,BIN8 KOPYA,"            "
LCDOUT $FE,$C0,DEC3 KOPYA,"            "
RETURN


END
"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