This post is also available in: English

forum-banner


Forum Navigation
Konu ve mesaj oluşturabilmek için giriş yapmanız gerekmektedir. Web sayfası sorunları için destek@ercankoclar.com adresine e-posta atabilirsiniz.

AD9833 Sinyal Jenaratörünü nasıl programlıyabiliriz ?

12

Evet haklısın modülün kristaline göreymiş bende modül olmadığı için okumadan PIC kristali sandım .

 

 

0x2100—Control Register

0x69F1‬-Frequency Register 0 LSB

0x4000—Frequency Register 0 MSB

0xC000—Phase Register

0x2000—Exit Reset

düzeltilmiş hali bu olacak o zaman 25mhz modül kristaline göre

#define FSYNC PORTB.RB7 //FSYNC pini ( Bu pin chipe yeni bir data yükleneceği haberini verir.)

void main() {
CMCON|=0X07;
TRISB=0X00; // B PORTU KOMPLE CIKIŞ.
PORTB=0X00;
TRISC=0X00;
PORTC=0X00;
FSYNC=1;
SPI1_Init();
while(1)
{
FSYNC=0;

SPI1_Write(0x00); // MSB GÖNDER
SPI1_Write(0x21); // LSB GÖNDER freq0 lsb yaz
FSYNC=1;
FSYNC=0;

SPI1_Write(0xF1); // MSB GÖNDER
SPI1_Write(0x69); // LSB GÖNDER FREQ0 MSB YAZ
FSYNC=1;
FSYNC=0;

SPI1_Write(0x00); // msb gönder.
SPI1_Write(0x40); // lsb gönder. phase 0 yaz
FSYNC=1;
FSYNC=0;

SPI1_Write(0x00); // msb gönder kontrol reg
SPI1_Write(0xC0); // lsb gönder kontrol reg
FSYNC=1;
FSYNC=0;

SPI1_Write(0x00); // msb gönder kontrol reg
SPI1_Write(0x20); // lsb gönder kontrol reg
FSYNC=1;
while(1){};

}
}

 

Hocam acıklamaları ciddiye alma hızlı hızlı işlem yaptım fakat buda olmadı msb ve lsb leri bilel ters gönderdiğim halde banamısın demiyor. Osilaskop bozuk diye düşündüm başta parmağıma değdirdiğimde sinyal alıyor osilaskopta da bir şey yok lojik analyzörde de data gidiyor görünüyor.

 

Güç Kaynağına bağladım modülü 04.99 Volt ile besledim 10mA cekiyor.

Ama çıkışta hiç birşey yok.  Aklıma son olarak. SPI Haberleşmede bazı kurallara var modlardan bahsediliyor biz direk tanımlı SPI1 kullandık acaba ondan dolayı mı haberleşemiyoruz cihaz ile hocam I2C gibi değil ki ACK veya NACK alınca anlayayım. Nasıl yapabiliriz Hocam ?

SPI konusunda bir bilgim yok ancak bu örnek uygulama notlarında vardı. Modül elimde olmadığı için bir şey diyemiyorum. Gerçek uygulamalarda çok ufak gözden kaçan bir şey de olabilir kodlar doğru bile olsa, bunu tek tek irdelemek gerekiyor.

Osiloskop ve sinyal jeneratörünün bozuk olacağını sanmıyorum ters voltaj gibi bi durum yoksa . SPI nin farklı türleri varsa onları da dene belki bir sonuç çıkabilir yada SPI veri göndermenin bir sistemi var mı bunlara da bakmak lazım.

Ayrıca FSYNC işlemini mesela frekans registeri için LSB ve MSB den sonra yapmak gerekmez mi bunları denedinmi yani tüm register gönderildikten sonra FSYNC değiştirmek belki daha mantıklı olabilir.

Yani adım adım deneyerek hataları tespit etmelisin şu durumda

Hocam FSYNC pinini Datasheetten baktığım kadarıyla her 16 bit gönderildikten sonra  bir kapatıp acmak gerekiyor. galiba daha doğrusu Diagram da öyle gözüküyor ama dediğiniz gibi de deniyeyim hemen sonucu aktarırım 5 dakikaya

Hocam yine değişen Bir şey olmadı Yarın Arduino alıp arduinoda deniyeceğim ve logic analyzorde gözlemleyeceğim ve gerçekten modül calışıyor mu bundan emin olmak istiyorum. Eğer Arduinoda calışır ise yapacağım ilk iş logic analyzor de nasıl gönderdiğine bakmak daha sonra SPI iletişim mod larından şüpheleniyorum ama okadar fazla parametresi varki hepsini tek tek denemek karavanaya atmak gibi. Umud edeyim de ardunioda calışsın.

Şimdi data sheetteki algoritmayı inceleyince bunun 4-5 satır ile olmayacağını gördüm. Ardunio almak ile bu işi çözmek bana kalırsa zor şöyle demiş önce datawrite yapacaksın figure 28 e bak demiş orada ayrı bir algoritma var

3 seçenek var sana uygun 1 tanesini tamamlayıp ana algoritmaya geri geleceksin. Mesela arada WAIT 7/8 MCLK CYCLES yani yapay clock gönder sonra devam et demiş yani o algoritmadan gitmek gerekiyor bu şekilde 3-5 satırla bu iş olacak bir şey değilmiş yani . Biraz sistemli bir çalışma gerekli

Arduino Uno ile denemeler yaptım ilk önce modül calışmadı calışmayınca bende dedim demek ki modül arızalıymış daha sonra güç kaynağını kapatıp tekrardan calıştırınca modül calıştı. neden böyle bir şey oldu anlamadım normalde kısa devre olsa veya aşırı akım uyarı verir ve ekranda görürüm.

 

Arduinoda tüm dalga çeşitlerini gördüm. modül cıkartıyor. şimdi dediğiniz gibi datasheete biraz daha fazla kurcalamak gerekiyor. anladığım kadarıyla birde SPI nin MODLARINI araştırdım.

1-kaynak : https://www.corelis.com/education/tutorials/spi-tutorial/

2-kaynak : https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi/all

3-kaynak : https://www.allaboutcircuits.com/technical-articles/spi-serial-peripheral-interface/

 

Ve en önemlisi de bu galiba biraz daha ayrıntı var ve hiç olmazsa kullandığımız dile göre

https://www.mikroe.com/blog/spi-bus

Merhabalar

Sen şimdilik hazır SPI kütüphanesini kullanabilirsin.

Daha önce dediğim gibi bu modül basit bir şey değil karşında haberleşme protokolüne sahip bir işlemci var . Oradaki algoritmaya uygun kod yazmadıkça çalıştırman mümkün değil.

Bu tarz diğerlerine göre daha zor çalışmalarda tavsiyem kağıt kalem ile çalış yani önce o algoritmayı çıktı al üzerine notlarını al kafanda bölüştür hangi aşama için nasıl bir fonksiyon yazacağım diye önce fonksiyonları yaz tek tek , ondan sonra algoritmaya uygun olarak çağır ve parametrelerini ver bu şekilde sonuca ulaşırsın ancak dediğim gibi acele etme çünkü çok kolay bir çalışma değil.

İyi Çalışmalar

12

Hiçbir şahsi sosyal medya hesabım yoktur
Yanlızca tanıtım amaçlı sosyal hesaplar kullanılmaktadır
İletişim için sadece soru-cevap forumunu kullanınız