[Microchip]/PIC322011. 3. 13. 00:52

[PIC32-SM EVM] W5100을 이용한 USB 메모리스틱 웹서버 테스트

[PIC32-SM EVM] W5100을 이용한 USB 메모리스틱 웹서버 테스트


PIC32의 강점은 저렴하면서도 고성능의 USB호스트 기능이 있기 때문에 웹서버 어플리케이션에 사용하기에 좋다.  웹페이지를 USB메모리 스틱에 저장하기 때문에 페이지 업데이트와 같은 관리가 편리하고 범용성이 좋다. 뿐만아니라 고용량 이기 때문에 웹페이지 제작시 메모리 문제 없이 작성할 수 있다.
물론 고용량 데이터를 처리하기 위해 PIC32의 PMP기능을 이용하여 이더넷 속도를 좀 더 올릴 필요가 있다.

간단히 웹페이지 몇개와 이미지를 이용하여 웹서버를 테스트 해 보았다.
메인페이지



PIC32 보드 LED테스트 페이지



PIC32 USB메모리스틱을 이용한 웹서버 테스트 동영상

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC322011. 3. 13. 00:46

[PIC32-SM EVM] W5100을 TCP서버 전송속도 테스트 - SPI모드

[PIC32-SM EVM] W5100을 TCP서버 전송속도 테스트 - SPI모드


PIC32를 이용하여 W5100 이더넷 테스트를 해 보았다. PIC32는 저렴하지만 W5100을 빠르게 제어할 수 있는 PMP기능과 USB호스트가 있기 때문에 웹서버 어플리케이션에 적용하기 좋을것 같다.

일단 W5100 을 테스트하기 위해 간단히 연결할 수 있는 SPI방식으로 [NET-EVM]보드에테스트 했다.
W5100제어를 위한 드라이버 코드는 아래와 같다.
//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     LATG
#define W5100_CS_BIT     BIT9

#define W5100_IO_INIT()     (TRISGbits.TRISG9 = 0)
#define IINCHIP_CSoff()     Cbi(W5100_CS_PORT, W5100_CS_BIT)
#define IINCHIP_CSon()     Sbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_SPI_INIT()    SPI0_Init()
#define IINCHIP_SpiSendData    SPI0_WriteReadByte
#define IINCHIP_SpiRecvData    SPI0_WriteReadByte
//-----------------------------------------------------------------------------


[NET-EVM] 보드에 W5100 -S EVM보드를 연결



SPI로 이더넷 전송속도 테스트 결과 660kBps정도 나온다. W5100의 SPI최대 속도가 아닐까... 간단한 테스트하기는 문제 없을것 같다.
Posted by nexp
TAG PIC32, W5100

댓글을 달아 주세요

[Microchip]/PIC322011. 3. 12. 22:05

[PIC32-SM EVM] SPI 테스트 - 가속도 센서 테스트

[PIC32-SM EVM] SPI 테스트


PIC32의 SPI는 최대 25Mhz로 동작하며 8, 16, 32비트로 설정가능하다.
[PIC32-SM EVM] 보드에는 SPI핀이 SPI2 RG6(SCLK), RG7(MISO), RG8(MOSI)에 할당되어 있다.

PIC32 블록도



PIC32 SPI초기화
void SPI0_Init(void)
{
 SPI2CONbits.ON  = 1;  // Enable 
 SPI2CONbits.FRZ  = 0;
 SPI2CONbits.SIDL  = 0;
 SPI2CONbits.DISSDO = 0;
 SPI2CONbits.MODE32  = 0;
 SPI2CONbits.MODE16 = 0;  //8비트 모드

//SPI 모드 설정
 SPI2CONbits.SMP  = 0;  //위상 설정
 SPI2CONbits.CKE  = 1;  // 0: Idle에서 active로 갈 때 data transaction 1: 반대
 SPI2CONbits.SSEN = 1;  // Slave select enable
 SPI2CONbits.CKP  = 0;  // 0: active high 1: 반대
 SPI2CONbits.MSTEN = 1;
 
 SPI2STATbits.SPIROV = 0;  //수신 오버플로우 초기화

 SPI0_SetSpeed(SPI_SPEED_4MHZ);
}

SPICON 레지스터




SPI모드 설정



PIC32 SPI클럭 설정



PIC32 SPI데이터 송수신 드라이버 함수 작성
SUINT SPI0_WriteReadByte(SUINT Data)
{
 //SPI포트로 데이터 출력
 SPI2BUF = Data;                   
 while( !SPI2STATbits.SPIRBF); // 전송대기

 //데이터 수신
 return SPI2BUF;
}



가속도 센서 테스트 드라이버
NET-EVM 보드의 가속도 센서는 SPI0, CS ->RB13에 연결되어 있으므로 아래와 같이 드라이버 코드를 작성할 수 있다.
#define _SPI0_ENABLE    1

//-----------------------------------------------------------------------------
// myAccel3LV02 HAL
#define MY_ACCEL3LV02_SPI_MODE   1
#define MY_ACCEL3LV02_I2C_MODE   0

#define ACCEL_CS_BIT     BIT13
#define ACCEL_CS_PORT     LATB
#define ACCEL_CS_INIT()    (TRISBbits.TRISB13 = 0)
          
