Mikroc de spi iletişim problemi hakkında bilgi lazım oldu ?

Başlatan has_artvin_li, 07 Kasım 2019, 12:00:17

has_artvin_li

Herkese selamun aleyküm.
Değerli ustalarım mikroc kullanarak spi iletişim kurmaya çalışıyorum. Kullandığım mikrodenetleyiciler 16f877A ve 16F628A bu iki çeşit entegre üzerinde denemeler yaptım yaklaşık 10 gündür uğraşmama rağmen çözemedim.

Konu şu : internetten max7219 7 segment sürücü entegre sipariş ettim dip kılıf olanlardan 3 adet. Ardından arduino için tasarlanan o basit shield lerden yani örnek olarak şunun tıpkısı.

https://urun.gittigidiyor.com/bilgisayar-tablet/ard-lcd-1414-max7219-8-dijit-7-segment-display-modul-arduino-487550960?utm_source=google-pla&utm_medium=paid-search&utm_content=58375853727&utm_term=22324003047&ga_prodid=487550960&ga_merchantid=134002859&scxid=14489-145818-2357-0&sc_gcsp=gg&gclid=Cj0KCQiAno_uBRC1ARIsAB496IX4dkV-n478kZZTSwRYi0ezuby5UAKoKayNlfRRGIzPZJSND4uT-ZYaAm8dEALw_wcB&gclsrc=aw.ds

Elimde usb den pc ye bağlanan 8 kanal 24mhz sinyal analüzörü var buna bağlayarak spi den sinyalleri dinlemeye çalıştım dinleme de yaptım 3 kanalın 3 tanesinde de sinyaller alıyorum. Ama max7219 ile hiç bir şekilde haberleşemedim...

Bunun üzerine 7 segment 8 adet ortak katod display aldım bunun yanında 2 adet de 4 lü ortak katod 7 segment display aldım board üzerinde de bir çok denemeler yaptım ama çalıştıramadım.

Kendimce vardığım kanı ise spi iletişim için gerekli düşen kenar ve yükselen kenar sinyallerinin ayarlarını yapamadım...

Benim sormak istediğim en başlıca sorulardan biri şu :

SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

Araştırmalarımda yukarıdaki satırın spi hızı düşen kenar mı yükselen kenar mı olduğunu vs belirleyen bir komut olduğunu öğrendim.

Ama burda anladığım hiç bir şey olmadı yani:

SPI1_Init_Advanced denildiği zaman spi nin daha geniş bir ayar sahasına sahip olması gereken bir modu mu kullanıyor spi advanced özellikleri nedir spi ve soft spi komutlarından ayrıcalıklı olarak ?

spi master osc div4 demek pic den gidecek olan sinyali picin osc hızının 4 e bölünmüş halinde mi yolluyor yani pic 10 mhz osilatör bağlı iken 2,5mhz de mi veri alış verişi yapıyor ?

_SPI_DATA_SAMPLE_MIDDLE : bu ne anlam taşıyor yani işlevi nedir ve başka değişik modları var mıdır yani spi datası sample middle den başka şekilde ayar oluyor mu ?

_SPI_CLK_IDLE_LOW : Bu komut ne iş yapıyor anlamı nedir işlevi ve çeşitleri nedir yani _SPI_CLK_IDLE_LOW YERİNE HIGH olursa ne olur ne demiş oluruz ?

_SPI_LOW_2_HIGH : Burası ne anlam taşıyor low yerine high olursa ne olur ?

SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH); komutunu komple olarak ele alacak olursak

spi1_init_Advanced ile spi yi çağırmış ama parantez içindeki komutlar ile de bu init komutunu yapılandırmış lakin bu yapılandırmaları çözemedim başka ne şekillerde yapılandırılır ve örnekleri nelerdir bunları bana biraz açıklar mısınız ?

16F877A ve 16F628A da spi için kullanılan pinler hangileridir data gönderme clock ve cs uçları ? yani yukarıdaki spi_init advanced yada spi_init yada soft_spi_init tanımlamaları bu ayarları otomatik olarak hangi şekilde kurar ? pinler fark eder mi ve ben bu pinleri hangi dökümanın neresinden tespit edebilirim ?

Örek olarak soft spi ile bir haberleşme yapmaya çalıştım proteus isis ile hiç sorunsuz çalışmasına rağmen max7219 un ne hazır shield inde nede kurduğum devresinde hiç bir şey göremiyorum...

