SPI 8Bit, 16bit, 24bit, 32 bit (ayarları)

Başlatan ehliseyf, 21 Ekim 2015, 15:12:00

ehliseyf

Mplabx ile derliyorum. İçerisine plugin olarak CCS C kurulu. SPI ile haberleşme yapacağım. 24 bit veri gönderip almam gerekiyor. CS low aktif. Yazılımsal SPI kullanıyorum.
#use spi(MASTER,DI=pin_B4,DO=pin_E5,CLK=pin_E8,bits=32,MSB_FIRST,CLOCK_HIGH=1,CLOCK_LOW=1,ENABLE=pin_G8)

Birkaç sorum olacak,

1- Max veri gönderip almakta sınır var mı ? Saleae logic Analyzer  ile kontrol ettim. 8,16,24,32 gönderebiliyorum.(henüz alma kısmını denemedim)
2- Sclock için Clock_high=1 ( 1usn) clock_low=1 yazdım. Lakin 1.543usn gibi bir süre oluşuyor. Sebebi ne olabilir?
3- Haberleşmek istediğim chip CPOL=0 ve CPHA= 1 ile haberleşin diyor. Geçerli standart hangisidir ? Microchip standartı mı ? Motorola standartı mı ?

Code'm mu oturturum !

JKramer

İkinci durum fast_io kullanılmadığı zaman, yani her giriş-çıkış işleminden önce otomatik olarak tris ayarı yapıldığından kaynaklanıyor olabilir. .lst dosyasını kontrol edebilirsiniz.

ehliseyf

Alıntı yapılan: JKramer - 21 Ekim 2015, 15:36:38
İkinci durum fast_io kullanılmadığı zaman, yani her giriş-çıkış işleminden önce otomatik olarak tris ayarı yapıldığından kaynaklanıyor olabilir. .lst dosyasını kontrol edebilirsiniz.
Hocam program başında şu şekilde tanımlama yapıyorum.
#use fast_io(a) // Port yönlendirme komutlar a portu için geçerli
#use fast_io(b) // Port yönlendirme komutlar b portu için geçerli
#use fast_io(c) // Port yönlendirme komutlar c portu için geçerli
#use fast_io(d) // Port yönlendirme komutlar d portu için geçerli
#use fast_io(e) // Port yönlendirme komutlar e portu için geçerli
#use fast_io(f) // Port yönlendirme komutlar f portu için geçerli
#use fast_io(g) // Port yönlendirme komutlar g portu için geçerli
Code'm mu oturturum !

RaMu

Alıntı yapılan: ehliseyf - 21 Ekim 2015, 15:12:00
2- Sclock için Clock_high=1 ( 1usn) clock_low=1 yazdım. Lakin 1.543usn gibi bir süre oluşuyor. Sebebi ne olabilir?
Donanımsal spi pinlerini kullanmıyorsan olabilir diye düşünüyorum.
"FORCE_HW"
high low süresinden ziyade baudrate kullanmak daha iyi.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ehliseyf

pic2
Alıntı yapılan: RaMu - 21 Ekim 2015, 17:51:11
Donanımsal spi pinlerini kullanmıyorsan olabilir diye düşünüyorum.
"FORCE_HW"
high low süresinden ziyade baudrate kullanmak daha iyi
donanımsal spi kullanmıyorum.
pic24fj256gb110 için max baudrate sınırı nedir ?
picten pic'e değişir mi ?
Baudrate kullandığımda 1 clock süresinin doğru olduğunu nasıl hesaplayabilirim?
Örneğin 32 Bit gönderim olduğunu düşünelim 115200 seçtiğimizi farz edelim. High ve low seviyelerini nasıl hesaplayabilirim ?
baudrate 1 saniyedeki yollanan veri (bit mi? ) yoksa veri grubumu (8bitlik paketler) ?
Code'm mu oturturum !

RaMu

Baudrate saniyede gönderilen bit sayısı,
115200 baudrate deyince, saniyede 115200 tane bit gönderiliyor anlamına geliyor.

Spi da haberleşme hızı kullanılıyor genelde,
pinin high da low da kalma süresinin önemli olacağını sanmıyorum.

Kullandığın picin çalışma freansının 1/4 ü kadar hıza çıkabilirsin sanırım,
pic 40MHz de çalışıyorsa, spi 10MHz  e kadar çalışır, daha yavaşta çalıştırılabilir,
bu kadar hıza ihtiyacında olmaz zaten,
spi max hız için kullanılan picin datasheete ine bakmak lazım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ehliseyf

Alıntı yapılan: RaMu - 22 Ekim 2015, 01:19:47
spi max hız için kullanılan picin datasheete ine bakmak lazım.
Hocam tam olarak nereye bakmak lazım? büyük bir datasheeti var.
İkinci olarak fast_io() kullandığım zaman set_tris_x ayarını kesin yapmak gerekiyor mu ?
zira G8 de enable kurulu fakat fast_io var iken aktif olmuyor. Kaldırıyorum fast_io yu çalışıyor..
Code'm mu oturturum !

JKramer


RaMu

#8
Spi kısmına bakmak lazım,
sayfa 190 da örnekli tablo vermiş,
(Fosc)32MHz kristal ile 16MHz Fcy oluyor demiş, 8MHz spi çalıştırabiliyormuş,
pll açık kapalı dikkat etmek lazım- değişiyor olabilir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html