Cortex-M/EFM322013. 5. 4. 21:30

EFM32G210 EVM - 웹서버를 이용한 온습도 모니터링 예제

EFM32G210 EVM - 웹서버를 이용한 온습도 모니터링 예제

 

 

 

 

 

EFM32의 저전력 기능을 활용하기 위해 저전력으로  온습도 모니터링 가능한 임베디드 웹서버를 제작했다.

온도, 습도 센서는 STH10 온습도 센서 모듈을 이용하였다.

 

 

SHT10 온습도 센서 드라이버 소스

//-----------------------------------------------------------------------------
// SHT10 Sensor
#define SHT_DAT_BIT      BIT13
#define SHT_DAT_PORT     GPIOB

#define SHT_DATA_H()     sbi(SHT_DAT_PORT, SHT_DAT_BIT);
#define SHT_DATA_L()     cbi(SHT_DAT_PORT, SHT_DAT_BIT)

#define SHT_SCK_BIT      BIT14
#define SHT_SCK_PORT     GPIOB
#define SHT_DAT_DDR      DDRD 
#define SHT_DAT_READ()     ((pGPIO->P[1].DIN&SHT_DAT_BIT)?1:0)

#define SHT_SCK_H()      sbi(SHT_SCK_PORT, SHT_SCK_BIT);
#define SHT_SCK_L()      cbi(SHT_SCK_PORT, SHT_SCK_BIT)

#define SHT_PORT_INIT()     GPIO_PinModeSet(gpioPortB, 14, gpioModePushPull, 1);\
                                        GPIO_PinModeSet(gpioPortB, 13, gpioModeInputPull, 0)


#define OUT_MODE()      GPIO_PinModeSet(gpioPortB, 13, gpioModePushPull, 1)
#define IN_MODE()      GPIO_PinModeSet(gpioPortB, 13, gpioModeInputPull, 0)
#define _SHT_DELAY()     Delay_us(10);
//-----------------------------------------------------------------------------

 

 

 

EFM32 Embedded Webserver - Temperature and Humidity Web Monitoring 동영상

EFM32 웹서버에 접속하면 2초에 한번씩 온습도 데이터를 전송하는 테스트 이다. 인터넷이 연결되는 핸드폰이나 모바일 기기에서 온습도 모니터 가능하다.

 

 

 

 

EFM32 Webserver Test Page

웹서버 IP 로 접속하면 가장 최근의 온습도 데이터를 확인할 수 있다.

Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 5. 1. 23:00

EFM32G210 EVM - 저전력 Embedded Web Server 테스트

EFM32G210 EVM - 저전력 Embedded Web Server 테스트




EFM32G210의 장점으로 Cortex-M3코어(128k Flash/16k RAM)에 저전력으로 구동 된다. 소형에 저렴하면서 플래시와 램이 풍부해서 소형 임베디드 웹서버 제작하기에 좋을것 같다.


간단히하기 위해 내부 플레쉬메모리에 웹서버를 구현 해 보았다.




할당된 IP에 접속하면 출력될 Web Page

간단한 이미지와 입출력 제어를 위한 CGI코드로 구성되어 있다.




EFM32 Web Server 테스트 동영상


Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 5. 1. 22:46

EFM32G210 EVM - W5200을 이용한 TCP/IP 전송 속도 테스트

EFM32G210 EVM - W5200을 이용한 TCP/IP 전송 속도 테스트



[XMega-EX EVM] 확장 테스트 보드를 이용하면 W5200모듈을 연결하여 이더넷 테스트가 가능하다.



EFM32G210 EVM W5200 TCP/IP 모듈 드라이버 코드

//-----------------------------------------------------------------------------

// W5100 HAL

#define W5100_CS_PORT GPIOA

#define W5100_CS_BIT BIT0


#define W5100_RST_PORT GPIOA

#define W5100_RST_BIT BIT1



#define W5100_IO_INIT() GPIO_PinModeSet(gpioPortA, 0, gpioModePushPull, 1);\

                                        GPIO_PinModeSet(gpioPortA, 1, gpioModePushPull, 1);\

                                        IINCHIP_CSon();


#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();IINCHIP_SPI_SPEED();

#define IINCHIP_SpiSendData SPI0_WriteReadByte

#define IINCHIP_SpiRecvData SPI0_WriteReadByte

#define IINCHIP_SPI_SPEED()            MMC_SPISpeed(SPI_SPEED_MAX) 


#define IINCHIP_RSToff() cbi(W5100_RST_PORT, W5100_RST_BIT)

