pic18f4550 ile peryodu 100 nSlik yani 9 Mhz lik bir kare dalga işareti üretemek

Başlatan tazmania, 22 Aralık 2010, 16:54:52

tazmania

arkadaşlar merhaba pic18f4550 ile peryodu 100 nSlik yani 9 Mhz lik bir kare dalga işareti üretebilirmiyiz.


X-Fi

merhaba pic18F4550 48Mhz hıza kadar çıkabiliyormuş bu hızda 12Mips işlem yapabiliyormuş. Düşen kenar ve yükselen kenar birer işlem sayarsak teorikte 6Mhz e kadar clock oluşturabilir gibi. Üzerine çıkması imkansız.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

tazmania

#include<htc.h>
#include<delay.c>

__CONFIG(1,0xFCE7);
void dly(void)
{
#asm

#endasm
}
main()
{
TRISB=0;
while(1)
{
RB0=1;
#asm
nop
#endasm
RB0=0;
#asm
nop
#endasm
}

}
bu program ile peryodu 200 ns yeye kdar düşürdüm. ama benim asıl takıldığım  yer config ayarları hightec ile programı yazmaya çalışıyorum. ancak pic18f4550.h dosyasının içerisindeki tanımlamaları yaptığımda data sheete göre yaptığımda elde etiiğm sayılar farklı oluyor. bunun sebebi nedir.

X-Fi

evet o hitech in bir sorunu config ayarları doğru şekilde koda yüklenmiyor mplap kullanıyorsanız configure/configration bits kısmından ayarlayıp hex olarak senin yaptığın gibi koda eklemek.

bir diğer yolda  pic18f4550.h dosyasının içeriğini düzenlemek örneğin

#define WDTEN      0xFFFF    // Enabled
#define WDTDIS      0xFEFF    // Disabled-Controlled by SWDTEN bit

kısmında FEFF olan değeri doğru biti değiştirmesini sağlamak gibi.


birde clock için aradaki nop ları kaldırmayı deneyin o zaman portu değiştirmiyor mu ?

o kısmı asm olarak yazıp döngüyü GOTO $-1 şeklindede başa sarabilirsiniz. bu kod daha hızlı işleniyordu yanlış hatırlamıyorsam.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

tazmania

dediğin ibi yapıcam sanırım kaç gündür hightechin header dosyası ile zaman kaybetimm. clock frekansı 9mhz olan tft sürmak istiyorum. yapabilirsem bu işlemci ile yapmayı denicem bakalım ne yapabilecekmiyim.

teknikelektronikci

Alıntı yapılan: X-Fi - 22 Aralık 2010, 17:01:18
merhaba pic18F4550 48Mhz hıza kadar çıkabiliyormuş bu hızda 12Mips işlem yapabiliyormuş. Düşen kenar ve yükselen kenar birer işlem sayarsak teorikte 6Mhz e kadar clock oluşturabilir gibi. Üzerine çıkması imkansız.

teorik olarak bu hesaplamayi nasil yaptiniz ?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

serdararikan

amaç sadece 9MHz kare dalga üretmek ise CCP modülünü PWM kurarak bu sinyali üretebilirsiniz.belki tam 9mhz olmayabilir ama yakın bir değer olur.ama timer içinde kod ile üretmeyi düşünürseniz kesme rutininde if kullanırsanız bu işlem için 2cycle biti terslemek içinde 2cycle timer bitini resetlemek için 1cycle timer değerini tazelemek için en az 2cycle gerekir bu durumda bitin durumunu değiştirmek için en az 7cycle lazım bir kare dalga sinyal için bu işlemin 2 defa yapılması gerektiğini düşünürsek 14cycle yapar.bölme oranının 1/2 olduğunu düşünsek Fosc/4=12mhz yapar.
bölme oranı ile 12mhz/2=6mhz yapar. bunu 14cycle a bölersek yaklaşık 500Khz lik bir kare dalga üretebilirsin...
kesmede if kullanmazsa durum değişir tabiki

