PİC16F28A İLE 25 KHz İLE 35 KHz ARASI KARE DALGA ÜRETMEK

Başlatan hello_1881, 20 Ocak 2012, 17:30:22

hello_1881

ccs c kullanıyorum bunu en iyi şekilde nasıl yapabilirim
aklımdan geçenler şunlar:
1-timer2 kullanmak ama
poru açıp kapatırken zaman harcıyacak bunu nasıl hesaplayacağım
2-pwm kullnamak bunuda ben yapamadım :D

en son çare asm elinde örnek veya kod olarak bana yardımcı olabilecek biri varmı ?

Kabil ATICI

Asm ile istiyorsan yarın kodu ve isis dosyasını verebilirim. Sadece hangi bacaktan çıkış istediğini belirt. Kristalin ne olacak.?
ambar7

My75

16F628' in donanımsal pwm çıkışı var (pin9),bu ccp modülü ile program akışını etkilemeden arka planda kullanacağın osilatör değerine göre istediğin çıkışı alabilirsin..

Mesela 20Mhz kristal ile;
%50 Duty;

25000 hz için
PR2 = 0b00110001
T2CON = 0b00000101
CCPR1L = 0b00011000
CCP1CON = 0b00111100

34965 hz için
PR2 = 0b10001110
T2CON = 0b00000100
CCPR1L = 0b01000111
CCP1CON = 0b00011100

ayarlarını,aktif etmek istediğin bölüme eklemen yeterli..



Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

Kabil ATICI

Başka yolu ve yöntemleri olsada, burada uygulanan yöntemi anlatarak başka dillerde kullanma imkanı sağlayabilirim.

Timer 2i ile ilgili ayarların yapılması ile ilgili olarak Timer2'de taşma kesmesi yerine TMR2 (timer2 sayacı) ve PR2 arasındaki karşılaştırma sonucu bir uyumluluk olduğunda kesme üretilir.

Değer ayarların yapıldığını varsayarak,TMR2 sıfırlanır ve PR2 registerine sayılacak değer yüklenir.

Burada çıkışta kare dalga oluşturabilmek için çıkışı açıp kapayacak şekilde bir sayıcı oluşturmak gerekiyor.

Bunun için çıkışta yayınlanacak frekansın iki katı frekansı üretecek şekilde PR2'i ayarlıyoruz. Çünkü üretilen timer2 önce çıkışın 1 darbesini sonra 0 darbesini oluşturacak. Yani 25KHZ kare dalga üretmek için biz 50KHZ kare dalga üreteceğiz. Şimdi LED yak söndür işlemini bildiğimizi varsayaraktan, timer2 kesmesi içine LED yak söndür işleminin çıkış için gerekli olan bölümünü yerleştirdiğimizde sonuçta Timer2 ile üretilen sinyal çıkışta timer2 ile üretilen sinyalin yarı frekansında kare dalga üretilir. Biz bunu göremeyeceğimize göre bir osilaskop ile izlemek gerekiyor. İstediğin bacaktan çıkış al.

Bunu assembler ve isis'de 16F628 ile gerçekleştirilmiş dosyası aşağıdaki bağlantıdan ulaşılabilir.
https://rapidshare.com/files/4095299618/uretec.rar
ambar7

hello_1881

ambar7,My75  sağolun verdiğiniz bilgiler çok yararlı oldu.
My75 Hocam verdiğin komutların açıklamasını yaparsan çok güzel olur.

My75

PR2 = 0b10001110               'Timer2 periyot registeri
T2CON = 0b00000100          'Timer2 kontrol registeri
CCPR1L = 0b01000111        'Duty,CCP1CON 4,5 bitleri ile
CCP1CON = 0b00011100     'CCP mode seçim registeri

Aslında hazır hesaplayıcı kullanmaktan unutmuşum,hiç sağlıklı değil ama linkini vereyim,C ile ilgili örnekde var..

http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...