Siren sesi üreten devre

hande!ux

Üye
Katılım
5 Ocak 2019
Mesajlar
59
Okulda arkadaşlarla proje yapacağız ve PIC işlemci kullanan ve siren sesi ureten devreyi seçtik.Ardino gibi hazır devre kullanamayacağız ya breadbordda devreyi kuracaz yada pcb yapacaz. Araştırmaya başladık ama proje konusunda nelere dikkat etmemiz gerekir nereden başlamamızı önerirsiniz?

Projenin kabul edilmesi için hoca özellikle su şartı ıstiyor: "örneğin iki frekans arasında gidip gelecek ton üretsin, ton geçişlerinde ve tonun ortasında bozulma olmasın, osiloskop ile bakınca temiz bir sinus frekansı görelim". Bu doğrultuda bize tavsiyede bulunabilirseniz sevinirim.
 
Sinyali üretecek donanımı siz mi yapacaksınız yoksa kontrol etsenizde olur mu ?

Programlabilir Sinyal Jenaratörü entegresi ? AD9833 . SPI iletişim protokolü ile haberleşiyorsunuz. 12.5MHz seviyelerine kadar sinüs kare ücgen gibi dalgaları üretebiliyor.

XR2206 diye bir entegre var yine sinyal üreten bir entegre bir potans ile frekans ayarlanabiliyor ( tabi ek pasif elemanlarda var ) mesela digital pot ile frekansı kontrol edebilirsiniz.

DAC entegresi var. paralel iletişim ile Dijital veriyi Analog veriye ceviriyor. böyle bir entegre ilede sinüs oluşturabilirsiniz. ve mikro denetleyicinin hızına ve entegrenin hızına göre frekansıda ayarlayabilirsiniz. yalnız bu entegreyle oluşturduğunuz sinüs şebeke sinüsüne pek benzemeye bilir ama sinüse benzer :D
 
hazır çözüm kullanamayacağız benim anladığım sadece pic ile yapılacak. ıçinde dac olan bir pic bulacağız ve yazılımla halledeceğiz gibi görüyorum.şu anda bunu araştırıyoruz.
 
Öncelikle sinüs dalgasının dijital örneklerini elde edip bir tablo olarak PIC'de saklanması lazım. Sinüs dijital örneği elde etmede de öncelikle örnekleme hızını belirlemek lazım.

Ses kalitesinin çok da düşük olmamasını istiyoruz, ama işlemciyi de fazla zorlamak istemiyoruz. Diyelim 8 kHz örnekleme hızı seçtik, o zaman her 125 ns de DAC'a sinüs dalgasından yeni bir örnek yazman lazım. Buradaki zamanlama önemli. 125 ns de çok fazla değişkenlik olursa, bu seste bozulmaya sebep olur. Bir kesme ile 125 ns de bir veri yazabilirsiniz, ama kullanacağınız PIC saniyede 8000 kesme destekler mi ona bakmak lazım. Hızlıca bir PIC herhalde destekler, çünkü başka da yapacak işi olmayacak.
 
PIC olarak ülkemizde kolay bulunan 16F877a kullanmayı düşünüyoruz şimdilik. DİP paket olduğu için breadbord üzerinde devreyi kurabileceğiz. Breadboard ile sorun yaşar mıyız? pcb yapmamız gerekir mi?

8000 kesme için bir sorun çıkar mı bilmiyorum, bunu araştıracağım. Bu değeri nasıl hesapladık açıklayabilirseniz sevinirim.
 
8khz lik kesme demek 1/8000 saniye de bir kesmeye gidecek demektir. Iste burdan da 125 mikro saniyede bir kesmeye gidecek pic burada islemciyi yuksek hizda kullanmak lazim 877 de 20 mhz kristali destekliyor bunun 1/4 unu kullandigi icin 5 mhz de calismis oluyor. Daha sonrasinda ise 125 mikro saniye icin timer on yukleyici degerini hesaplamak lazim suan formul aklimda degil tam olarak. Internetten kolayca bulabilirsiniz ama. Bence ilk 8 khz lik kesmeyi halledin.
 
