SPI işlem sırası

Başlatan pcb, 01 Eylül 2011, 15:58:03

-Hasan-

18F46K22 ile daha önce hiç çalıştınız mı?

pcb

bu işlemci ile yazılımsal spi çalıştırdım ama donanımsal SPI hiç çalıştırmadım ilk defa denedim başarılı olamadım.
Programdaki etkileyebileceğini düşündüğüm , tüm donanımsal tanımları iptal ettim yani interruptlar , diğer seri iletişim ler gibi yinede sonuç olumsuz. Hata kaynağını tespit edemedim.

pcb

#32
daha hızlı okuma yapabilir miyim diye C dilinde yazılmış manuel SPI olarak bir kaynak buldum kullandığım adc ye uyguladım okuma hızında artış var ama yine yeterli değil.

           
            High    CLK
            
            Low CS
          
            For ll = 0   To  5   Step    1
            Low CLK
            DelayUS 1
            High    CLK
            DelayUS 1
            Next 
            
            For ll = 0   To  15  Step    1            
            Low CLK
            DelayUS 1
            High    CLK
            
        If  PORTB.2 = 1     Then    Set OKUMA.0
            
            OKUMA = OKUMA << 1
            Next
            High    CS



Tagli

Bu son verdiğin kodda beklemeleri azaltmayı denedin mi?
Gökçe Tağlıoğlu

pcb

#34
beklemeleri azaltmayı denedim minimum delayus 1 yapabiliyorum DelayCs, cycle komutu Pprint (harici font) ile birlikte çalışmadığından kullanamıyorum. Protonda lisanslı olmadığımızdan resmi sitesinde yanıt almakta zor.

-Hasan-

SSP2CON1=$32
SSP2STAT=0
TRISB.1=0
TRISB.2=1
TRISB.3=0

Hocam ayarlarınızı bir de şöyle topluca yapar mısınız?

pcb

yazdığınız kod a BF tanımını da ekledim ama yine her 8bit için 255 veriyor

pcb

Alıntı yapılan: pcb - 03 Eylül 2011, 13:02:40
MSB14-15 kısmını 3 diğer 8 er bitleri 255 görüyor buda bir gelişme
daha önce belirttiğim ve okuma sonucunda gördüğümü söylediğim 3 değeri meğer okuma_3 olarak ekrana yazdırdığım yazının 3 ü imiş, ekran karıştığı için böyle algılamışım yoksa her 8bit 255 veriyor.

-Hasan-

Osilaskop ekranında yine bir şey yok mu?

pcb

CS = 1-0 görebiliyorum ama clock ları göremiyorum, verdiğiniz kod oldukça yavaş okumaya ayarlı sanırım

-Hasan-

Alıntı yapılan: pcb - 05 Eylül 2011, 12:06:14
verdiğiniz kod oldukça yavaş okumaya ayarlı sanırım

Hiç osilaskop kullanmadım. Onlar hakkında pek bir bilgim yok. Eğer sorun bu ise prescaleri biraz düşürüp deneyin bakalım.

SSP2CON1=$32 ' 1/64
SSP2CON1=$31 ' 1/16
SSP2CON1=$30 ' 1/4

Tagli

Araya assembly komutu girebilirsin ama. 40 MHz'de çalıştığını varsayarsak, bir adet NOP komutu ile 100 ns bekleme yaparsın. Ancak, Proton'daki  high ve low komutlarının nasıl çalıştığını bilmiyorum. Eğer TRIS register'larını da kurcalıyorlarsa her birinin işlemesi 400 ns'yi bulabilir. Bu durumda araya nop koymasan bile istediğin hıza erişemeyebilirsin. Yok eğer TRIS'leri değiştirmeden çalışıyorlarsa, sanırım bu süre toplamda 200 ns'ye kadar düşer, nop kullanmazsan. PIC'in çıkışlarını bu hızda değiştirebileceğini varsayarsak (ki emin olmak için denemek lazım) elde edeceğin hız yaklaşık 208.3 kSPS olur. Kullandığın entegrede azami hız olan 250 kSPS'nin biraz altındasın.

Öte yandan, eğer PIC'i 40 MHz'te çalıştırıyorsan zaten istediğin hıza donanımsal modülle de erişemezsiz. Baud Rate ayarı için seöenekler belli: FOSC'yi 4, 16 veya 64'e bölebilirsin. Bu da sana 10MHz, 2.5 MHz ve 0.625 MHz hızlarını verir. Kullandığın entegrenin kaldırdığı azami hız 6 MHz. Bu durumda 2.5 MHz ile yetinmek zorunda kalırsın. Gerçi bir de Timer2'ye bağlı bir hız ayarının mümkün olduğu yazıyor, ama hesabın nasıl yapıldığını tam anlatmamış, belki o şekliyle işini görebilir, bu kısmı anlamadığım için pek yorum yapamıyorum.

Daha önceki yazılanların tamamını okumadım. Sen boud rate'i nasıl ayarladın?

Ve şimdi farkettim, sanırım 16 MHz ile çalıştırıyorsun PIC'i. Bu durumda NOP'lar 250 ns gecikme yapar. Donanımsal olarak da sanırım azami 4 MHz clock üretebilirsin, yani yaklaşık 166.6 kSPS ölçüm yaparsın.

Dediğim gibi, Timer2'ye bağlı clock ayarı işin içine girince durum değişebilir. Datasheet'te o kısmı anlamadım.
Gökçe Tağlıoğlu

pcb

İşlemci PLL ile 64Mhz de çalışıyor, maximum çalışma hızı olarak Fosc/16 düşündüm ama Fosc/64 olarak test ediyorum, adc nin kullanımı çok kolay, donanımsal SPI kullanırken sanırım benden kaynaklanan bir hata mevcut