2-3 mHZ arasında kare dalga

Başlatan . Kağan, 16 Kasım 2021, 09:53:51

. Kağan


. Kağan

#31
Alıntı yapılan: ete - 06 Aralık 2021, 15:58:1232 mHZ (PLL ile) OSC frekansında CCP1 (9 nolu pin) pininden 1,6Mhz sinyal çıkartan kod örneği aşağıdadır. Sİmulasyonda denedim çalışıyor.

Ete

#CONFIG
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
#ENDCONFIG
 
DEFINE OSC 32
OSCCON      =%11110000      '8MHz internal osilatör frekansı seçildi  PLL ile birlikte 4x8=32 Mhz OSC frekansı
OSCSTAT     =%11111101      'Timer1 Osilatör kullanıma hazır,4xPLL hazır
OSCTUNE     =0              'Osilatör modülü fabrika ayarlarında çalışacak
OPTION_REG.7=%00000111      'Pull-up enabled,Yükselen kenat kesmesi kapalı,Tmr0 clock kaynağı içsel Fosc/4,Prescaler(Bölücüler) açık Tmr0 için,Bölme oranı 16Mhz için 1/256 
'WPUA.5      =1              'MCLR için bit5 Pull-up enabled.Eğer MCLR ON yapılmışsa herzaman enabled.
WPUB        =%00000000      'PortB.7-6-5 nolu pinlerin Pull-upları aktif edildi.
  
ADCON0.0    =0              'ADC ölçümleri iptal edildi.
ANSELA      =0              'PortA nın <4:0> arası analog-dijital olabilen pinlerini dijital yaptık.Pinler Dijital I/0 oldu.
TRISA       =0
ANSELB      =0              'PortB nin <7:1> arası analog-dijital olabilen pinlerini dijital yaptık.Pinler Dijital I/0 oldu.
TRISB       =0
CCP1CON     =0             'Capture/Compare/PWM off
CCP2CON     =0             'Capture/Compare/PWM off

CM1CON0.7   =0              'Comparatör disable-kapalı.
CM2CON0.7   =0
FVRCON      =0              'Referans sabit voltaj çıkışları (COMPARATOR,DAC ve ADC) kapalı-disable.
DACCON0.7   =0              'DAC referans voltaj çıkışı kapalı.
CPSCON0.7   =0              'Capasitive sensing modulu disable yapıldı.
MDCON.7     =0              'Modülasyon modülü iptal edildi.DSM (Dijital Sinyal Modülü) iptal. Modüleli yani karışık sinyal çıkış kapalı.
MDSRC.7     =1              'Çevresel sinyallerin sürücü çıkış pinleri iptal.Modüleli sinyal çıkışı pinleri kapalı.
CLKRCON.7   =0              'Referasn clock modülü kapalı.

PIE1        =0              'TÜM ÇEVRESEL KESMELER KAPALI.
PIE2        =0              'Tüm Çeveresel Kesmeler Kapalı.
PIE3        =0
PIE4        =0              'Tüm çevresel kesmeler kapalı.

'PWM Period =[(PRx)+1] • 4 *Tosc • (TMRx Prescale Value)    Tosc=1/Fosc
APFCON0=%00000000
APFCON1=%00000000
PR2 = 4 ' 32Mhz osc frekansında 1500Khz (1,5Mhz sinyal üretir.)Max Duty=21 olacak %50 için 10 kullan
T2CON = %00000100 ' TMR2 on, prescaler  , %xxxxxx00=1/1  , %xxxxxx01=1/4 , %xxxxxx10=1/16 
CCPR1L = 0 

CCP1CON=%00001100  'CCP1 yani 1 nolu HPWM çıkışı aktif edildi

DUTY VAR BYTE
X    VAR BYTE
pause 300

Basla:
      DUTY=10
      GOSUB pwm_ver
      WHILE 1:WEND
      



PWM_VER:
        X=DUTY
        CCP1CON.4=X.0
        CCP1CON.5=X.1
        CCPR1L=x>>2     
        RETURN



 

Ete hocam günler sonra tekrar merhaba. En sonunda bilgisayarımı baştan kurup derleme işini hallettim ve daha önce derlenemeyen kodları derlemeyi başardım. Hala aynı konu üzerinde çalışmaya devam ediyorum. Aşağıdaki kodda CCP1 ve CCP2  çıkış veriyor. Fakat ikisi de aynı anda HIGH ve LOW oluyor. Ben ise Biri HIGH olduğunda, diğerinin LOW olmasını istiyorum. Neyi düzeltmeliyim?
Birde ben bir analog girişten 0-5V değişken gerilim vererek frekansın DUTY değerini değiştirmek istiyorum. Fakat ayarlarda Analog girişleri kapattık. Bunları açarsak işlemciyi meşgul etmiş olurmuyuz ve  frekans düşermi? Nasıl yapmalıyım.
CCP1CON=%00001100  'CCP1 yani 1 nolu HPWM çıkışı aktif edildi
CCP2CON=%00001100  'CCP1 yani 2 nolu HPWM çıkışı aktif edildi

DUTY VAR BYTE
X    VAR BYTE
pause 300