Son düzenleme:
125 nanosaniye oluyor Furkan, baya yüksek. İşlemci bir kesmeden çıkıp diğerine gidebilir ve arka planda iş yapamaz duruma gelebilir. Ama dediğin gibi bu kesmeyi yapılandırıp denemek lazım.

Şöyle bir deneme olabilir: Kesme rutininde GPIO lardan birinde bir pals ürettir. Yani kesme rutinine girerken GPIO'yu high yap, kesme rutininden çıkarken de low yap. Sonra da osiloskop ile bak. Düzenli bir pals görünüyorsa sorun yok demektir. Ama değişken bir pals frekansı varsa PIC bunu kaldıramıyor demektir.

Örnekleme hızını, üretilecek tonun frekansına göre seçmen gerekiyor. Haberleşme dersinde Nyquist teoremini göreceksiniz, buna göre belli bir tonu kayıpsız üretebilmek için o tonun frekansının iki katı hızda örneklemek gerekiyor. Eğer sireninizi 200 Hz ve 400 Hz arasında gidip gelecek şekilde yaparsanız, o zaman 800 Hz örnekleme hızı da yeterli olur. Ama biraz abzürt bir siren olur :D
 
Abi nanosaniye olarak duzelttim ama 1/8000 nasil 125 nanosaniye ? ben mi bir hata yaptim 125 mikro saniye olmasi gerekmiyor mu ? Google bile 125 mikro saniye diyor

Doğru söylüyorsun. Son zamanlarda 8 MHz clock hızlarıyla çalıştığım için beynimde 125 ns yer etmiş :rolleyes:
 
Screnshot'ını aldığım bu görselde 20MHz osilator kullanan bir picin. 8KHz lik kesme rutini yapabilmesi için en iyi değerlerin ne olduğunu gösteriyor.

Bir 8 bitlik timer için , Birde 16 bitlik timer için Best Match hesapladı. bu değerleri uygun registerlara yazarsınız. programın dediğine göre %100 hatasız calışacak. Ancak ben Reload kısmını 1 cycle olarak seçtim zaten en düşüğü de o.

Bu Reload ; Kesme oluştuktan sonra , tekrardan kesmeye girebilmesi için kesme bayrağının sıfırlanması ve tekrardan ön yükleyici değerlerinin registere yazılması için harcanan zaman aslında. eğer C ile yazıyorsanız. bu kısmı ASM tag acıp ASM icinde yazarsanız. cok daha az cycle da bitirebilir bu işi diye düşünüyorum. çünkü Bazı C gömülü kodlarını incelediğimde Bazı hız gerektirilen işler ASM tagleri altında yazılıyor. Genellikle bazı mikrodenetleyicileri sınırlarına kadar zorlamak için yapıyorlar bu işi.
 

Ekler

  • Screenshot_1.png
    Screenshot_1.png
    290.5 KB · Görüntüleme: 321
Mesela yine burada Mikro Elektronika firmasının Picler için cıkardığı bir timer calculator programı var. yine burada aynı hesaplamayı yaptırdığımda ise. bu programda %100 hatasız diyor.

Ayrıca MikroC için Kod veriyor lakin MPLAB X IDE gibi bir IDE de yazıyorsanız. bu kod tanımsız olarak hata verecektir. register isimleri IDE den IDE ye farklılık göstersede cok büyük farklılık yok sadece yazım şeklinden dolaydır. bunları düzeltip yazarsınız. Kesme rutini Calışacaktır.
 

Ekler

  • Screenshot_2.png
    Screenshot_2.png
    140.1 KB · Görüntüleme: 311
Deneyler yapabilmek için hangi PIC geliştirme kartını önerirsin Furkan? Şimdi bakınca EXM1 ve ProPIC40 kartlarını görüyorum, ikisi de Türkiye'de bulunabilen kartlar.
 
Eğer Sadece bu proje odaklı olacak ise. ProPIC40 kartını öneririm. Lakin ProPIC40 için de bir programlayıcı lazım. 80 tl gibi bir fiyata 12F - 16F - 18F Serisi picleri programlayan programlayıcı alınır. totolde 200 tl gibi bir fiyat oluyor burası.

