D/A ve A/D dönüştürücüler sayısal kontrol sistemlerinde sıkça kullanılan lojik devrelerdir. Bir mikroişlemcinin (yada herhangi bir sayısal işlemcinin) çıkışı 0 ve 1 bit dizilerinden oluşmaktadır. Mikroişlemci tarafından kontrol edilecek cihazların büyük çoğunluğu ise anolog bir işaretle çalışmaktadır. Bu durumlarda digital bit serisi D/A dönüştürücü ile bir gerilim seviyesine karşı düşürülür.
8 bitlik bir verinin anoloğa çevrilmesi problemini gözönüne alalım.
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
MSB <———————————————-> LSB
Bu şekildeki bir bit dizisini D/A çeviriciye gönderdiğimiz zaman anolog çıkışa en az katkıyı LSB (Least Significant Bit) en çok katkıyı MSB (Most Significant Bit) sağlamalıdır. LSB ve MSB arasındaki her bit kendinden bir önceki bite göre 2 kat daha fazla ağırlık yapmalıdır. Çünkü ardışıl bitler arasındaki oran 2 dir. Böyle bir çıkışı üretebilecek basit ağılıklandırma modelinin devresi aşağıdaki gibidir:
Şekil 1. 4 Bit Ağırlıklı D/A Dönüştürücü
Vref gerilimi LSB üzerinde Vref/8R lik bir akım oluştururken MSB üzerinde Vref/R akımını oluşturuyor. Başka bir deyişle:
LSB = Vref / 2 n – 1
MSB = 8 x LSB
LSB’den sonraki bir m. bit için anolog çıkış = LSB x m
Anolog çıkış Vref ‘den beslenen bitlerin ağırlıklarınn toplamıdır. Toprağa anahtarlanmış bitlerin çıkışa katkısı 0’dır.
V0 = Vref x [ b0 2 – 1 + b1 2 – 2 + …. + bn-1 2 – n ]
Bu model D/A dönüştürücü tercih edilmez. Çünkü şekilden de anlaşılacağı gibi LSB’ye karşı düşen direnç DAC’ın bit sayısı arttıkça büyür. Örneğin 8 bitlik bir D/A için LSB’ye karşı düşen direnç 128R’dir. Bu sakıncayı ortadan kaldırmak için R-2R modeli geliştirilmiştir.
Şekil 2. 4 bit R-2R Modeli D/A
Aşağıda Vref = 7V olan 3 bitlik bir D/A dönüştürücü için giriş/çıkış ilişkisi verilmiştir.
Girişler |
Çıkış |
0 0 0 |
0V |
0 0 1 |
1V |
0 1 0 |
2V |
0 1 1 |
3V |
1 0 0 |
4V |
1 0 1 |
5V |
1 1 0 |
6V |
1 1 1 |
7V |
Burada verilen değerler idealdir. Ançak DAC’ lar da fiziksel cihazlar olduklarından ideal değildirler. Bu nedenle üreticiler DAC’ ların doğruluğu ile ilgili bir takım parametreler verirler. Mutlak doğruluk (absolute accuracy) gerçek DAC çıkışı ile ideal çıkış arasındaki farkın maximum anolog çıkışa bölünmesi ile elde edilen bir parametredir. Bazı üreticiler bunun yerine basitçe ideal ve gerçek değerler arasındaki maximum farkın daima en anlamsız bitin ağırlığının yarısından küçük olduğunu belirtmek için "1/2 LSB’ den küçük" gibi kelimeler kullanırlar. Böyle DAC’ lar için "monoton" da denir. Çünkü giriş arttıkça çıkışta artar.
Uygulamalar
1. Mikroişlemcili Fonksiyon Üreteci
Bu uygulamadaki asıl amaç 8 bitlik mikroişlemcilerle DAC’ın kullanılmasını anlatmaktır. Fonksiyon üreteçinin blok yapısı şekildeki gibidir :
Şekil 3. Fonksiyon Üreteç Lojiği
Öncelikle PIA hakkında kısa bir bilgi vereyim. PIA, MC6821 entegresi olup 40 bacaklı NMOS bir elemandır. CPU ile dış cihazlar arasında parelel giriş/çıkış yapılacağı zaman yüzleştirme elemanı olarak kullanılır.
Şekil 4. MC6821’in Blok Yapısı
PIA iki dış cihaza hizmet edebilecek iki register takımına sahiptir. Üçü A tarafında üçü de B tarafındadır. Bu altı keydedici bellekte E000-E004 arasında oturur. (2 adres hattı yani 4 adres var) Dört adres altı kaydediciye yetmeyeceği için veri kaydediciler ile veri yön kaydediciler aynı adresi paylaşacaktır. Öncelikle denetim kaydedicisindeki 2.bit (DDR biti) 0 yapılarak A yada B’nin giriş mi çıkış mı olacağına karar verilir. Bu aşamadan sonra veri yön kaydedicilere ihtiyaç duyulmayacağından DDR biti 1′ e setlenerek veri kaydedici seçilir. Artık bu kaydedicilerin oturduğu adrese gönderilecek herşey veri olarak kabul edilir.
E000: A veri ve veri yön kaydedicisi, E002: B veri ve veri yön kaydedici
E001: A kontrol kaydedicisi, E003: B kontrol kaydedici
Mikroişlemci olarak Motorola tarafından geliştirilen 6
802 kullanacağız. 6802, 40 bacaklı bir yongadır. 8 bit veri ve 16 bit adres yoluna sahiptir.
Digital/Anolog dönüştürücü yerine R-2R modeli daha uygundur.
Öncelikle PIA için gerekli setlemeleri yapmamız gerekir. Bunun için aşağıdaki kodu koşmalıyız :
Adres |
6802 Makine Kodu |
6802 Assembly Kodu |
Açıklama |
0100 |
7F E0 03 |
CLR PIA BC |
B kont. kayd. DDRB = 0 (veri yön) |
0103 |
86 FF |
LDA A#$FF |
A = 11111111 (çıkış) |
0105 |
B7 E0 02 |
STA A#$E002 |
B çıkış olarak seçildi |
0108 |
86 04 |
LDA A#$04 |
A = 00000100 (DDRB = 1) |
010A |
B7 E0 03 |
STA A$E003 |
Ortak kaydedici veri içindir. |
Tablo 1. PIA’i Setleyecek Makine Kodu
PIA’in setlenmesi tamamlandıktan sonra istediğimiz fonksiyonları üretecek proğramı koşalım. Örneğin testere dişi dalga üretmek için aşağıdaki kısa kodu kullanabiliriz :
010D |
B7 E0 02 |
STA A$E002 |
A’ nın içeriğini B veri kayd. gönder |
0110 |
4C |
INC A |
A = A +1 |
0111 |
7E 01 0D |
JMP 010D |
010D’ ye dallan |
Tablo 2. Testere Dişi Dalga Üreten Makine Kodu
Yukardaki kod A kaydedicisinin içeriğini sürekli artırarak PIA’in veri kaydedicisinin oturduğu $E002 adresine gönderiyor. A, 8 bitlik bir register olduğundan A = 11111111 (255) olduğunda A’ yı 1 artırırsak A = 0 olacaktır. PIA kendisine gelen parelel 8 bitlik digital veriyi D/A dönüştürücüye gönderir. D/A dönüştürücü karşı düşen anolog işareti üretir. Bu anolog çıkışı bir osiloskop ile incelediğimiz zaman testere dişi şeklinde bir grafik göreceksiniz.