[MSP430]/MSP430F5x2012.04.10 23:00

[MSP430F5510] 구매처

저전력에 저렴하 USB칩셋으로 MSP430F5510이 좋다.

디지키에 저렴하게 판매하고 있다. 100개만 되어도 2천원대 이다.

 

동작전압이 1.8~3.3V 이므로 밧데리 구동 가능하고, 무엇보다도 동작 온도가 -40 ~ 85도 이므로 온습도 로거 제작에 좋을것 같다.

 

 http://www.digikey.kr/product-detail/ko/MSP430F5510IPT/296-28189-5-ND/2522329

 

 

 

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011.11.27 23:00

[MSP430F5510 EVM] USB Keyboard 테스트

[MSP430F5510 EVM] USB Keyboard 테스트


MP430F5510은 저렴하고 저전력인 MSP430코어이다.  USB기능이 있고 소형(48Pin QFN)이기 때문에 밧데리로 구동하는 간단한 HID장치나 USB Keyboard, USB Mouse 장치를 만들기에 좋다.

[MSP430F5510 EVM] 보드를 이용하여 USB Keyboard 테스트해 보았다. 소스코드도 기존 예제에 쉽게 포팅 할 수 있도록 수정해서 정리 해 보았다.





[MSP430F5510 EVM]  USB Keyboard 테스트 동영상
USB Keynoard 테스를 위해 간단히 Up, Down, Left, Right Key를 에뮬레이션 하여 뷰어 할때 편리한 USB 장치를 만들어 보았다.





MSP430F5510 USB Keyboard 테스트 예제 소스코드
void main(void)
{
    //UART 초기화
 DebugInit(BAUD_115200);
 DebugPrint("MSP430F5510 USB Test\r");
   
    //MSP430 USB초기화
    Msp430UsbInit();

    Led1Init();
    Led1On();
   
    //Key 초기화
    INIT_KEY_IO();
   
 // Enable interrupts
    enable();

   //USB가 연결되어 있으면 이벤트 발생하여 재연결
    if (USB_connectionInfo() & kUSB_vbusPresent)USB_handleVbusOnEvent();
    
  
   while(1)
  {
     //USB 처리
     ProcessUSB();
  }
}



USB 처리 함수
void ProcessUSB(void)
{
     switch(USB_connectionState())
      {
         case (ST_USB_DISCONNECTED | ST_NOENUM_SUSPENDED):
               __bis_SR_register(LPM3_bits + GIE);  // Enter LPM3 w/interrupt.  Nothing for us to do while disconnected. 
               break;
             
         case ST_USB_CONNECTED_NO_ENUM:
              break;
             
         case ST_ENUM_ACTIVE:
          
              __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0 w/interrupt, until a keypress occurs
             //Key처리 
             PorcessKeyboad();        
              }
              break; 
             
         case ST_ENUM_SUSPENDED:
              __bis_SR_register(LPM3_bits + GIE);  // Enter LPM3 w/interrupt.  Nothing for us to do while 
              break;                                // suspended.  (Remote wakeup isn't enabled in this example.)
             
         case ST_ENUM_IN_PROGRESS:
              break;
             
         case ST_ERROR:
              break;
             
         default:;
      }
}



Keyboard 인터럽트 처리 핸들러
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR(void)
{
    WORD i;
    unsigned char key_val = 0;
 
    if(P1IFG)
    {
        key_val = ~P1IN;
        Delay(30);   // Cheap debounce. 

        report[0] = 0;
        report[1] = 0;       
        switch(key_val)
        {
        case 1:
            report[2] = usbUsageLeftArrow;
            break;
           
        case 2:
            report[2] = usbUsageRightArrow;
            break;
           
        case 4:
            report[2] = usbUsageUpArrow;
            break;
           
        case 8:
            report[2] = usbUsageDownArrow;
            break;   
           
        case 0x10:
            report[2] = usbUsageA;
            break; 

        case 0x20:
            report[2] = usbUsageB;
            break;
           
        case 0x40:
            report[2] = usbUsageN;
            report[3] = usbUsageE;
            report[4] = usbUsageX;           
            report[5] = usbUsageP;           
            report[6] = usbUsageEnter;
            break; 

        case 0x80:
            report[2] = usbUsageEnter;
            break;             
           
        }
       
        buttonPressed = TRUE;
        __bic_SR_register_on_exit(LPM3_bits);  // Wake main from LPMx       
        P1IFG = 0;
    } 
}
Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011.11.27 21:00

[MSP430F5510 EVM] ADC 테스트

[MSP430F5510 EVM] ADC 테스트




MSP430F55x 으로 오면서 몇가지 페리들이 변경되었는데.. ADC도 약간의 레지스터 및 기능상 변화가 있었다.


MSP430F55xx ADC구조




MSP430F5510 ADC 초기화 코드
//ADC Initialize
void AdcInit(void)
{
  // Configure ADC10 - Pulse sample mode; ADC10SC trigger
  ADC10CTL0 = ADC10SHT_2 + ADC10ON;         // 16 ADC10CLKs; ADC ON
  ADC10CTL1 = ADC10SHP + ADC10CONSEQ_0;     // s/w trig, single ch/conv
  ADC10CTL2 = ADC10RES;                     // 10-bit conversion results
  ADC10MCTL0 = ADC10SREF_1 + ADC10INCH_0;  // AVcc/2 
 
  // Configure internal reference
  while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT
  REFCTL0 |= REFVSEL_0+REFON;               // Select internal ref = 1.5V
}



