Gönderen Konu: ARDUINO AD9850 KODLARI  (Okunma sayısı 7718 defa)

Çevrimdışı TA5IHA

ARDUINO AD9850 KODLARI
« : 27 Şubat 2018, 18:20:24 »
Arduino nano-uno-mega-due farketmeksizin AD9850 modülünü şu kodlarla kontrolü sağlanmaktadır. kristal frekansı gibi verilerin koda yazılması gerekiyor.

#define AD9850_CLOCK 125000000       

#define W_CLK 8                         
#define FQ_UD 7       
#define DATA  6       
#define RESET 5     

long unsigned int freq = 1000;         
long unsigned int freqOld = freq;

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

void tfr_byte(byte data) {
  for (int i = 0; i < 8; i++, data >>= 1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);   
  }
}

void sendFrequency(double frequency)
{
  int32_t freq1 = frequency * 4294967295/AD9850_CLOCK;
  for (int b = 0; b < 4; b++, freq1 >>= 8)
  {
    tfr_byte(freq1 & 0xFF);
  }
  tfr_byte(0x000);                     
  pulseHigh(FQ_UD);                   
}
void setup()
{
  pinMode(FQ_UD, OUTPUT);             
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);

  pulseHigh(RESET);
  pulseHigh(W_CLK);
  pulseHigh(FQ_UD);   
}

void loop()
{
    sendFrequency(freq);
}

 TA5IHA-73
 HASAN ALTINKARA

Çevrimdışı TA2GC

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #1 : 27 Şubat 2018, 20:01:13 »
güzel çalışmanızın tempo düşmeden ilerlemesini dilerim,peki elinde 9851 kiti olan x6 multipleri açabilecekmi  ?

Çevrimdışı TA5IHA

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #2 : 27 Şubat 2018, 20:10:11 »
teşekkür ederim, AD9850 ile AD9851 çalışması sanırsam aynı kodlara sahip. frekans aralığı 9851 de biraz daha geniş. daha önce bununla ilgili proje paylaşmıştım. linki : http://www.telsizciler.org/index.php/topic,38199.0.html
 73 TA5IHA
 HASAN ALTINKARA

Çevrimdışı TA2GC

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #3 : 28 Şubat 2018, 12:22:42 »
iyi çalışmalar, AD9850 125NHz'lik bordun üzerindeki kristal osilatör ile Clok sağlıyor,AD9851 ise yine bordun üzerindeki 30MHz
kristal osilatörünü ,6'ya çarparak iç clok için 180MHz elde ediyor ,tüm devre ilk  enerji verildiğinde koşullanırken x6 rate multiplerinin açılması gerekiyor,tabiki ana referans osilatörleride farklı biri 125 diğeri 180MHz belki bunlar içinde formüle etmek gerekiyor..

şimdi bunları yazmamın nedeni ,çok yönlü kullanıma açık olabilirmi ? idi,piyasadaki kit bazında ticari olarak hazırlanmış bir kaç ürünnde ,Cal düğmesine basarak enerji verdiğimizde hangi DDS çipini hangi clok'ta kullanacaksın diye soruyor,gerekli seçimi yaptığınız an iç e2'ye yani eepromuna bunu kaydediyor.

yine mini bir açıklama yapayım bu AD9850 çipini Analog Devices yetkili satıcısından almadı iseniz genellikle çin malı sahte çıkıyor, çalışmasına bir lafım yok çalışıyor,fakat bazı registerleri cevap vermiyor,çok ucuz olduğu için kimsenin umurunda değil ,hoş benimde değil,fakat AD9851 daha taklit edilemedi fiyatı ile bunuda belli ediyor, o yüzden tasarımlarınızda seçenek bulundurabilirmisiniz diye sormuştum,Allah kolaylık versin....

Çevrimdışı TA3ALS

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #4 : 28 Şubat 2018, 14:00:06 »
Her ikisi içinde 2007-2008 yıllarında hem paralel, hem de seri data aktarımı kullanarak program yazmıştım. Hatırladığım kadarı ile hem AD9850 hem de AD9851 multiplier 1 modunda sorunsuz çalıştı. AD9851 6 çarpan ile sıkıntı çıkarmış, bazen çalışmasına rağmen bazende çalışmamıştı. Sorunu initalize yaparak çözdüğümü hatırlıyorum. açılışta 1 çarpanı ile 1 Hz çıkaracak şekilde, hemen akabinde de 6 çarpanını kullanarak çalıştırmıştım.

Kişisel tecrübelerime dayanarak mümkün olduğu kadar 6 çarpanını kullanmaktan kaçınmanızı öneririm. Zira ortalık spurstan geçilmiyor.