öyle ki ekranı tamamen karart modu komutu yolluyorum değişen yok test modu için bütün ledleri yak diyorum yine aynı değişen bişiy yok...

Çözdüğüm kadarı ile max7219 un belirli adreslerine belli dataları gönderince test modu yada kaç karakter rakam görmek istediğinin modu vs hepsi ayarlanıyor ama ne gönderirsem göndereyim hiç kimse yok :D


sbit Chip_Select at RB7_bit;
sbit SoftSpi_CLK at RB6_bit;
sbit SoftSpi_SDI at RB5_bit;
sbit SoftSpi_SDO at RB4_bit;

sbit Chip_Select_Direction at TRISB7_bit;
sbit SoftSpi_CLK_Direction at TRISB6_bit;
sbit SoftSpi_SDI_Direction at TRISB5_bit;
sbit SoftSpi_SDO_Direction at TRISB4_bit;

void main() {
CMCON=7;
trisb=0;
portb=0;

  Chip_Select = 1;                        // DAC seçimini kaldırın
  Chip_Select_Direction = 0;             // CS # pinini Output olarak ayarla
  Soft_SPI_Init ();                     // Soft_SPI'yi başlat

            Chip_select=0;
            soft_spi_write(0x0A);// DİSPLAY TARAMA HIZINI BELİRLEYEN ADRES ( OSİLATÖR BÖLME ORANI DATASHEET'E BAK )
            soft_spi_write(0x05);// BÖLME ORANI 31/32
            Chip_select=1;

            Chip_select=0;
            soft_spi_write(0x0B);// DİSPLAY AKTİF ETME DEĞERİ YANİ 8 DİSPLAYDAN KAÇ TANE AKTİF EDİLMEK İSTENİYORSA BU ADRES BELİRLER
            soft_spi_write(0x00);// 0X00 DEĞERİ SADECE 1'LER BASAMAĞINDAKİ DİSPLAYI AKTİF EDER. 0X07 BÜTÜN BASAMAK DİSPLAYLERİ AKTİF EDER
            Chip_select=1;

            Chip_select=0;
            soft_spi_write(0x0C);//DSİPLAYLERE VERİ YOLLAMAYI AÇMA VE KAPAMA BİTİ
            soft_spi_write(0x01);//0X00 OLURSA DİSPLAYLER KAPALI 0X01 OLURSA DİSPLAYLER AÇIK MODDADIR.
            Chip_select=1;

            Chip_select=0;
            soft_spi_write(0x0F);//DİSPLAY TEST MODU REGİSTERİ
            soft_spi_write(0x00);//0X00 OLURSA TEST MODU KAPALI KONUMDA OLUR 0X01 OLURSA BÜTÜN DİPLYALARIN BÜTÜN DİJİTLERİNİ YAKAR
            Chip_select=1;

            Chip_select=0;
            soft_spi_write(0x09);//KOD ÇÖZME MODU KAYIT ÖRNEKLERİ REGİSTERİ
            soft_spi_write(0xFF);
            Chip_select=1;

            while(1){
basla:
            portb.rb3=1;
            delay_ms(100);
            Chip_select=0;
            soft_spi_write(0x01);//KOD ÇÖZME MODU KAYIT ÖRNEKLERİ REGİSTERİ
            soft_spi_write(0x05);
            Chip_select=1;
            portb.rb3=0;
            delay_ms(100);
            goto           basla;  }
}


By-Coders

Önce Tüm Pinlerini Dijital e Çevir.(Anseller..)
Soft Spi Normal Spi a Göre Yavaştır.Hardware Spi Pinlerini Kullan.
Hardware Spi Pinlerini Kullan ve sadece SPI1_Init()  demen yeterli Spi a Data Göndermek için.

Not:MicroElektronica nın derleyicisi Kullanımı basit ama hatalar ile doludur.Koca bir projeyi onun derleyici hataları yüzünden Css C ye taşımak zorunda kaldım.




has_artvin_li

Peki sayın @By-Coders hocam donanımsal olan spi de hangi pinleri kullanmam gerekli yani ben bunu da bilemedim ve bu kullanacağım pinleri nerden görebilirim?

By-Coders

kodunu incelediğimde Cs pinini low yapıp data yazmışssın sonra high yapmışsın.
Muhtemelen Cs Pini Aktif olmadığı için cihaz datayı alamıyor.Bir ihtimal.


Powered by EzPortal