AD9833 SIN-GEN ARDUINO IDE(SPI lib.)

Öncelikle donanım bağlantım şu şekilde.

ARD CLK(13)-----> SCLK
ARD MOSI(11)--->SDATA
ARD CS(10)------->FSYNC
Kablolarımı hem düdükte hem ohm kademesinde kontrol ettim 0.32-0.35 ohm aralığında geliyor hepsi.

Bilgisayarı pilden çalıştırıyorum modül ve ard bilgisayar usb'sinden besleniyor.
Modül beslemesinde 100uF 16v ve 330uF 16V kapasite bulunuyor.
Modül üstündeki 2 ayı gnd hattı'da aynı gnd hattına birleşiyor.

Donanım kısmı bu şekilde.

Program kısmında nasıl msb ve lsb yazacağımı anlamadım.
sayfa 15 tablo10 ve 11'e bakarsak.
tablo 10'a odaklanalım 0x3FFF lsb'sine freq1'i yazıyormuşuz.
Bunu yolu şu değil mi? SPI.transfer16(0x3FFF | data);
 
Ayrıntılı bakmadım ama frekans belirleyen değer 28 bitlik bir değer. İki tane transfer16 ile yazacaksın bunu. Sorun nerede?
asdasdsa.png
 
Bir 16 bit control word, iki tane de 16 bitlik data word yazacaksın. Control word deki her bitin anlamını öğrenmen lazım ki doğru yapılandırabilesin.

1657459064431.png
 
Ezberden gitme. Control word'deki bitlerin görevini anlamaya çalış.
 
Ezberden gitme. Control word'deki bitlerin görevini anlamaya çalış.
abi onları okuyup duruyorum sabahtan beri.
çoğunu anladım anlayamadıklarım zaten okuyup anlamayacağım şeyler eğer deneyebiliirsem onları çalıştırıp göreceğim.
 
Datasheet sayfa 15 e göre çıkış frekansı nedir?

[math]f_{out} = \frac{f_{MCLK}}{2^{28}} \times FREQREG[/math]
Bize ne lazım? Belli bir frekans değeri için FREQREG'e ne yazacağız o lazım.

[math]FREQREG = \frac{f_{out} \times 2^{28}}{f_{MCLK}}[/math]
İki tane frekans yapılandırma registeri var, FREQ0 ve FREQ1. Herhangi birisini kullanabiliriz. FREQ0 kullanalım. Mesela 12 kHz istiyoruz, FREQ0 ne olması lazım?
 
Datasheet sayfa 15 e göre çıkış frekansı nedir?

[math]f_{out} = \frac{f_{MCLK}}{2^{28}} \times FREQREG[/math]
Bize ne lazım? Belli bir frekans değeri için FREQREG'e ne yazacağız o lazım.

[math]FREQREG = \frac{f_{out} \times 2^{28}}{f_{MCLK}}[/math]
İki tane frekans yapılandırma registeri var, FREQ0 ve FREQ1. Herhangi birisini kullanabiliriz. FREQ0 kullanalım. Mesela 12 kHz istiyoruz, FREQ0 ne olması lazım?
128849 hesaplıyorum yanlış mı yaptım acaba.
 
Özel modu var AD9833 ün, dijital sinyalin MSB sini çıkışa yönlendirebiliyor. Onu da bölebiliyorsun. Bize lazım olan bir mod değil.

Bizi ilgilendiren sadece FSELECT (FREQ0 ı seçmek istiyoruz) ve B28 (bunu set etmek istiyoruz çünkü full 28 bitlik veri yazacağız FREQ0 a) Bu iki bite doğru değeri verip deneyebilirsin.
 
Özel modu var AD9833 ün, dijital sinyalin MSB sini çıkışa yönlendirebiliyor. Onu da bölebiliyorsun. Bize lazım olan bir mod değil.

Bizi ilgilendiren sadece FSELECT (FREQ0 ı seçmek istiyoruz) ve B28 (bunu set etmek istiyoruz çünkü full 28 bitlik veri yazacağız FREQ0 a) Bu iki bite doğru değeri verip deneyebilirsin.
Az önce birşeyi başardım.
Çıkışı kare yapabildim.
ama bu entegren frkenası nerden aldı bilmiyorum tipi değiştirdim ama frekansı değiştiremedim.