Fakat Arkadaş derse ki. bizim daha PIC le cok işimiz var hem ben seviyorum kendimi geliştirmek istiyorum sadece proje için değil. ozaman kesinlikle EXM1 derim. çünkü üstünde kendi programlayıcı ve bir cok daha donanımı kurulu halde geliyor. basit coğu projeyi kartın üzerinde ki donanımlar ile birlikte gerçekleştirilebilir.

ProPIC40 kartı sadece 40 pinli (tüm 40 pinli picler için olmayabilir 18F serisinde portların işlevselliği yönünde farklılık gösterebilir bknz: HID iletişim ) picler için geçerli iken EXM1 diğer bir cok pici de desteklemekte. EXM1 kartına benzer bir kart kullandım. ve çok çok yararını gördüm. heleki coğu şeyde bread board dan karmaşık jumper kablolardan sizi kurtarıyor. ayrıca böyle geliştirme kartlarında referans manueli var hangi uç nerede biliyorsunuz.

Not : 40 pini oraya yazınca işler biraz karışacak son olarak şunuda söyleyeyim :D 18F serisinde 3.3v Besleme ile calışan PİC lerde mevcut . neyse konuyu daha fazla karışık akılları bulandırmıyayım.
 
Son düzenleme:
Bir öğrenci için de son derece yararlı olur hakkaten. Ama ben kendim için bir tane alayım diye düşündüm :) Vakit buldukça örnek projeler de yaparız üzerinde. Bir de birisi bir problemden bahsedince kendim de deneyip görme imkanım olur.
 
Screnshot'ını aldığım bu görselde 20MHz osilator kullanan bir picin. 8KHz lik kesme rutini yapabilmesi için en iyi değerlerin ne olduğunu gösteriyor.

Bir 8 bitlik timer için , Birde 16 bitlik timer için Best Match hesapladı. bu değerleri uygun registerlara yazarsınız. programın dediğine göre %100 hatasız calışacak. Ancak ben Reload kısmını 1 cycle olarak seçtim zaten en düşüğü de o.

Bu Reload ; Kesme oluştuktan sonra , tekrardan kesmeye girebilmesi için kesme bayrağının sıfırlanması ve tekrardan ön yükleyici değerlerinin registere yazılması için harcanan zaman aslında. eğer C ile yazıyorsanız. bu kısmı ASM tag acıp ASM icinde yazarsanız. cok daha az cycle da bitirebilir bu işi diye düşünüyorum. çünkü Bazı C gömülü kodlarını incelediğimde Bazı hız gerektirilen işler ASM tagleri altında yazılıyor. Genellikle bazı mikrodenetleyicileri sınırlarına kadar zorlamak için yapıyorlar bu işi.

Bu çok faydalı oldu teşekkür ederim! MPlab kullanıyoruz ve sadece en temel özelliklerini.Boyle yardımcı programlar olduğunu bilmiyordum.
 
Matlapte sinüs dalgasının bir döngüsünün örneklerini 8 khz fs için ürettik. Bir ambulans sirenine en yakın olarak 900 hz ve 600 hz frekanslar kullanacağız ve yarım saniye birisi yarım saniye diğerini üreteceğiz.
 
@hande!ux Aslında MPLAB ın toolu değil. bu screenshot attıklarım zamanında kafayı sıyırmak üzere olduğum günlerde. araya araya bulduğum yardımcı programlar :)) Bir yere kadar hendeği atlatıyor sana gerisini getirmeye calışıyorsun. aslında bir şeyi daha hızlı şekilde yapıp denemek bitirebilmek adına böyle toolar lazım.

MPLAB X IDE nin aslında MCC ( MPLAB CODE CONFİGURATOR ) eklentisi TOOL'u var lakin coğu pici desteklemiyor. daha gelişmiş yüksek picleri destekliyor. picin donanımlarının nasıl kullanacağınıza göre secip ayarları yaptıktan sonra otomatik Modülleri üretip (Modülden kastım .c ve .h uzantılı dosyaları üretiyor. yani kütüphaneleri ) ana programınıza ekliyor.

877A cok popüler olduğu için bir zamanlar. bugün hakkında bir sürü uygulama ve türkçe datasheet bulmak bile mümkün.

Böyle programlar cok var. daha çok yabancı siteler de var. eskiden yazıldığı için. bugün ki işletim sistemlerinde DLL hataları verebiliyor. uygun DLL leri bulup eklerseniz. programlar calışıyor.
 
