SPI 24 Bit haberleşme sorunu (PIC ve ayrıca CS5460A)

Başlatan salihonur, 06 Mayıs 2011, 19:20:35

salihonur

Arkadaşlar, projenin bir bölmünde 24 bitlik ADC'den SPI protokolünü kullanarak veri okumam gerekiyor.

Bunun için 2 adet PIC18F2520'yi SPI ile bağladım. 1. picte buton1'e tıkladığımda SPI'ya 0xFFFFFC, 2. butona basıldığında ise 0xFFFFFF verisi basılıyor. SPI 8 bit veri taşıdığından doğal olarak 3'e bölüp diğer tarafta birleştiriyorum. 2. pice bağlı olan led ise 0xFFFFFC verisi geldiğinde logic 1 aksi halde logic 0 oluyor. Kodlar aşağıdaki gibidir.

CCS KODLAR
http://pastebin.com/pPnGCfnG

Ancak burada ters giden birşeyler var. Buton1'e sürekli basılmasına rağmen her daim doğru veri okunmuyor. Led bazen yanıyor bazen sönüyor.

Yanlış yaptığım yer neresidir? CS5460A 24 bit ADC konusunda fikir verebilecek var mı?



iyildirim

Çok detaylı bakmadım, ama gördüğüm kadarı ile spi_write 16 bit veri kabul ediyorsa, fazla veri gönderiyorsunuz, 8 bit veri kabul ediyorsa da  x'i char tanımlamanız daha iyi.

Verici ve alıcıya ait kodları ayrı ayrı yapıştırdı iseniz,  birinde DEVICE1 tanımı olmalı.


salihonur

Çok teşekkür ederim integer'ı char yapınca sorun çözüldü. Int tanımlamasını 8 bit olarak ele almıştım fakat 16 bit ön tanımlıymış.

24 bit iletişim ile uğraşanlar için fikir olması adına bir özet geçeyim. 24 bit veriyi (32 bit değişken) make8() ile parçalara bölüp 8 bit halinde tek tek gönderdim. Test yazılımda ufak değişikliğe gittim ama temel olarak aynı kaldı. Alıcı tarafında gelen paketleri saydırarak değişkene atama yapmasını sağladım. En son olarak make32() ile gelen paketleri birleştirdim.

24 bit ile çalışan arkadaşlara kolay gelsin.