C++:
  SPI.transfer16(0x2028);
  SPI.endTransaction();

Bu şekilde yapmak lazımmış yazdıktan sonra end vermek gerekiyormuş şuan 100kHz kare çıkarıyorum şimdi üçgen deneyeceğim.
 
binary yazınca kafam karışıyor ondan hex çevirip yazıyorum.
 
hmmmm reset pasif ettikten sonra tekrar aktif etmezssek entegre OC oluyor ve 30-40MHzlere fırlıyor
 
ad.png

500Hz set edili konumda modül çıkışı bu şekilde.
Dalga tipi değiştirme ve frekans değiştirme yapabiliyorum
 
Fakat bir sorun var modül ile program içinde ilgilendiğin an modül çıkışını boşta bırakıyor.

Yani data yazma anında anlık olarak boşa çıkıyor yazdıktan sonra devam ediyor.
Buda eğer loop içinde devamlı yazma yapıyorsak berbat bir çıkış ortaya çıkarıyor.

Sadece istenilen zamanda veri yazılması gerekiyor.
Devamlı veri yazma ihtiyacı yok modüle setup kısmında ayarladığım devam ediyor.
Ama bunu fonksiyon jeneratörü haline getireceksek ayrı bir void içinde işleme almalıyız yazma kısmını.
 
birde şuan çıkış değerini kendim hesaplaylıp yazıyorum.
üslü sayı nasıl işleyeceğime bakayım c++ ile
 

çok güzel açıklamışlar.

C++:
pow(sayının kendisi,üssü)
bu şekilde basit bir kullanımı varmış
 
Üslü sayı hesabına gerek yok. MCLK sabit, bit sayısı da sabit.

2^28 / 25000000 = 10.73741824

En iyi çözünürlüğü sağlamak için virgülden sonra kaç basamak gerekir bilmiyorum, o yüzden işi garantiye almak için hesabı double değişkenlerle yapmakta fayda var.

Frekans registerine yeni değer yazınca çıkışın bozulması tuhaf geldi ama, bunun olmaması lazım. Eğer böyle bir sorun varsa frekans süpürmesi (frequency sweep) yapmak imkansız hale gelir. Kodun son halini koy ben de deneyeyim benim modül ile.
 
Üslü sayı hesabına gerek yok. MCLK sabit, bit sayısı da sabit.

2^28 / 25000000 = 10.73741824

En iyi çözünürlüğü sağlamak için virgülden sonra kaç basamak gerekir bilmiyorum, o yüzden işi garantiye almak için hesabı double değişkenlerle yapmakta fayda var.

Frekans registerine yeni değer yazınca çıkışın bozulması tuhaf geldi ama, bunun olmaması lazım. Eğer böyle bir sorun varsa frekans süpürmesi (frequency sweep) yapmak imkansız hale gelir. Kodun son halini koy ben de deneyeyim benim modül ile.
C++:
//D13---->MODÜL CLOCK
//D11---->MODÜL DATA
//D10---->MODÜL SYNC
//



#include <SPI.h>
#define cs 10
unsigned long frequency = 100;//İSTENEN FREKANSI BURAYA YAZIN





void setup() {

  pinMode(cs, OUTPUT);

  SPI.begin();
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE2));



}
void loop() {

  long frq = (frequency * pow(2, 28)) / 25000000;
  int frq1 =  (frq | 0x3FFF);

  frq1 |= 0x4000;


  digitalWrite(cs, LOW);
  delay(1);

  SPI.transfer16(0x2100);
  SPI.endTransaction();

  SPI.transfer16(frq1);
  SPI.endTransaction();

  SPI.transfer16(0x2028);//İSTENEN DALGAYI BURAYA YAZIN
  SPI.endTransaction();

  digitalWrite(cs, HIGH);

  delay(5500);

}
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,961
Mesajlar
118,861
Üyeler
2,826
Son üye
CortexPhoton

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top