PIC18f4520 ile SPI MMC & gLCD

Başlatan uuRAbi, 14 Nisan 2012, 23:22:07

uuRAbi

S.a

Hepinize merhabalar arkadaşlar. Üzerinde çalışmakta olduğum bir projede biraz birkaç sorun yaşıyorum, bana yardımcı olabilirseniz çok memnun kalırım. Öncelikle yapmak istediğim şey, bir mmc kartında bulunan resimleri (1den fazla olması yeterli) SPI ile alarak, yine SPI ile GLCD ekranda göstermek. Bunu yapmak için kullandığım programlar;

MikroC Pro for PIC
Image2Lcd -> Resimleri Hex koduna dönüştürmeye yarayan bir tür program
18F4520 PIC
MCP23S17 seri çıkış çoklayıcı
LM4229 Graphic LCD (SPI_T6963C kütüphanesini kullanmakta)...

Programın amacı yukarıda da bahsettiğim gibi MMC' den SPI ile okunan resmi yine SPI ile ekranda basmak. Bunun için kullandığım örnek kod ise;
#include        "__SPIT6963C.h"

sbit Mmc_Chip_Select           at RC2_bit;
sbit Mmc_Chip_Select_Direction at TRISC2_bit;



sbit  SPExpanderRST at RC0_bit;
sbit  SPExpanderCS  at RC1_bit;
sbit  SPExpanderRST_Direction at TRISC0_bit;
sbit  SPExpanderCS_Direction  at TRISC1_bit;


unsigned char SectorData[512];       
unsigned char data_for_registers[16]; 
unsigned char veri[5];

void main() {
  unsigned int i, SectorNo;
  char         mmc_error;
  bit          data_ok;
  int          sayac=0,durum = 0;

  ADCON1 |= 0x0F;              
  CMCON  |= 7;                   
  
  UART1_Init(19200);
  Delay_ms(10);
  SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

  SPI_T6963C_Config(240, 128, 8, 0, 2, 1, 0, 4);
  mmc_error = Mmc_Init();

  mmc_error = Mmc_Read_Sector(SectorNo, SectorData);
  if(mmc_error == 0) {
  SPI_T6963C_graphics(1);
    for(i=0; i<5; i++) {
      veri[i] = SectorData[i];
      switch(veri[i]){
                      case 0: SPI_T6963C_sprite(75, 0, 0xF, 4, 1);break;
                      case 1: SPI_T6963C_sprite(75, 0, 0x1, 4, 1);break;
                      case 2: SPI_T6963C_sprite(75, 0, 0x2, 4, 1);break;
                      case 3: SPI_T6963C_sprite(75, 0, 0x3, 4, 1);break;
                      case 4: SPI_T6963C_sprite(75, 0, 0x4, 4, 1);break;
                      case 5: SPI_T6963C_sprite(75, 0, 0x5, 4, 1);break;
                      case 6: SPI_T6963C_sprite(75, 0, 0x6, 4, 1);break;
                      case 7: SPI_T6963C_sprite(75, 0, 0x7, 4, 1);break;
                      case 8: SPI_T6963C_sprite(75, 0, 0x8, 4, 1);break;
                      case 9: SPI_T6963C_sprite(75, 0, 0x9, 4, 1);break;
                      case 'A': SPI_T6963C_sprite(75, 0, 0xA, 4, 1);break;
                      case 'B': SPI_T6963C_sprite(75, 0, 0xB, 4, 1);break;
                      case 'C': SPI_T6963C_sprite(75, 0, 0xC, 4, 1);break;
                      case 'D': SPI_T6963C_sprite(75, 0, 0xD, 4, 1);break;
                      case 'E': SPI_T6963C_sprite(75, 0, 0xE, 4, 1);break;
                      case 'F': SPI_T6963C_sprite(75, 0, 0xF, 4, 1);break;
                      }
         break;
        }
      }

}


programın bu aşamada çalışmadığını biliyorum. Ancak buraya kadar getirebildim durumu. Aslında amacım, alınan her bilgiyi tek tek okuyup (0xAF verisi 1satır 8sütunluk resmi ifade ediyor) son 2 değerine göre ekrana resim olarak bastırmaktı ancak başarılı olamadım. Bunun haricinde MMC' den okuduğum tüm veriyi "veri" adında bir diziye atıp sonradan bu diziyi bastırmayı düşündüm ancak bunu yapınca da "Illegal pointer conversion to double" hatasını aldım. Veri değişkenini pointer olarak da tanımlamayı denedim ancak sonuç alamadım. Yani anlayacağınız, elim kolum bağlı bir haldeyim :/ Çalışmamla ilgili ekran görüntümü de paylaşayım, umarım bana yardımcı olabilirsiniz. Şimdiden teşekkürler...


uuRAbi

Konu hakkında kimsenin bilgisi yok mu arkadaşlar ?
Yoksa yapmak istediğimi anlaşılır olarak mı anlatamadım ?

emrez

selam,
bu kod kütüphanesi işleyisi hakkında bilgim yok ancak manuel olarak hlcd ye initalize sonrası sd karttan okuduğu 5 tane veriye göre ilgili veriyi gönderip bir dene bakalım.
örnek ilk karakter 1 ise  SPI_T6963C_sprite(75, 0, 0x1, 4, 1); gibi.
çalışmaları yaptığın çipin devre bağlantısı doğrumu bir çok kontrol gerekecektir, sadece 5 veri ekrana gönderip test etmek istiyorsun kodlardan anlaşılan, ben hata ayıklama için her işlem adımından sonra sonucunu uart ile takip ediyorum, örnek
spi init ok
sram init ok
fat 32 fail gibi. koşula göre istediğim iş yapılmışmı takip ediyorum.