Parmak izi sensörüyle SPI haberleşmesinde yardım lütfen

Başlatan Eren Eraslan, 12 Aralık 2012, 21:46:31

Eren Eraslan

Merhabalar elimde FingerPrint markalı FPC2020 çipli parmak izi sensörü var ve birtakım şeyleri kullanamadım..
Öncelikle bu sensörün datasheeti : http://www.hstnet.com.tw/component/710-FPC2020Q_E_Product%20specification.pdf
ve geliştirme kartı datasheet i : http://www.produktinfo.conrad.com/datenblaetter/500000-524999/503773-an-01-en-FINGERPRINT_SENS_ENTWICKL_FPC_AMD3.pdf

aslında mantığı çok basit fakat yazılımda mı donanımdamı sorun var anlamadım.. anlatmaya başlıyorum.. olay tamamen spi haberleşmesi ..
pic master sensör slave oluyor. datasheete göre önce 6 adet komut byte ları gönderiyoruz chip datsheet sayfa 9 da ardından sensörden veri okumayı bekliyoruz eğer 0x02 gelirse sensörden , parmak okumaya hazır olduğunu anlıyoruz..
şimdi elimde debugger olmadığı için bazı debug olaylarını kendimce çözmeye çalıştım mesela spi ile aldığım dataları mcp2200 ile uarttan usb ye çevirerek konsoldan görmek istiyorum..devre hazır devre mcp kısmında sorun olamaz çünkü daha önce kullandım.. sorun şu spi ile veri gönderiyorum ama karşıdan hiçbir data gelmiyor.. data gelmediği için ekranda sürekli 0 okuyorum..



Asıl algoritma çip datasheetin 10. sayfasında 5.4 SPI Timing Requirements başlığı altında .. o algoritmaya göre kod yazdım fakat ne gelen var ne giden..

yazdığım kodda e0 pinindeki butona bastığımda bütün işlemleri yapması
#include <16f877.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPUT                    //No Power Up Timer

#FUSES NODEBUG                  //No Debug mode for ICD

#FUSES NOWRT                    //Program memory not write protected
#use delay(clock=20000000)



#use fast_io(e)  
#use fast_io(c)


#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#define CS PIN_C0
#include <input.c>
int x,y,z,a,b,c,d,e;
 
void main()
{
setup_spi(spi_master| spi_L_to_H | spi_clk_div_4);
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_e(0b00000001); //B portu çýkýþ olarak tanýmlanýyor
set_tris_c (0b00000000); //B portu çýkýþ olarak tanýmlanýyor
output_e(0b00000000);
  output_high(cs);
while(1)
{

output_low(cs);         // Entegre seçiliyor
 
 
 if(input(pin_e0)==0)
 { 
 
 
         spi_write(0x02);        // Okuma komutu (READ) gönderiliyor
                     // Gecikme veriliyor
         spi_write(0x00);  // Okunacak adres deðerinin 8 bitlik MSB deðeri gönderiliyor
                     // Gecikme veriliyor
         spi_write(0x00);   // Okunacak adres deðerinin 8 bitlik LSB deðeri gönderiliyor
                    // Gecikme veriliyor
         spi_write(0xD2);   // Okunacak adres deðerinin 8 bitlik LSB deðeri gönderiliyor
                    // Gecikme veriliyor  
         spi_write(0x00);        // Okuma komutu (READ) gönderiliyor
                     // Gecikme veriliyor
         spi_write(0x00);  // Okunacak adres deðerinin 8 bitlik MSB deðeri gönderiliyor
                     // Gecikme veriliyor
        
     delay_ms(5);
     
    printf("gonderildiiii");
    etiket:
    spi_write(0x52);
    
    b=spi_read();
    printf("b=%d",b);
     if(b==0x02)  
   {    
a=spi_read();
x=spi_read();
y=spi_read();
z=spi_read();
printf("\r\nResponse = %d  %d  %d  %d ",a,x,y,z);
   }
   else 
   {
   
   delay_ms(1);
   
   goto etiket;
   }
 }
   
fakat çalışmıyor.. Çıktı olarak " Response = 02   08   00   00 "" almam gerek ( geliştirme kartı datasheeti sayfa 5 figür 3 )

Kodu derliyo
sensör 3.3v ile çalışıyor aradaki level farkını gerilim bölücü devre yaparaktan çözmeye çalıştım bağlantılar tam.. donanımda pek hata olduğunu düşünmüyorum ama herşey olabilir
donanım resimlerini daha sonra paylaşıcam lütfen yardım edin
iyi akşamlar
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

sadogan

 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
(SPI_L_TO_H)
(SPI_H_TO_L)
(SPI_H_TO_L | SPI_XMIT_L_TO_H)

SPI ın diger modlarını deneyebilirmisin.
test ederken bu satırı kaldırıp test etmek gerekebilir. #use fast_io(c) .