Pic basic ile polis,ambulans,itfaiye siren sesi yazabilmek.

Başlatan erdogan2734, 01 Mart 2012, 17:22:36

erdogan2734

    Sevgili arkadaşlar pic basic dilinde siren sesi yazmam gerekiyor. Aykut arkadaşımızın yazmış olduğu sinüs dalgası ile olan
programı denedim üzerinde değişikler yaparak gerçek devredede çalıştırdım ancak iyi bir sonuç alamadım. Başta sevgili Ete hocam
olmak üzere bana bu konuda mantıklı yardımlarınızı sunarsanız çok sevinirim.
    Saygılar iyi çalışmalar.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

ete

Amacın siren sesi mi elde etmek yoksa siren sesi çıkaran programmı yazmak. Önce onu bilelim.
İlişikte bir program veriyorum. Bu program siren sesi çıkartıyor. Ancak ses komutları ile değil.
Tamamen HPWM komutları ile hem frekans hem duty değiştirerek bu sesi elde etmek mümkün.
Aynı sesin ses komutları ile üretilmesi deveye hendek atlatmak kadar zor bence.

Ete

erdogan2734

Alıntı yapılan: ete - 01 Mart 2012, 19:06:06
Amacın siren sesi mi elde etmek yoksa siren sesi çıkaran programmı yazmak. Önce onu bilelim.
İlişikte bir program veriyorum. Bu program siren sesi çıkartıyor. Ancak ses komutları ile değil.
Tamamen HPWM komutları ile hem frekans hem duty değiştirerek bu sesi elde etmek mümkün.
Aynı sesin ses komutları ile üretilmesi deveye hendek atlatmak kadar zor bence.

Ete

Ete hocam siren sesi yazmam gerek. Ekteki belgeyi inceledim. Sizin projeniz olduğunu bilmiyordum.
Yazılımı asmbel olduğu için o programda çok iyi değilim anlamadım. Melodilerle çok uğraştım ama elde edemedim.
Hpwm ile yapabilirim diye düşünüyorum zaten pic16f628a kullanıyoruz bu pic pwm için uygun sizin derslerinizden biliyorum.
Ne yapmam gerekli hocam? Engin tecrübelerinizden yararlanmak isterim. Ekteki siren sesi iyi ancak üzerinde oynama
yapmam frekans ayarı yapmam gerekli.
İyi çalışmalar.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

ete

Elbette benim projem. Programı vermedim çünki işine yarayıp yaramayacağını bilmiyordum.
Şimdi programı vereceğim ve can alıcı kısımlarını izah edeceğim. Bu nedenle bana programla ilgili soru sormayacağını umuyorum. Program zaten frekansla oynayarak yaklaşık 620 Hz den 1230 Hz ye kadar frekansı değiştirerek bu sesi elde etmektedir.
620 Hz için PR2 değeri 100 dür. 1230 Hz deki PR2 değeri ise 50 dir.  Bu deeğerlerin dışına çıkınca siren sesi bozuluyor.
İstersen deneyebilirsin. 500Hz için PR2 değeri 124 dür. 1500 Hz için ise 41 dir. Bu aralıkları denersen uç noktalarda sesi değer bağlı olarak çok tizleşmekte yada kalınlaşmaktadır.

Programda iki önemli kriter var. Birincisi frekans. PR2 değeri ile değişmektedir. Bu nedenle I için 50 den 100'e kadar döngü kurulmuş I değeri PR2 ye eşitlenmiştir.
Duty değerini ise PR2 ye bağlı olarak değiştirmek için X=(PR2+1)*I/25 eşitliği kullanılmıştır.
Zaten programın başkada  açıklanacak tarafı yok.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [ETE]                                  *
'*  Notice  : Copyright (c) 2007 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 3/2/2007                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F88             'işlemci 16F88
@ DEVICE pic16f88, WDT_on     'Watch Dog timer kapalı
@ DEVICE pic16f88, PWRT_ON    'Power on timer açık
@ DEVICE pic16f88, MCLR_OFF   'mclr off
@ DEVICE pic16f88, PROTECT_On 'Kod Protek kapalı
@ DEVICE pic16f88, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
DEFINE CCP1_REG   PORTb    'Hpwm 1 pin port
DEFINE CCP1_BIT     1      'Hpwm 1 pin bit
DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 3 ' ADC sampling time (uSec)

T2CON =%00000111
PR2=1
ADCON1.7=1
ADCON0=0
ANSEL=1
PORTA=0:TRISA=1
PORTB=0:TRISB=%00000000
OPTION_REG.7=0

SYMBOL LED=PORTB.2

M      VAR BYTE
I      VAR BYTE
X      VAR WORD
HAM    VAR WORD
ARA    VAR WORD
TOPLAM VAR WORD
SURE   VAR WORD
ILK    VAR BYTE
SON    VAR BYTE
ONAY   VAR BIT
Z      var BIT

CCP1CON.2=1
CCP1CON.3=1
ONAY=0

BASLA: 
      GOSUB SINYAL
      LED=1-led
      FOR M=0 to 9
         ADCIN 0,HAM
         TOPLAM=TOPLAM+HAM+1
      NEXT
      ARA=TOPLAM/10
      SURE=HAM*10
     
      GOTO BASLA
     
     
