pic software spi vs hw spi

Başlatan crazy4blue, 27 Kasım 2018, 23:33:57

crazy4blue

Arkadaşlar merhaba.   pic 18f4550 işlemcide software spi da çalışan sistem hw spi a geçince çalışmıyor. bir türlü bilgi alamadım.

ete

Soru sormanın usulünü bilmeyince cevap da almak zor olur. Bu mesaja baktım yardımcı olayım diyorum ama nasıl?.
Yazılmsal SPI ile çalışıyor ama donanımsal SPI ile çalışmıyor diyor arkadaşımız. Peki ne yapmış da çalışmamış görebiliyormuyum ? hayır o halde yapacak bir şeyim yok demektir. Cevap bile yazmamam gerekir ama en azından soru nasıl sorulur onu öğretebilirim diye düşündüm. O halde soru nasıl sorulmalı idi ona bakalım;

Bu soruya öncelikle şema verilerek başlanmalı. Çünki donanımsal SPI bu donanım için ayrılmış pinlerin kullanılmasını gerektirir. O halde şemayı vereceksinki bende senin doğru pinleri kullanıp kullanmadığını anlayabilmeliyim.

Daha sonra yazılmış programı da vermen lazım ki ben bakıp doğru registerleri kullanmışmısın veya en azından registerlere doğru değerler vemişmisin anlayabilmeliyim değilmi.
Bunuda geçtik donanımsal SPI kullanımı bazı registerler aracılığı ile yapılıyor. Programa bakarak bunları doğru kullanmışmısın anlayabilmeliyim.
Bütün bunlar olmadan ben nasıl bir cevap verebilirimki? Bunu hiç akıl edemiyormusunuz acaba yada, ne düşünerek yukardaki mesajı yolluyorsunuz çok merak ediyorum doğrusu.

Böyle bir soruya ancak ve ancak şöyle bir cevap verilirdi. "Çalışmıyor ise mutlaka bir yerlerde hata yapmışsındır" Bu cevap acaba seni tatmin edermiydi bilmiyorum ama beni etmiyor maalesef o nedenlede ben ve benim gibi düşünen pek çok kimse böyle mesajlara cevap yazmıyor yazamıyor demek daha doğru olur belkide.

Lütfen biraz daha mantıklı olmaya çalışın soru sorarken. Cevap yazacak kişiyede ip uçları vermeniz lazım ki onda mantık yürütebilsin.

Ete

crazy4blue

#2
üstad kusura bakmayın. haklısınız.
http://microcontrolandos.blogspot.com/2014/02/pic-rfid-mfrc522.html
bu adresteki projeyi yapmak istiyorum. daha doğrusu  18f4550 ile yaptım çalışıyor.
birincisi buradaki arkadaş softspi kullanmış. ben hw spi modülünü kullanmak istiyorum.  (gerçi soft spi ile de başarılı olamadım ama)
fakat bu  işlemciyi kullanmak gereksiz yere kaynak israfı olacak benim için.
kendim 18f14k50 işlemcisinin kullanacağım.    derleyici olarak mikroc kullanıyorum.  kristal olarak 12mhz kullanıyorum.   


#include<built_in.h>
#include<rc522.h>