Son düzenleme:
Bir öğrenci için de son derece yararlı olur hakkaten. Ama ben kendim için bir tane alayım diye düşündüm :) Vakit buldukça örnek projeler de yaparız üzerinde. Bir de birisi bir problemden bahsedince kendim de deneyip görme imkanım olur.

Evet abi bende almak istiyorum bir tane. EXPKITS'in sahibi izmit te. üretim yeri de izmit te galiba. Bir gün gidip kendisiyle hem tanışıp hemde geliştirme kartlarından bir tane alıp el altında bulunsun istiyorum. Ayrıca Tamamen register seviyesinde programlama yaparak ülke adına güzel bir iş yapmış oluruz. güzel bir türkçe kaynak oluşmuş olur.
 
Evet abi bende almak istiyorum bir tane. EXPKITS'in sahibi izmit te. üretim yeri de izmit te galiba. Bir gün gidip kendisiyle hem tanışıp hemde geliştirme kartlarından bir tane alıp el altında bulunsun istiyorum.

Yerli üretim olduğunu bilmiyordum :)

Ayrıca Tamamen register seviyesinde programlama yaparak ülke adına güzel bir iş yapmış oluruz. güzel bir türkçe kaynak oluşmuş olur.

Aslında çok önemli bir konuya değindin. Benim de hep forumlarda dikkatimi çeken birşeydir. Adam mesela bir tane LCD bulmuş, bunu MCU'dan kontrol etmek istiyor, hemen bir kütüphane arıyor. Veya bir sensör kullanacak, onun kütüphanesini arıyor. Veya başka standart bir iş yapacak, hemen kütüphane.

Datasheet'ten bakarak ve hiçbir kütüphaneye bağımlı olmadan direkt C kodu olarak program yazmayı öğrenmek lazım. Bunu öğrendikten sonra ancak vakit kazanmak için kütüphane kullanılabilir.

Ama benim yaygın olarak gördüğüm, kimse işi senin dediğin gibi register seviyesinde öğrenmiyor. Herkes ya kütüphane arıyor, yada bazı IDE'lerde bir tek satır C kodu yazmadan "sürükle bırak" program hazırlıyorsun. GPIO'lar GUI'de ayarlıyorsun falan. Bu çok yanlış. O firmanın ürününü bırakıp başka bir firmaya geçiş yapınca orada öğrendiğin bilgiler tamamen çöp oluyor.
 
@hande!ux Aslında MPLAB ın toolu değil. bu screenshot attıklarım zamanında kafayı sıyırmak üzere olduğum günlerde. araya araya bulduğum yardımcı programlar :)) Bir yere kadar hendeği atlatıyor sana gerisini getirmeye calışıyorsun. aslında bir şeyi daha hızlı şekilde yapıp denemek bitirebilmek adına böyle toolar lazım.

MPLAB X IDE nin aslında MCC ( MPLAB CODE CONFİGURATOR ) eklentisi TOOL'u var lakin coğu pici desteklemiyor. daha gelişmiş yüksek picleri destekliyor. picin donanımlarının nasıl kullanacağınıza göre secip ayarları yaptıktan sonra otomatik Modülleri üretip (Modülden kastım .c ve .h uzantılı dosyaları üretiyor. yani kütüphaneleri ) ana programınıza ekliyor.

877A cok popüler olduğu için bir zamanlar. bugün hakkında bir sürü uygulama ve türkçe datasheet bulmak bile mümkün.

Böyle programlar cok var. daha çok yabancı siteler de var. eskiden yazıldığı için. bugün ki işletim sistemlerinde DLL hataları verebiliyor. uygun DLL leri bulup eklerseniz. programlar calışıyor.

Programları bulamasam bile ekran görüntüsünü aldığınız örnekten hangi pıc bölümlerinin programlanması gerektiğini, timer bölümü ile ilgili dökümanlarda nerelere bakacağımızı görmüş olduk.Bir soru sormak istiyorum kesme yerine programın kendi içinde peş peşe örnekleri dac'a yazsak olmaz mı?
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,879
Mesajlar
100,183
Üyeler
2,488
Son üye
ilter

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top