Giúp giao tiếp SPI MSP 430 với mắt thu hồng ngoại

nguyenlen07

Thành Viên PIF
Tình hình là mình đang lam cái điều khiển từ xa bằng Msp430. Mình dùng MSP 430 để nhận tín hiệu gửi từ đầu thu hồng ngoại qua chân P1.7,mình dùng giao tiếp SPI mà không được,mọi người xem code của mình xem có thiếu sót gì sao mình chạy mãi không được. Đoạn code này mình chỉ dùng để thử xem có nhận được tín hiệu từ mắt hồng ngạoi không nếu nhân đủ 12bit từ mắt hồng ngoại sẽ sáng led P1.0.


Code:
#include <msp430g2231.h>


void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 

  P1DIR |= 0x03;
  USICTL0 |= USIPE7 + USIPE5 + USIMST + USIOE; 
  USICTL1 |= USIIE;                       
  USICKCTL = USIDIV_2 + USISSEL_2;          
  USICTL0 &= ~USISWRST;                    
  USICNT = 12;                            
  _BIS_SR(LPM0_bits + GIE);             
}

// USI interrupt service routine
#pragma vector=USI_VECTOR
__interrupt void universal_serial_interface(void)
{
 P1OUT ^= BIT0;
  USICNT = 12;                              
}
 
Mắt hồng ngoại bạn dùng loại nào? Mức điện áp cung cấp là bao nhiêu? nếu đó là loại 5V mà bạn cấp 3.3V thì nó không chạy đâu....Bạn xem lại chổ đó một tí.....
 
Coi con này nè: [video]http://www.vishay.com/docs/82013/tsop12xx.pdf[/video] điện áp cung cấp nó từ 2.5-5.5V đấy, có thể phù hợp với mức điện áp hoạt động của Msp đấy
 
Và đây là cách mình đã dùng khá hiệu quả vơi mắt nhận hồng ngoại 5V(đính kèm) mạch chia áp xuống 3.3V dùng Transistor con NPN thay bằng A1015 cũng được (với Fc=80Mhz dư để đáp ứng với đoạn mã sóng hồng ngoại 38Khz)....mình không dùng SPI mà là Capture những cạnh lên cạnh xuống của chuổ xung hồng ngoại mà mắt nhận thu được và lưu vào buffer những khoảng thời gian ứng với mức chuyển cạnh đó......Rồi nếu chúng ta đã biết được hãng sx thì việc giải mã là dễ rồi(tìm thông tin mã hoá về romote của các hãng rồi giải mã thôi) còn đối với loại romote mà chẳng biết là của hãng nào thì việc này cũng không khó mấy, chúng ta cứ nhìn hết tất cả các giá trị lưu trong buffer của tất các nút nhấn, thì chắc chắn chúng ta sẽ phân biệt được ở đâu thì mã code của các phím sẽ khác nhau (nói chung thì khi mã hoá thường thì một đoạn mã gồm: Start--Command---Address) và thường thì chúng sẽ khác nhau ở Address.....và chúng ta sẽ dựa vào sự khác nhau đó mà giải mã ra phím thôi.
Đó là cách mình đã làm, nói chung hiệu quả đối với tất cả các loại romote....Bạn nghiên cứu theo cách này thử ha..../.

À quên: Cực B của A1015 được nối vào chân out 5V của Mắt nhận, và cực C(trong hình) hay cực E nếu dùng A1015 được nối vào chân capture của VDK
 
Bạn nói vậy là chưa đọc kỹ những gì mình ghi ở trên rồi.......đó là hướng chứ là gì nữa??? Bạn đọc lại và suy nghĩ thêm ha. (Từ khoá để làm điều này là dùng chức năng capture của timer ấy).

Thân!
 
Top