unsigned char readbuff[64] absolute 0x500; 
unsigned char writebuff[64] absolute 0x540;
unsigned int i=10;
char uart_rd;
sbit MFRC522_CS at RC6_Bit;
sbit MFRC522_Rst at RC1_Bit;    /*
sbit SPI1_SDO at RC7_Bit;
sbit SPI1_CLK at RB6_Bit;
sbit SPI1_SDI at RB4_Bit;   */
sbit MFRC522_CS_Direction at TRISC6_Bit;
sbit MFRC522_Rst_Direction at TRISC1_Bit;/*
sbit SPI1_SDO_Direction at TRISC7_Bit;
sbit SPI1_CLK_Direction at TRISB6_Bit;
sbit SPI1_SDI_Direction at TRISB4_Bit;

 

char key[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
char writeData[] = "Merhaba";

void main()
{
char msg[12];
char UID[6];
unsigned TagType;
char size;
char temp;
char i;



   ANSEL  = 0;                            // Configure AN pins as digital
  ANSELH = 0;
SSPCON1=0010000;
SPI1_Init_ADVANCED();

    UART1_Init(9600);  // Initialize UART module at 9600 bps
  Delay_ms(100);     // Wait for UART module to stabilize


     MFRC522_Init();
    UART1_Write_text("abc");
                                             N
     while(1)
     {

       //Verifica se há algum cartão
     if( MFRC522_isCard( &TagType ) )
     {
UART1_Write_text("111");
         //Exibe o tipo do cartão no display
         ByteToHex( Lo(TagType), msg );
         ByteToHex( Hi(TagType), msg+2 );


         //Faz a leitura do numero de serie
         if( MFRC522_ReadCardSerial( &UID ) )
         {
             //Posiciona o cursor
                        UART1_Write_text("222");

             for( i=0; i < 5; i++)
             {
                 ByteToHex( UID[i], msg );

             }
             size = MFRC522_SelectTag( &UID );
         }


         if( MFRC522_Auth( PICC_AUTHENT1A, 7, &key, &UID ) == 0 )
         {

             MFRC522_Write( 4, &writeData );
         }
         else if( MFRC522_Auth( PICC_AUTHENT1B, 7, &key, &UID ) == 0 )
         {
             //Escreve algo no bloco 4
             MFRC522_Write( 4, &writeData );
         }
         else
         {

            continue;
         }


         if( MFRC522_Read( 4, &writeData ) == 0 )
         {
                             UART1_Write_text("222");
         }


         MFRC522_Halt();
     }



    }
}


açıkçası bu işlemcide bir türlü başarılı olamadım. neden bu işelmci derseniz  usb çıkışı lazım. o yüzden usb çıkışı olan ve tr de bulabildiğim en uygun işlemci bu.
kütüphane dosyasını ekte sunuyorum.
modül olarak arduinolarda kullanılan rc522 kullanacağım. bu modül 3.2 v ile çalışıyor. Acaba  araya logic level çevirici mi kullansam?
Tekrardan özür diliyorum. 

crazy4blue

Üstad şemaları eve geçince ekleyeceğim.

ete

Bir eksik bilgi daha belirlenmiş oldu oda hangi dilde program yazdığın. MikroC kullanıyormuşsun. C dilinden biraz anlarım ama MikroC yi pek bilmiyorum. Yinede yazdıklarına şöyle bir baktım ve gördüğüm vede kusur olduğunu düşündüğüm şey şu,
SSPCON1=0010000;
Burada SSPCON1 registerine binary bir değer vermeye çalışmışsın. Binary değer MikroC de nasıl verilir tam hatırlamıyorum ama sanırım 0b00100000 şeklinde olması gerekir diye düşünüyorum. Senin yazdığın şekilde olamayacağı kesin. Sayıların hangi formatta olduğu önüne bir işaret koyularak belirtilmesi gerekir. Belirtilmeyen desimal kabul edilir ve muhtemelen derleyici senin verdiğin sayıyı 001 olarak algılıyor. Basicde olsaydı bu sayıyı %0010000 şeklinde verirdik.

Diğer bir sorun da verilen bit adedinin 7 tane olmasıdır. Bu durumda yazdığın format doğru bile olsa bu %01000000 gibi kabul edilebilir. Derleyicinin ne kabul ettiğini bilemiyoruz. Bu nedenle 0 satır en azından 00100000 şeklinde olmalı idi.
En güzeli MikroC kullanım klavuzuna bakıp registere birnay değerin nasıl verildiğini öğren ve 8 bit olarak sayıyı doğru şekilde vermeye bak.
Donanımsal SPI pinlerini kontrol ettim hepsi doğru. En azından işlemci data sheetine göre pinler doğru seçilmiş bunu programdan anlayabiliyorum. Şema da da doğru bağlanmışlar ise geriye yazılımı kontrol etmek kalıyor. Birde kütüphanenin bu işlemciye uyumlu olup olmadığını ayrıca kontrol etmek lazım ama onuda ancak anlayan birisi yapabilir ben yapamam maalesef.

Ete

Powered by EzPortal