#define IINCHIP_RSTon() sbi(W5100_RST_PORT, W5100_RST_BIT)

//-----------------------------------------------------------------------------




EFM32를 이용하여 TCP/IP 전송율 테스트 결과 1.4Mbps 이다. EFM32 의 최대 SPI 클럭속도가 1.4Mhz인 것을 생각하면 그리 빠르지는 않은듯...

저전력 웹서버 만들면 좋을것 같다.


Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 5. 1. 20:30

EFM32G210 EVM - SD Card 이용한 MP3 Player Test

EFM32G210 EVM - SD Card 이용한 MP3 Player Test




지금까지 테스트한 코드를 이용하여 EFM32의 좀더 다양한 기능을 테스트 해 보자.

VS1053 MP3 모듈을 이용하여 MP3 Player를 만들어 보면 좋을것 같다.


S-Type EVM 을 테스트 할수 있는 [XMega32-EX] 확장 보드를 이용하면 SD Card가 포함된 VS1053 MP3모듈을 연결할 수 있다.

오디오 출력은 15W 출력 Class-D AMP(TPA3110)모듈을 이용하여 음질이 좋다.



테스트 결과 SD Card의 MP3파일 출력시 35mA 소비된다. 확실히 다른 Cortex-M3 코어 제품보다 적게 소비하는것 같다.



EFM32 MP3 Player 테스트 동영상

SD Card의 MP3파일을 순차적으로 출력하고 EFM32G210 EVM보드에 연결된 스위치를 누르면 다음곡을 선택할수 있도록 했다.  TFT-LCD에 플레이되는 곡목록을 출력한다. 추가적으로 VR을 이용하여 볼륨을 조절하고 좀더 소형화 하면 MP3플레이어가 될수 있다.



Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 5. 1. 20:30

EFM32G210 EVM - ADC 테스트 (Potentiometer 값을 TFT LCD 그래프로 표시하기)

EFM32G210 EVM - ADC 테스트 (Potentiometer 값을 TFT LCD 그래프로 표시하기)



EFM32G210은 8개의 12bit ADC포트가 있고 1개의 온도센서가 내장되어 있다. 

EFM32 ADC의 특징은 아래와 같다.

Ultra low power precision analog peripherals

 - 12-bit 1M samples/s Analog to Digital Converter

 - 4 single ended channels/2 differential channels

 - On-chip temperature sensor

 - Conversion tailgating for predictable latency



EFM32 ADC 블록도

 

 

 

EFM32G210f128 ADC 핀맵



EFM32 ADC 테스트 동영상

EFM32에 연결된 가변저항(Potentiometer) 값을 TFT LCD의 그래프로 표시하는 예제





EFM32 ADC 초기화 함수

void AdcInit(unsigned int Channel)

{

  ADC_Init_TypeDef init = ADC_INIT_DEFAULT;

  ADC_InitSingle_TypeDef singleInit = ADC_INITSINGLE_DEFAULT;

SYSTEM_ChipRevision_TypeDef chipRev;

/* ADC errata for rev B when using VDD as reference, need to multiply */

/* result by 2 */

SYSTEM_ChipRevisionGet(&chipRev);

if ((chipRev.major == 1) && (chipRev.minor == 1))

{

errataShift = 1;

}

  

CMU_ClockEnable(cmuClock_ADC0, true);

/* Init common issues for both single conversion and scan mode */

init.timebase = ADC_TimebaseCalc(0);

/* Might as well finish conversion as quickly as possibly since polling */

/* for completion. */

init.prescale = ADC_PrescaleCalc(7000000, 0);

/* WARMUPMODE must be set to Normal according to ref manual before */

/* entering EM2. In this example, the warmup time is not a big problem */

/* due to relatively infrequent polling. Leave at default NORMAL, */

ADC_Init(ADC0, &init);


/* Init for single conversion use. */

singleInit.reference = adcRefVDD;

singleInit.input = Channel; /* According to DVK HW design */

singleInit.resolution = adcRes8Bit; /* Use at least 8 bit since unlinear voltage */

ADC_InitSingle(ADC0, &singleInit);

}




EFM32 ADC Read 함수

//Read ADC Value

unsigned int AdcRead(unsigned char port)

{

    ADC_IntClear(ADC0, ADC_IF_SINGLE);

    ADC_Start(ADC0, adcStartSingle);


    /* Wait for completion */

    while (!(ADC_IntGet(ADC0) & ADC_IF_SINGLE));

    return ADC_DataSingleGet(ADC0) << errataShift;

}



Posted by nexp

댓글을 달아 주세요