Basla:
      DUTY=10
      GOSUB pwm_ver
      WHILE 1:WEND
      



PWM_VER:
        X=DUTY
        CCP1CON.4=X.0
        CCP2CON.4=X.0
        CCP1CON.5=X.1
        CCP2CON.5=X.1
        CCPR1L=x>>2 
        CCPR2L=x>>2    
        RETURN



ete

Donanımsal PWM sinyali iki side aynı fazda çıkar. Birini ters fazda almak istersen bir tane not kapısından geçirmen gerekir. Not kapısı gelen sinyali ters çevirir. BAsitçe tek transistörle yapabilirsin. Gelen sinyali bir NPN transistöre (Beys ucuna) gir. Emitteri GND ye bağla Collector ucuna 4K7 direnç ile Pullup uygula ve Collectordan çıkış al. Böylece gelen sinyalin tersini o çıkışa görebilirsin.

Donanımsal PWM sinyali geri planda işletilir. Tek bir komutu verdiğin zaman işlemciyi meşgul etmeden sinyali çıkartır. Dolayısıyla ADC işleri ile uğraşırsan işlemci meşgul edilmiş olmaz. Rahatlıkla yapabilirsin.

Ete

. Kağan

Bu kadar yüksek hızlarda hangi transistoru önerirsiniz?

ete

Bildiğim bir transistör yok ben olsam elimdekileri denerdim hemen.

Ete

. Kağan

