18F4550 ve USB Sorunu

Başlatan aeronics, 05 Temmuz 2012, 00:19:23

aeronics

Gerek PBP içinde bulunan USB18 klasöründeki örnekler gerekse de EasyHID USB Wizard'ın yarattığı kodlarda DEFINE OSC 48 ile osilatör frekansı 48 MHz'e ayarlanıyor ancak kullanılan kristal ise 20MHz. Böyle yapılmasının özel bir nedeni var mı acaba?
Diğer bir sorum ise EasyHID USB Wizard'ın yarattığı kodu compile etmeye kalktığımda hata veriyor. Bunu nedeni nedir acaba?

ete

Osc frekansı ancak pll (kristal x 4) yardımı ile 48 mhz yapılabilir. Genel kaide kristal frekansı x4 olduguna gore bu is ancak 12 mhz lik kristal ile olur. Kristalin 20 mhz oldugu biryerdemi yazılıdır.
Bana kalırsa frekans en az 48 mhz olmalıdır. Sistem 48 mhz ve üzerinde çalısmaktadır.
İyi incelemek lazım. 

Kesin olan bir sey var 48 mhz yalnızca 12 mhz kristal ile elde edilir.  20 mhz kristal kullanıp 48 mhz alamazsınız.
Ete

aeronics

Merhaba ete Hocam

Dediğim örnek aşağıdaki linkte mevcut. Normal bir web sayfası olsa kafaya bu kadar takmayacaktım ancak melabs'ın sitesi olunca kafam allak bullak oldu. 6 ve 18. satırlarda dediğim çelişkiyi görebilirsiniz.

http://melabs.com/samples/LABXUSB-18F4550/usbjadem.htm

ete

Evet çelişkiyi görebiliyorum. Bunun iki açıklaması olabilir.
Birincisi, kristal frekansı yanlış yazılmıştır.
İkincisi, işlemci gerçekten 20 Mhz kristal ile çalıştırılmaktadır. Ancak verilen define OSC 48 komutu işlemcinin zamanlama komutlarını 48 Mhz üzerinden çalıştırabilir.

Bu olayı daha öncede görmüştüm. Seri haberleşmede de benzer olaylar vardır. Define OSC 4 yerine 6 yazın kristaliniz 4 Mhz olsa haberleşme yapamıyorsunuz. Çünki işlemci hesabını 6 Mhz e göre yapıp gerekli gecikmeleri koymaya çalışıyor.

Denemek gerek
Ete

aeronics

Internette biraz bakındığımda PIC ve USB ile yapılmış hemen her türlü cihazda 20MHz kullanmışlar. Bu yüzden devre tanımı için yazılan bilgide ki 20MHz akla yatkın geliyor ancak diğer yanda da PBP'deki kodların hepsi DEFINE OSC 48 olunca ikisini bir araya getiremiyorum.

3mZ

aeronics;

Eğer niyetin bir usb pic programlayıcı devre yapmak ise
http://www.sprut.de/electronic/pic/projekte/brenner8/index.htm
aşağıdaki linkteki devrelerin hepsi denenmiş çalıştırılmış devrelerdir.

aeronics

Amacım PIC Programlayıcı yapmak değil. Öyle olsa en kötü ihtimal PICKIT2 veya 3'ün manualında tüm şeması mevcut. Asıl amacım USB üstünden 4x20 LCD sürmek ve bunun yanında aynı PIC'e kızılötesi alıcı ve klavye tanımı yaptırmak. Böylece uzaktan kumanda ile mediacenter programımı kontrol edebileceğim. Aynı zamanda da istediğim bilgileri ekranda gösterebileceğim. Daha sonrasında bunu daha da geliştirip sadece müzik dinlemek için TV'ye açmak yerine mediacenter programının menülerinde 4x20 LCD'de gezinebilmek var. Kısacası uzun soluklu bir proje ama bir ucundan başlamak lazım malum.

mberkanbicer

18F4550'nin osilatör kısmının diyagramı ektedir.
USB, 48MHz ile çalışmaktadır. 48 MHz'i, PIC'e bağlanabilecek osilatörlerle elde edebilmek için PLL kullanılmaktadır.
Ancak PIC'te, 4 MHz girişe karşılık 96 MHz frekans üretebilen bir PLL mevcuttur (2 numaralı kutu). Peki 4 MHz giriş nasıl oluşturulacak? BU da PLL prescaler ile oluşturulmaktadır.

Prescaler Değeri = Giriş Osilatör Frekansı / 4 MHz

şeklinde hesaplanmaktadır. Yani girişiniz 20 MHz ise PLL prescaler değeri 5 olmalıdır. Böylece giriş frekansı 5e bölünecek ve PLL'e girecek frekans 4 MHz olacak. PLL'in çıkışından da 96 MHz frekans elde edilmiş olacak. USB 48 MHz ile çalışıyor ve elimizde 96 MHz var. O halde PLL çıkışı 2'ye bölünmeli. Bu da osilatör kısmında yapılıyor. Bu frekans 3 ve 4 numaralı kutu üzerinden USB arabirimine gönderiliyor. Yani USB kullanmanız gerekiyorsa PLL bu şekilde ayarlanır ve kullanılır.

CCS C kullanıyorsanız #FUSES PLL5 olarak ayarlanır. PLL'i kullanmak için osilatör seçeneklerinden PLL açılmalıdır. CCS C için #FUSES HSPLL kullanılabilir. Bu ayarlar kullanıldığında 20 MHz'lik osilatör kullanılarak 48 MHz elde edilir ve USB kullanılabilir.

Gelelim USB dışındaki işlemlerde kullanılacak frekansa, yani CPU frekansına. USB frekansı PLL'le 48 MHz'e ayarlandıktan sonra CPU frekansı da ayarlanmalıdır. 5 numaralı kutu incelendiğinde, PLL çıkışındaki frekans kullanılmak isteniyorsa ona göre CPUDIV ayarlanmalıdır. Eğer CPU için girişteki frekans kullanılmak isteniyorsa o zaman PLL'siz kısımdan kullanılmalıdır. Yani FOSC3:FOSC0 ona göre ayarlanmalıdır.

Powered by EzPortal