#define ACCEL_CS_ASSERT()    Cbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_CS_DEASSERT()   Sbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_SPI_INIT()    SPI0_Init()
#define ACCEL_Read      SPI0_WriteReadByte
#define ACCEL_Write      SPI0_WriteReadByte
//-----------------------------------------------------------------------------

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC322010. 11. 29. 17:03

[PIC32-SM EVM] GLCD 7565 테스트

[PIC32-SM EVM] GLCD 7565 테스트



[NET-EVM] 보드에는 GLCD 모듈을 연결할 수 있다. 핀맵이 동일하므로 여러가지 모듈이 가능한데 일단 ST7565드라이버로 테스트 해보자. 회로는 아래와 같다.



테스트 예제 코드는 config 파일의 HAL부분만 수정하면 나머지 코드는 수정없이 사용 가능하다.
//-----------------------------------------------------------------------------
//glcd 7565 LCD driver hal
#define LCD_RDON()
#define LCD_RDOFF()

#define LCD_DAT      BIT8
#define LCD_DAT1()      Sbi(LATG, LCD_DAT)
#define LCD_DAT0()      Cbi(LATG, LCD_DAT)

#define LCD_DI      BIT15
#define LCD_RSON()     Sbi(LATB, LCD_DI) 
#define LCD_RSOFF()     Cbi(LATB, LCD_DI)

#define LCD_CLK      BIT6
#define LCD_CLKON()     Sbi(LATG, LCD_CLK)
#define LCD_CLKOFF()     Cbi(LATG, LCD_CLK)

#define LCD_CS1      BIT5
#define LCD_CS1ON()     Sbi(LATF, LCD_CS1) 
#define LCD_CS1OFF()    Cbi(LATF, LCD_CS1)

#define LCD_RST      
#define LCD_RST1()      //Sbi(LCD_PORT, LCD_RST)
#define LCD_RST0()      //Cbi(LCD_PORT, LCD_RST)

#define LCD_BL_BIT     BIT7
#define LCD_BL_PORT     LATD
#define LCD_BL_OFF()    Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()     Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define GLCD_PORT_INIT()   Cbi(TRISG, BIT6|BIT8);\
         Cbi(TRISF, BIT5);\
         Cbi(TRISB, BIT15);
//-----------------------------------------------------------------------------



int main()
{
    unsigned int cnt = 0;
   
 SystemInit(); 

 Led1Init();
 Led1On();
 
 //GLCD 초기화
 GlcdInit();

 //GLCD 데이터 출력
 GlcdClear();
 GlcdSetAddress(0,1);
 GlcdPutStr("PIC32-SM EVM Board");  
 GlcdSetAddress(0,3);
 GlcdPutStr("GLCD 7565 DRV"); 
 
 while(1)
 {
        Led1Toggle();
  
  Delay(200);
 }
 return 0;
} // main



Posted by nexp
TAG GLCD, PIC32, ST7565

댓글을 달아 주세요

  1. 비더탑

    관리자의 승인을 기다리고 있는 댓글입니다

    2013.10.15 18:32 [ ADDR : EDIT/ DEL : REPLY ]

[Microchip]/PIC322010. 11. 27. 21:33

[PIC32-SM EVM] TFT LCD (COM26T2844) 테스트 - AVR과 속도 비교

[PIC32-SM EVM] TFT LCD (COM26T2844)  테스트


[EXP-NET EVM] 보드는 W5100을 연결하여 이더넷 테스트를 하기 위한 보드로 제작 했는데 TFT LCD모듈도 연결하여 테스트 가능하다. PIC32의 속도를 좀더 테스트 해 보기 위해 테스트 자료정리를 좀 해 보았다.
추후 PIC32의 USB호스트 기능을 테스트 하거나 이더넷 테스트를 진행할 예정이다.


[EXP-NET EVM] 보드의 TFT LCD (COM26T2844)) 회로도




(한가지 아쉬운점이 있다면 RS신호를 RF4로 할당해야 하는데... 멀리 떨어져 있을뿐 아니라 16핀용 다른 MCU와 호환이 안된다. 다음에 화장보드 제작시에는 고려를 할 필요가 있을것 같다.)

TFT LCD Driver 코드
//-----------------------------------------------------------------------------
//LCD Driver
//-----------------------------------------------------------------------------
// TFT LCD(COM26T2844) Driver
#define TFT_DRV_COM44     1

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

#define LCD_RST_BIT      BIT6
#define LCD_RST_PORT     LATD
#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      BIT15
#define LCD_RS_PORT      LATB
#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      BIT4
#define LCD_WR_PORT      LATD
#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      BIT7
#define LCD_BL_PORT      LATD
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define TFTGpioInit()     Cbi(TRISE, 0xFF);\
          Cbi(TRISD, BIT4|BIT5|BIT6|BIT7);\
          Cbi(TRISF, BIT5);\
          Cbi(TRISB, BIT15);


PIC32-SM EVM TFT LCD테스트 동영상
거의 구분이 가지 않는다. 240x400 1프레임 그리는데 20ms정도 밖에 걸리지 않는다.  옵티마이즈와 오버 클럭하면 동영상도 가능할듯...



ATMega128 7.3728Mhz에서 TFT LCD테스트 동영상과 비교하면 차이가 많이 난다. 가격도 훨씬 더 저렴한 PIC32가 AVR과 성능 비교가 않될 정도 이다.


Posted by nexp

댓글을 달아 주세요