#35
Hocam pic 16f1827 alıp bord üzerinde kurdum. Fakat maalesef simülasyonda çalışmasına rağmen bord üzerinde çıkış yok!  :(

Harici HC-49S 8Mhz dip kristal ve iki tane 15pF kondansatör kullanarak pici çalıştırmak dahili osilatörden farklı olurmu acaba? Hatta 32.768Khz 12.5pF 20ppm SMD Osilatör Kristal - RT3215-32.768-12.5-TR kristal i OSC1 ve OSC2 bacakları arasına kondansatörsüz bağlayıp PLL kullanmadan HPWM çıkışı almak mümkünmü?

ete

Patates baskı pic almamış isen dahili harici osc farketmemesi gerekir. Hatta dahili olanı fabrikasyon kalibre edilmiş olduğundan kendi frekansına daha yakın çalışır. Elbette harici osc olarak TXO tipi bir osilatör kullanırsan o zaman işler değişir zira TXO lar diğer hepsinden daha stabil ve kesin belirtilen frekanslarda çalıştığı gibi sıcaklıktan etkilenmeden çalışırlar.
HPWM pic in her frekansında elde edilir. Ancak istediğin nispeten yüksek bir frekans ve bu frekans doğru çözünürlükte ancak yüksek OSC frekansları ile elde edilebilir.2 Mhzlik PWM sinyali için PLL olmadan neredeyse minimum 10Mhzlik OSC frekansı gerekiyor daha düşük frekanslarda bunu elde edemezsin.

Program çalışmıyor ise bir sebebi vardır. Ne olduğuna bakmak için devreni ve programını görmek gerekir.

Ete

. Kağan

Hocam pici dir*nc.net den aldım.  Sizin verdiğiniz kodu aynen derledim. Aynı ayarlarla blink çalışıyor. Kod aşağıda. Birde video çektim.



asm 
#CONFIG
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
#ENDCONFIG
endasm

 
DEFINE OSC 32
OSCCON      =%11110000      '8MHz internal osilatör frekansı seçildi  PLL ile birlikte 4x8=32 Mhz OSC frekansı
OSCSTAT     =%11111101      'Timer1 Osilatör kullanıma hazır,4xPLL hazır
OSCTUNE     =0              'Osilatör modülü fabrika ayarlarında çalışacak
OPTION_REG.7=%00000111      'Pull-up enabled,Yükselen kenat kesmesi kapalı,Tmr0 clock kaynağı içsel Fosc/4,Prescaler(Bölücüler) açık Tmr0 için,Bölme oranı 16Mhz için 1/256 
'WPUA.5      =1              'MCLR için bit5 Pull-up enabled.Eğer MCLR ON yapılmışsa herzaman enabled.
WPUB        =%00000000      'PortB.7-6-5 nolu pinlerin Pull-upları aktif edildi.
  
ADCON0.0    =0              'ADC ölçümleri iptal edildi.
ANSELA      =0              'PortA nın <4:0> arası analog-dijital olabilen pinlerini dijital yaptık.Pinler Dijital I/0 oldu.
TRISA       =0
ANSELB      =0              'PortB nin <7:1> arası analog-dijital olabilen pinlerini dijital yaptık.Pinler Dijital I/0 oldu.
TRISB       =0
CCP1CON     =0             'Capture/Compare/PWM off
CCP2CON     =0             'Capture/Compare/PWM off

CM1CON0.7   =0              'Comparatör disable-kapalı.
CM2CON0.7   =0
FVRCON      =0              'Referans sabit voltaj çıkışları (COMPARATOR,DAC ve ADC) kapalı-disable.
DACCON0.7   =0              'DAC referans voltaj çıkışı kapalı.
CPSCON0.7   =0              'Capasitive sensing modulu disable yapıldı.
MDCON.7     =0              'Modülasyon modülü iptal edildi.DSM (Dijital Sinyal Modülü) iptal. Modüleli yani karışık sinyal çıkış kapalı.
MDSRC.7     =1              'Çevresel sinyallerin sürücü çıkış pinleri iptal.Modüleli sinyal çıkışı pinleri kapalı.
CLKRCON.7   =0              'Referasn clock modülü kapalı.

PIE1        =0              'TÜM ÇEVRESEL KESMELER KAPALI.
PIE2        =0              'Tüm Çeveresel Kesmeler Kapalı.
PIE3        =0
PIE4        =0              'Tüm çevresel kesmeler kapalı.

'PWM Period =[(PRx)+1] • 4 *Tosc • (TMRx Prescale Value)    Tosc=1/Fosc
APFCON0=%00000000
APFCON1=%00000000
PR2 = 4 ' 32Mhz osc frekansında 1500Khz (1,5Mhz sinyal üretir.)Max Duty=21 olacak %50 için 10 kullan
T2CON = %00000100 ' TMR2 on, prescaler  , %xxxxxx00=1/1  , %xxxxxx01=1/4 , %xxxxxx10=1/16 
CCPR1L = 0 

CCP1CON=%00001100  'CCP1 yani 1 nolu HPWM çıkışı aktif edildi

DUTY VAR BYTE
X    VAR BYTE
pause 300

Basla:
      DUTY=10
      GOSUB pwm_ver
      WHILE 1:WEND
      



PWM_VER:
        X=DUTY
        CCP1CON.4=X.0
        CCP1CON.5=X.1
        CCPR1L=x>>2     
        RETURN



ete

#38
asm 
#CONFIG
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
#ENDCONFIG
endasm
böyle olmaz aşağıdaki şekilde dene.

asm 
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
endasm




ete

mehmet

Ölçümü; prop 10x kademesiyle deneyiniz.
Yüksek frekanslarda sinyal çökebilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr

. Kağan

#40
Alıntı yapılan: mehmet - 29 Aralık 2021, 16:13:39Ölçümü; prop 10x kademesiyle deneyiniz.
Yüksek frekanslarda sinyal çökebilir.

Denedim yine de düz çizgi.

Alıntı yapılan: ete - 29 Aralık 2021, 14:58:34
asm 
#CONFIG
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
#ENDCONFIG
endasm
böyle olmaz aşağıdaki şekilde dene.

asm 
 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
 __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
endasm


ete
bunu zaten yapmıştım ama hala çıkış yok.

Yabancı forumları da çok araştırdım. Onlardan bazıları kapatılmayan bazı ekstra özelliklerin bu işlemcide sorunlara yol açabileceği yönünde.

Birde linkteki çalışmayı buldum fakat işlemci ülkemizde yok ve ayrıyeten pickit3 'ün işlemci listesinde 16f1619 yok!  Bu linkteki çalışmadaki kodlar bulunabilen ve 1827 kadar karmaşık olmayan bir işlemciye uyarlanabilir mi?

https://www.electronicdesign.com/resources/ideas-for-design/article/21157271/microcontroller-delivers-highprecision-frequencies
 :(

ete

İlişikteki programı bende derleyip denedim. Deney boardında .
İlk çalıştırmada çalıştı: Bu programda PWM çıkışı PORTB.0 yani 6 nolu pinden olmaktadır. İstenirse (APFCON regsiteri 0 nolu bit sıfır yapılarak) PORTB.3 yani 9 nolu pinden de çıkış alınabilir.

İşlemci deney boardına yerleştirilip besleme bağlantılarını yaptıktan sonra skop'u 6 nolu pine bağlaman ve devreyee başka hiç bir şey bağlamaman gerekir. İşlemciye besleme olarak 5V verdim.
Belki sendeki sorun derleme sorunudur diye dosya içine hex 'i de koydum direk alıp deneyebilirsin.

Ete

elektro77

#42
Takipteydim ama pek anlamadım. Sonuç olarak kaç Mhz kristal kullanıp pll i kaça katladınız.
farklı bir konu olarak bazı sayfalar ekran dışına çıkıyor ve alttaki kaydırma çubuğunu kullanmak zorunda kalıyorum
sebebi nedir acaba

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

. Kağan

#43

Yok böyle bir hata. Kodları satır satır kontrol ettim. Sonra farkına vardım ki 9 nolu pini (APFCON0=0000000) çıkış yapıp 10 nolu pini ölçmüşüm.





Şimdi tekrar bağladım ve sonuç olumlu.



Sizden özür dilerim. Ayrıca sabrınız için teşekkür ederim.

. Kağan

#44
Bu arada datasheet incelerken gördüm ki bu işlemcide CCP1 bacağı (6. bacak) sabit olmak kaydıyla diğer sinyal bacağı 11 yada 13 olarak değişebiliyor ve
PSTR1CON=%00000011
CCP1CON= %00001101
6 ve 11 den biri diğerinin tersi sinyal alınabiliyor.



Powered by EzPortal