Hazır modül de çok iyi olmuyor. Üzerindeki alçak geçireni spektrum analizörde incelerseniz rezalet ötesi olduğunu görürsünüz. Bu yüzden modül kullanmak zorunda kalırsam hep filtresiz çıkıştan alarak hariçten filtre kullandım. Bir de modülün üzerinde jitter açıksa kapatın zira harmonik kaynağıdır.

Eğer tek bantlı bir cihazda kullanacaksanız bu önerileri önemsemeyebilirsiniz, çok sorun çıkmaz.

Bu DDS entegresinin DAC çözünülürlüğü 10 bittir. Modülün fiyatı 12 doların üzerine çıkmış. Eğer yazılımla uğraşmaya kararlıysanız bununla uğraşmayın derim.  14 Bit DAC kullanan AD9951  (AD9851 değil!) 17 dolar civarında ve registerleri de karışık değil, bunu örneğin kenwood bile HF cihazlarında VFO olarak kullanıyor. Çıkışı o kadar temizdir.

Böyle bir projeye giriştiğiniz için sizi kutluyorum. Kolaylıklar dilerim.



Çevrimdışı TA3ALS

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #5 : 02 Mart 2018, 15:51:25 »
Engin Bey,
AD9851 ile ilgili bahsettiğim sorunu araştırınca şöyle bir sayfa buldum.

http://www.kr1st.com/serialdds.htm

burda yazılana göre AD9851 güç verildiği zaman bazen test moduna girmekte imiş. Bu durumda çıkış vermiyormuş.

Yukarıda  verilen program AD9850 yi  6 çarpanı ile çalıştırabilir gözüküyor. " tfr_byte(freq1 & 0xFF); " kod parçasındaki FF yani 255 işlemciye gönderilen ilk biti 1 yapacağı için (eğer dds test modunda değilse) 30MHz osilatör ile dds yi 180 MHz clock hızında çalıştırabilir. Tamamen tesadüf yani.

Eğer AD 9851 kullanacaksanız dds ye önce 40 bit 0 gönderin, Sonra 0b00000001 ve peşinden 32 bit formülile  hesaplanan frekans verisi. LSB ilk olacak şekilde kaydırma yapılacak.

eğer ilk baytı 0b00000000 yaparsanız bu durumda da 1 multiplier çalışıyor.

Kod içeriğindeki 255 ise, niye böyle seçilmiş bilmiyorum. Zira ilk bitin 1 olması AD9850 için anlamsız olmakta. Geri kalan bitler de faz açısı ile ilgili, pek bir önemi yok.
Selamlar...




Çevrimdışı TA2GC

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #6 : 02 Mart 2018, 19:39:18 »
@Ali Şahin  bey
ilginize teşekkürler ben bu sorunu zamanında reset bacağınıda MCU ya girerek son derece kararlı hale getirmiştim,fakat AD9850'ye uyu talimatı verince bir daha gerilimi kesip yeniden vermeden asla uyandıramadım,yabancı forumlardan aldığım önerilerde işe yaramadı varsayımlarda kaldı,bir BFO yapmıştım komütatör ile -1500 +1500 yapıyor AM yayınlarını dinleyebildiğim için BFO'yu uyutmam gerekti ,işi çözemeyince bütün registerlere FF yada 00 basarak sinyal üretmesini durdurmuştum,fakat hiç etik değildi zira DDS çipi boşta 185mA çekip duruyordu...

elinizde basic yada Proton tek frekans için paralel örneği varmı acaba ? sanırım seri stream girildiğinde uyanamıyor...

Çevrimdışı TA3ALS

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #7 : 03 Mart 2018, 01:35:25 »
Engin bey, maalesef bulamadım. Ama protonla aşağıdaki gibi göndermiştim.

Gonder:
fq_ud=0               'normalde 1 ayarlı
portb=ayarbayt          'AD9850 için ayarbayt=0,  DDS portB ye bağlı.
clk=1             'normalde 0 ayarlı
clk=0
portb=dizi_byte.0
clk=1
clk=0
portb=dizi_byte.1
clk=1
clk=0
portb=dizi_byte.2
clk=1
clk=0
portb=dizi_byte.3
clk=1
clk=0
fq_ud=1
return

Datasheet paralel veri göndermede ilk bayt olan konfigürasyon baytının 0 ve 1. bitleri kesinlikle 0 atanmalı diyor. Power down ise 2. bit. Bu bit 1 olunca DDS kapanıyor olmalı(-denemedim-).
Paralel aktarımın avantajı çok hızlı olması. O zamanlar osilaskopla frekans sweep işleri yaptırmıştım.

Çevrimdışı TA2GC

Ynt: ARDUINO AD9850 KODLARI
« Yanıtla #8 : 03 Mart 2018, 06:44:00 »
teşekkür ederim deneyeceğim...