ADC, analog verileri dijital formata dönüştüren Analog-Dijital dönüştürücüdür; genellikle analog voltajı dijital formata dönüştürmek için kullanılır. Analog sinyal, sinüs dalgası veya konuşmamız gibi sonsuz değere sahip değildir, ADC bunları fiziksel bir miktar olarak sayılarla ölçülebilen belirli seviyelere veya durumlara dönüştürür. Sürekli dönüşüm yerine ADC, verileri periyodik olarak dönüştürür, bu genellikle örnekleme oranı olarak bilinir. Telefon modemiİnternet için kullanılan ADC örneklerinden biridir, analog verileri dijital verilere dönüştürür, böylece bilgisayar anlayabilir, çünkü bilgisayar sadece Dijital verileri anlayabilir. ADC kullanmanın en büyük avantajı, gürültünün orijinal sinyalden verimli bir şekilde çıkarılabilmesi ve dijital sinyalin analog olandan daha verimli hareket edebilmesidir. Dinlerken dijital sesin çok net olmasının nedeni budur.
Günümüzde piyasada, bir veya daha fazla kanala sahip dahili ADC'ye sahip birçok mikro denetleyici bulunmaktadır. Ve ADC kayıtlarını kullanarak arayüz oluşturabiliriz. Biz seçtiğinizde 8051 biz bir ADC dönüşüm gereken her türlü proje, yapım ailesi, o zaman kullanmak harici ADC. Bazı harici ADC yongaları 0803,0804,0808,0809'dur ve çok daha fazlası vardır. Bugün 8 kanallı ADC'yi AT89s52 Mikrodenetleyici ile yani ADC0808 / 0809 ile arayüzleyeceğiz.
Bileşenler:
- 8051 Mikrodenetleyici (AT89S52)
- ADC0808 / 0809
- 16x2 LCD
- Direnç (1k, 10k)
- POT (10k x4)
- Kapasitör (10 uf, 1000 uf)
- Kırmızı led
- Ekmek tahtası veya PCB
- 7805
- 11.0592 MHz Kristal
- Güç
- Bağlantı telleri
ADC0808 / 0809:
ADC0808 / 0809, monolitik bir CMOS cihazı ve mikroişlemci uyumlu kontrol mantığı olup, çıkışta 8 bit değer veren 28 pin ve 8 kanallı ADC giriş pinlerine (IN0-IN7) sahiptir. Çözünürlüğü 8'dir, böylece analog verileri 256 düzeyden (2 8) birine kodlayabilir. Bu cihazın üç kanallı adres hattı vardır: ADDA, ADDB ve ADDC kanal seçimi için. Aşağıda ADC0808 için Pin Şeması verilmiştir:
ADC0808 / 0809 , dönüştürme için bir saat darbesi gerektirir. Osilatör veya mikrodenetleyici kullanarak sağlayabiliriz. Bu projede mikrodenetleyici kullanarak frekans uyguladık.
Her üç adres satırını (ADDA, ADDB ve ADDC) Düşük tutarak IN0 giriş satırını seçebileceğimiz gibi, Adres satırlarını kullanarak herhangi bir giriş kanalını seçebiliriz. IN2 giriş kanalını seçmek istiyorsak, ADDA, ADDB'yi düşük ve ADDC'yi yüksek tutmamız gerekir. Diğer tüm giriş kanallarını seçmek için verilen tabloya bir göz atın:
ADC Kanal Adı |
ADDC PIN |
EKLE PIN |
ADDA PIN |
IN0 |
DÜŞÜK |
DÜŞÜK |
DÜŞÜK |
IN1 |
DÜŞÜK |
DÜŞÜK |
YÜKSEK |
IN2 |
DÜŞÜK |
YÜKSEK |
DÜŞÜK |
IN3 |
DÜŞÜK |
YÜKSEK |
YÜKSEK |
IN4 |
YÜKSEK |
DÜŞÜK |
DÜŞÜK |
IN5 |
YÜKSEK |
DÜŞÜK |
YÜKSEK |
IN6 |
YÜKSEK |
YÜKSEK |
DÜŞÜK |
IN7 |
YÜKSEK |
YÜKSEK |
YÜKSEK |
Devre Tanımı:
"ADC0808 ile 8051 Arayüzünün" devresi, cihazı birbirine bağlamak için daha fazla bağlantı teli içeren biraz karmaşıktır. Bu devrede ağırlıklı olarak 8051 mikrodenetleyici, ADC0808, Potansiyometre ve LCD olarak AT89s52 kullandık.
16x2 LCD, 4 bit modunda 89s52 mikro denetleyiciye bağlanır. Kontrol pini RS, RW ve En doğrudan P2.0, GND ve P2.2 pinlerine bağlanır. Ve D4-D7 veri pini, 89s52'nin P2.4, P2.5, P2.6 ve P2.7 pinlerine bağlanır. ADC0808 çıkış pini doğrudan AT89s52'nin P1 portuna bağlanır. ADDA, ADDB, AADC adres hattı pinleri P3.0, P3.1 ve P3.2'ye bağlanır.
ALE (Adres mandalı etkin), SC (Dönüştürmeyi başlat), EOC (Dönüşüm sonu), OE (Çıkış etkin) ve saat pimleri P3.3, P3.4, P3.5, P3.6 ve P3.7'ye bağlanır.
Ve burada ADC0808'in 26, 27 ve 28 numaralı pinlerine bağlı üç potansiyometre kullandık.
Devreye güç sağlamak için 9 voltluk bir pil ve 5 voltluk bir voltaj regülatörü yani 7805 kullanılır.
Çalışma:
Bu projede, ADC0808'in üç kanalını birbirine bağladık. Ve gösteri için üç değişken direnç kullandık. Devreye güç verdiğimizde mikrodenetleyici uygun komutu kullanarak LCD'yi başlatır, ADC yongasına saat verir, adres hattını kullanarak ADC kanalını seçer ve başlangıç dönüşüm sinyalini ADC'ye gönderir. Bu ADC'den sonra ilk olarak seçilen ADC kanal girişini okur ve dönüştürülmüş çıkışını mikro denetleyiciye verir. Daha sonra mikrodenetleyici, değerini LCD'de Ch1 konumunda gösterir. Daha sonra mikrodenetleyici adres hattını kullanarak ADC kanalını değiştirir. Ardından ADC seçilen kanalı okur ve çıktıyı mikrodenetleyiciye gönderir. Ve LCD'de Ch2 adı olarak gösterin. Ve diğer kanallar için akıllıca gibi.
ADC0808'in çalışması, ADC0804'ün çalışmasına çok benzer. Bunda, birinci mikro denetleyici, ADC'nin çalışması için saat sinyali gerektirdiğinden, Zamanlayıcı 0 kesintisini kullanarak ADC0808'e 500 KHz saat sinyali sağlar. Şimdi mikrodenetleyici, adresteki mandalı etkinleştirmek için ADC0808'in ALE pinine (aktif yüksek pini) DÜŞÜK ila YÜKSEK seviyeli bir sinyal gönderir. Daha sonra SC'ye (Dönüştürmeyi Başlat) YÜKSEK - DÜŞÜK Seviye sinyali uygulayarak, ADC analogdan dijitale dönüşümü başlatır. Ve sonra EOC (Dönüşüm Sonu) piminin DÜŞÜK gitmesini bekleyin. EOC DÜŞÜK olduğunda, analogdan dijitale dönüşümün tamamlandığı ve verilerin kullanıma hazır olduğu anlamına gelir. Bundan sonra mikrodenetleyici, ADC0808'in OE pinine HIGH'dan LOW'a bir sinyal uygulayarak çıkış hattını etkinleştirir.
ADC0808, çıkış pinlerinde oran metrik dönüştürme çıkışı verir. Ve radyometrik dönüşüm için formül şu şekilde verilir:
V in / (V fs -V z) = D x / (D maks- D min)
Nerede
V in, dönüşüm için giriş voltajıdır
V fs tam ölçek Voltaj
V z sıfır voltajdır
D x ölçülen veri noktasıdır
D maks Maksimum veri limiti
D min Minimum veri limiti
Program Açıklaması:
Programda, öncelikle başlık dosyası dahil ediyoruz ve ADC ve LCD için değişken ve giriş & çıkış pinlerini tanımlıyoruz.
# Dahil etmek
Gecikme oluşturma işlevi (boşluk gecikmesi), LCD başlatma, diziyi yazdırma, LCD komutları vb. Gibi bazı LCD işlevleriyle birlikte oluşturulmuştur. Bunları Kod'da kolayca bulabilirsiniz. 8051 ile LCD arabirimi ve işlevleri için bu makaleye bakın.
Bundan sonra ana programda LCD'yi başlattık ve buna göre EOC, ALE, EO, SC pinlerini ayarladık.
void main () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Ve daha sonra program ADC'yi okur ve ADC çıktısını bir değişkende saklar ve ardından void read_adc () ve void adc (int i) işlevlerini kullanarak ondalıktan sonra ASCII dönüşümünden sonra LCD'ye gönderir:
void read_adc () {sayı = 0; ale = 1; sc = 1; gecikme (1); ale = 0; sc = 0; while (eoc == 1); while (eoc == 0); oe = 1; sayı = input_port; gecikme (1); oe = 0; } void adc (int i) {anahtar (i) {durum 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();