SINYAL:
       CCP1CON.2=1
       CCP1CON.3=1
       for I=50 to 100
        PR2=I
        pauseus sure
        X=(PR2+1)*I/25
        CCP1CON.4=X.0
        CCP1CON.5=X.1
        CCPR1L=x>>2
        PAUSEUS SURE
       NEXT
       
       FOR I=100 to 50 STEP -1
         PR2=I
         pauseus sure
         X=(PR2+1)*I/25
         CCP1CON.4=X.0
         CCP1CON.5=X.1
         CCPR1L=x>>2
         PAUSEUS SURE
       NEXT   
       
       return

Ete

erdogan2734

Alıntı yapılan: ete - 01 Mart 2012, 20:55:31
Elbette benim projem. Programı vermedim çünki işine yarayıp yaramayacağını bilmiyordum.
Şimdi programı vereceğim ve can alıcı kısımlarını izah edeceğim. Bu nedenle bana programla ilgili soru sormayacağını umuyorum. Program zaten frekansla oynayarak yaklaşık 620 Hz den 1230 Hz ye kadar frekansı değiştirerek bu sesi elde etmektedir.
620 Hz için PR2 değeri 100 dür. 1230 Hz deki PR2 değeri ise 50 dir.  Bu deeğerlerin dışına çıkınca siren sesi bozuluyor.
İstersen deneyebilirsin. 500Hz için PR2 değeri 124 dür. 1500 Hz için ise 41 dir. Bu aralıkları denersen uç noktalarda sesi değer bağlı olarak çok tizleşmekte yada kalınlaşmaktadır.

Programda iki önemli kriter var. Birincisi frekans. PR2 değeri ile değişmektedir. Bu nedenle I için 50 den 100'e kadar döngü kurulmuş I değeri PR2 ye eşitlenmiştir.
Duty değerini ise PR2 ye bağlı olarak değiştirmek için X=(PR2+1)*I/25 eşitliği kullanılmıştır.
Zaten programın başkada  açıklanacak tarafı yok.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [ETE]                                  *
'*  Notice  : Copyright (c) 2007 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 3/2/2007                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F88             'işlemci 16F88
@ DEVICE pic16f88, WDT_on     'Watch Dog timer kapalı
@ DEVICE pic16f88, PWRT_ON    'Power on timer açık
@ DEVICE pic16f88, MCLR_OFF   'mclr off
@ DEVICE pic16f88, PROTECT_On 'Kod Protek kapalı
@ DEVICE pic16f88, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
DEFINE CCP1_REG   PORTb    'Hpwm 1 pin port
DEFINE CCP1_BIT     1      'Hpwm 1 pin bit
DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 3 ' ADC sampling time (uSec)

T2CON =%00000111
PR2=1
ADCON1.7=1
ADCON0=0
ANSEL=1
PORTA=0:TRISA=1
PORTB=0:TRISB=%00000000
OPTION_REG.7=0

SYMBOL LED=PORTB.2

M      VAR BYTE
I      VAR BYTE
X      VAR WORD
HAM    VAR WORD
ARA    VAR WORD
TOPLAM VAR WORD
SURE   VAR WORD
ILK    VAR BYTE
SON    VAR BYTE
ONAY   VAR BIT
Z      var BIT

CCP1CON.2=1
CCP1CON.3=1
ONAY=0

BASLA: 
      GOSUB SINYAL
      LED=1-led
      FOR M=0 to 9
         ADCIN 0,HAM
         TOPLAM=TOPLAM+HAM+1
      NEXT
      ARA=TOPLAM/10
      SURE=HAM*10
     
      GOTO BASLA
     
     
SINYAL:
       CCP1CON.2=1
       CCP1CON.3=1
       for I=50 to 100
        PR2=I
        pauseus sure
        X=(PR2+1)*I/25
        CCP1CON.4=X.0
        CCP1CON.5=X.1
        CCPR1L=x>>2
        PAUSEUS SURE
       NEXT
       
       FOR I=100 to 50 STEP -1
         PR2=I
         pauseus sure
         X=(PR2+1)*I/25
         CCP1CON.4=X.0
         CCP1CON.5=X.1
         CCPR1L=x>>2
         PAUSEUS SURE
       NEXT   
       
       return

Ete

Ete hocam çok teşekkür ederim bu program işimi görecektir. Bugün ve yarın deneme yaparak işallah doğru sesi bulabilirim.
Daha sonra bulduğum sesleri ve sonuçları paylaşırım.
İyi geceler hocam iyiki varsınız.
'' Bana Basic yazılımı öğreten sizin derslerinizdir. Şu anda ekmek parası kazanıyorsam bunda sizinde payınız var. Sizin ve dersleriniz sayesinde çok program yazdım çok saolun...''
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

umitco


erdogan2734

Alıntı yapılan: umitco - 02 Mart 2012, 12:45:27
Belki bu dosyadaki seslerde işine yarayabilir

Sayın ete hocam ve umitco.
Devrenin ekte resimlerini gördüğünüz gibi pwm çıkışı dolu olduğu için ve bu karttan 5000 adet pasılı olduğu için.
pwmden vazgeçmiş durumdayız. Ancak Umitco bey in verdiği sesler işimi görecek gibi üzerinde oynama yapıyorum şu an.
En azından mantığını kavramak önemli bunun için çok teşekkür ederim.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

mavi21211

Ete hocam çok güzel olmuş ancak 16f628 buttonlarla bu sesleri çaldırabilsek...

haterbol

SİZLERE HAZIRLADIGIM PROGRAMI YOLLAYACAGIM ETE HOCAMA ÇOK TEŞEKÜR EDERİM....PAYLAŞIMLARINDAN DOLAYI...BUNLAR HEP ONUN SAYESİNDE....

Powered by EzPortal