MSP430F5510 ADC Read함수
//Read ADC Value
unsigned int AdcRead(unsigned char port)
{
 unsigned int value = 0;
 
    ADC10MCTL0 = ADC10SREF_1 + (ADC10INCH_0 + port);  // AVcc/2 
 
 
    ADC10CTL0 |= ADC10ENC + ADC10SC;        // Sampling and conversion start
    while (ADC10CTL1 & ADC10BUSY);
   
    value = ADC10MEM0;

 return value;
}



MSP430F5510 ADC테스트 예제 소스코드
[EXP_DSP EVM] 확장 보드에 연결되어 있는 VR을 이용하여 MSP430의 10bit ADC출력 값을 시리얼 포트로 출력 하는 예제이다.
void main(void)
{
    unsigned int adc = 0;
    SystemInit();
   
    Led1Init();
    Led1On();

   //Serial Init
   DebugInit(BAUD_115200);
   DebugPrint("Serial Test Program.\r\n");
   
    //Init ADC
    AdcInit();
    
      while(1)
    {
        adc = AdcRead(0);
        DebugPrint("adc=%d\r\n", adc);

        Led1Toggle();
        Delay(300);
    }
}

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011.11.26 22:00

[MSP430F55XX EVM] TFT LCD출력 테스트

[MSP430F55XX EVM] TFT LCD출력 테스트



한프레임 출력하는데 70ms정도 나온다
MSP430F5x의 최대 클럭(33Mhz)으로 설정시 48ms로 예전 버전의 MSP430보다 상당히 빨라졌다.



MSP430F5510 TFT LCD 출력 테스트 동영상
드라이버 코드만 수정하면 쉽게 테스트 가능하므로 간단히 SD Card의 BMP파일을 FTF LCD에 출력하는 테스트를 진행해 보았다.





MSP430F5529 EVM보드의 핀맵






MSP430F5529 TFT LCD 출력 드라이버 코드



//-----------------------------------------------------------------------------
//TFT LCD

#define LCD_LAT_BIT      BIT5
#define LCD_LAT_PORT     PORT3
#define LCD_LAT_ON()     Sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF()     Cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT5
#define LCD_EN_PORT      PORT7
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      BIT2
#define LCD_RST_PORT     PORT7
#define LCD_RST_ON()     Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT3
#define LCD_RS_PORT      PORT7
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT1
#define LCD_WR_PORT      PORT8
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      //BIT5
#define LCD_RD_PORT      //LATD
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      PORT7
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    PORT1=Data;PORT2=(Data>>8)


#define TFTGpioInit()     P1DIR=0xFF;P2DIR=0xFF;\
                                        Sbi(P7DIR, BIT2|BIT3|BIT4|BIT5);\
                                        Sbi(P8DIR, BIT1)   
//-----------------------------------------------------------------------------





MSP430F5529 SD Card 드라이버 코드
SD Card의 CS는 [LCD_EXP EVM] 보드의 MA_29번핀(/CS0)에 연결되어 있다.


#define _SPI1_ENABLE     1

//-----------------------------------------------------------------------------
// SD Card HAL
#define MMC_CS_PORT      PORT8
#define MMC_CS_BIT      BIT2

#define MMC_CS_INIT()     Sbi(P8DIR, MMC_CS_BIT);\
          MMC_CS_HIGH()
          
          
#define MMC_CS_HIGH()     Sbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_CS_LOW()     Cbi(MMC_CS_PORT, MMC_CS_BIT)

#define MMC_ASSERT_INIT()    MMC_CS_INIT();MMC_CS_HIGH()
#define MMC_ASSERT()     MMC_CS_LOW()
#define MMC_DEASSERT()     MMC_CS_HIGH()


#define MMC_SpiInit()     SPI1_Init()
#define MMC_SendByte     SPI1_WriteReadByte
#define MMC_Send(Data)      SPI1_WriteByte(Data)
#define MMC_Recv()      SPI1_WriteReadByte(0xFF)
#define MMC_RecvP(Data)     MMC_Send(0xFF); (*(Data)=SPI1_ReadByte())
#define MMC_SPISpeed     SPI1_SetSpeed

#define SPI_Mode3()
//-----------------------------------------------------------------------------



Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011.11.26 18:00

[MSP430F5529 EVM] W5200/W5100 TCP/IP loopback 전송 속도 테스트

[MSP430F5529 EVM] W5200/W5100 TCP/IP loopback 전송 속도 테스트



[MSP430F5529 EVM] 을 이용하여 TCP/IP loopbak 전송 속도를 테스트 해 보았다.
MSP430F5x 의 경우 클럭이 최대 32Mhz이고 SPI클럭 속도 설정을 자유롭게 설정 가능하기 때문에 SPI클럭 속도에서 유리한 점이 있다.

메인 클럭을 32Mhz로 설정하고 SPI클럭을 16Mhz로 설정하여 테스트한 결과 2.2Mbps 정도의 전송 속도가 나온다.
다른 MCU의 TCP/IP 전송 속도 테스트 결과 와비교 했을때 나쁘지 않다.

-----------------------------------------------------------
[8] iInChip Send: 2.2657 Mbps(3880723 bytes, 13.0676 sec)
iInChip Recv: 2.1496 Mbps(3880723 bytes, 13.7736 sec)
------------------------------------------------------------
[9] iInChip Send: 2.1323 Mbps(3880723 bytes, 13.8855 sec)
iInChip Recv: 2.2160 Mbps(3880723 bytes, 13.3608 sec)
-------------------------------------------------------




Posted by nexp

댓글을 달아 주세요