X-Fi

Alıntı yapılan: teknikelektronikci - 22 Aralık 2010, 20:48:34
teorik olarak bu hesaplamayi nasil yaptiniz ?

Mips değerleri microchipin sitesinde var 12 mips dediğimiz saniyede 12,000,000 işlem demek 1/12,000,000 = 12MHz  ile işlemci komut işler ben düşen kenar ve yükselen kenar oluşturmak için 2 komut demiştim 6mhz çıktı ortaya ama buda mümkün değil çünkü goto komutu ile başa dönülmeli serdararikan hocam daha doğru açıklamış.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

teknikelektronikci

cevaplar icin  Tesekkürler
fosc nin 4 e bölündügünü unutmusum yani fosc/4 olayini hali ile sonuc mips oluyor
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

trhmt

bende ccp modülünü kullanmadan 40khz oluşturmak istiyorum. pic16f628'in RA0 ve RA1 pinlerine vereceğim bunu . yardımcı olursanız sevinirim.

tyilgin

Alıntı yapılan: trhmt - 12 Ocak 2011, 23:05:10
bende ccp modülünü kullanmadan 40khz oluşturmak istiyorum. pic16f628'in RA0 ve RA1 pinlerine vereceğim bunu . yardımcı olursanız sevinirim.

timerlardan uygun olanı kurun, kesme içinde de kapınızı tersleyin...

Bu arada dahili osilatör kullanıyorsanız biraz zor.. 20Mhz harici osilatör olmalı.

edit: uygun derken boşta olan birini kastetmiştim.

trhmt

aynen öle yaptım. doğru yaptığıma emin oldum şimdi :) çok sağol... bi sorum daha olcak. b portu kesmesiyle ilgili. b6 ve b7 yi kesme için kullandım b5 ve b4 lcd nin enable ve rs uçlarına verdim. fakat lcd yi çalıştıramadım bu durumda. pice sadece lcd yi bağlıyorum b4 b5 e o zaman çalışıyor. b6 ve b7 için kesmeleri aktif etmem lcd için sorun oluşturur mu? kolay gelsin

tyilgin

Maalesef kullanamıyorsunuz. portb değişim kesmesini açarsanız rb4..rb7 arası kapılardaki tüm değişimler kesmeyi etkiliyor. Bende ilk duyduğumda sadece giriş olan pinlerin bu kesmeye dahil edileceğini düşünmüştüm ama çıkış olarak ayarlanmış pinlerdeki sizin yapacağınız bir değişiklikte kesmenin oluşmasını sağlıyor.

ben basit olan bir devremde kesme içinde kapıları okuyup benim beklediğim kapımı diye kontrol etmiştim. Tabii programın akışına bir dünya yük getireceğini bildiğim halde...  :)

Edit : Yanılmışım, Özür dilerim....  :'(

Tagli

tyilgin, datasheet aksini söylüyor:
Alıntı YapFour of PORTB's pins, RB<7:4>, have an interrupt-on-change feature. Only pins configured as inputs can cause this interrupt to occur (i.e., any RB<7:4> pin configured as an output is excluded from the interrupt-on-change comparison). The input pins (of RB<7:4>) are compared with the old value latched on the last read of PORTB. The "mismatch" outputs of RB<7:4> are OR'ed together to generate the RBIF interrupt (flag latched in INTCON<0>).
Gökçe Tağlıoğlu

tyilgin

Alıntı yapılan: Tagli - 14 Ocak 2011, 08:51:27
tyilgin, datasheet aksini söylüyor:

Aslında bakmadan yazmak istemedim ama berbat ingilizcemle bu satırı bile görememişim. Ancak yukarıda bahsettiğim durumla karşılaştığımı hatırlıyorum.
Gerçi mculara ilk bulaştığımda bu durumla karşılaşmıştım, epeyde oldu.
Yinede tekrar deneyip sonucu burada yazarım.

Edit : Yanılmışım, Özür dilerim....  :'(