adStart - 소프트웨어 리셋 테스트

[MCU]/adStar | 2015.01.22 23:11
Posted by nexp

adStart - 소프트웨어 리셋


소프트웨어 리셋방법에 여러가지가 있겠지만 간단하게 아래와 같이 구현 했다. 동작은 잘 한다.

void (*ResettFunc)();


int main()

{

ResetFunc = main;



  if(GetKey())

 {

ResetFunc();

 } 


:


}


adStar Internet Radio 테스트 (Web Radio)

[MCU]/adStar | 2013.08.18 02:59
Posted by nexp

adStar Internet Radio 테스트 (Web Radio)




adStar의 가장큰 장점은 칩내부에 16MB의 SDRAM이 내장되어 있어 대량 메모리가 필요한 곳에 아주 유용하다. 

특히 인터넷 라디오와 같이 스트림 데이터는 네트웍 상황에 따라 전송율이 변화기 때문에 메모리를 이용해 버퍼링이 필요하다. 

adStar의 SDRAM을 이용하여 버퍼링 하는 예제로 인터넷 라디오를 제작 해 보았다.


보드는 기존 이더넷(W5100), MP3(VS1053), MCU(adStar)모듈들을 재활용 할 수 있는 확장 테스트 보드를 이용했다. 이더넷은 W5100을 이용하여 고속의 이더넷 전송이 가능하도록 했다. 물론 STM32와 같은 Cortex-M3를 사용해도 되지만 버퍼링을 확실히 할수 있는 메모리를 갖추고 저렴하면서 소형인 adStar를 이용하기로 했다. 테스트 결과 최장 15분정도의 버퍼링도 가능했다.




인터넷 라디오는 ICY프로토콜을 이용한다. Shoutcast Server 에 접속하여 HTTP프로토콜을 이용해 Request를 보내면 그에 따른 응답이 오고 이후 MP3데이터를 수신할 수 있다. 예를 들어 URL (sc03.saycast.com)에 접쇽하려면 우선 DNS에 접속하여 IP와 포트번호를  알아낸다. IP 를 알아 냈다면 TCP로 접속한 후 GET 명령을 보내면 서버에서 이에 따른 응답이 온다.



Request 메시지

아래와 같이 GET메지지를 전송하면 응답 메시지가 날아온다. 사실 "GET / HTTP/1.0"  "Host : ip" 만 보내면 된다.

GET sc03.saycast.com HTTP/1.0
User-Agent: GOMA mpg123/1.15.1
Host: 211.43.215.141
Accept:audio/mpeg, audio/x-mpeg, audio/mp3, audio/x-mp3, audio/mpeg3, audio/x-mpeg3, audio/mpg, audio/x-mpg, audio/x-mpegaudio, application/octet-stream, audio/mpegurl, audio/mpeg-url, audio/x-mpegurl, audio/x-scpls, audio/scpls, application/pls, application/x-scpls, */*
Icy-MetaData: 1

Connection: close




응답 메시지

"ICY 200  OK"가 전송되면 정상적으로 접속이 된것이고 이후에 MP3데이터가 출력된다. 물론 곡 정보나 전송률등의 메타데이터도 함께 전송된다.

ICY 200 OK
content-type:audio/mpeg
icy-br:128
icy-genre:뮤직카페
icy-metaint:16384
icy-name:《 М 4 Ц 》 ‥ ───‥ http://m4ucast.co.kr ⌒∇⌒γ
icy-notice1:<BR>This stream requires <a href="http://www.saycast.com/">SayRadio</a><BR>
icy-notice2:SayCast Distributed Network Audio Server/Linux v2.0.0<BR>
icy-pub:1

icy-url:http://saycast.sayclub.com/saycast/gateway/winamp?domainid=m4u




MP3데이터를 받으면 VS1053의 데이터 버퍼에 쓰면 되는데 인터넷 속도에 따라 버퍼링이 필요하기 때문에 adStar의 SDAM을 이용해 저장하고 적절한 버퍼링이 되면 출력 하도록 했다.


SDRAM에 메모리 할당

#define RINGBUFFER_SIZE (4096*1024)


//SDRAM에 버퍼 메모리 할당

m_RxBuffer.buffer = malloc(RINGBUFFER_SIZE);




수신된 internet radio MP3 데이터 처리

//수신되 데이터 링버퍼에 저장

void Copy_to_StreamBuffer(u16 len, u8 *tmp_buffer)

{

u16 i;


for ( i = 0; i < len; i++)

{

SetRingBuffer(&m_RxBuffer, tmp_buffer[i]);

}

}


//저장된 MP3 데이터 출력 함수

void Push_to_VS1053(void)

{

u32 remain_bytes;

remain_bytes = GetDataSize(&m_RxBuffer);


if(remain_bytes == 0)

{

Enable_Play = 0;

}

        else if (remain_bytes > BUFFERING_SIZE)

                // buffering

Enable_Play = 1;

}

        //데이터 출력

if (Enable_Play == 1)

{

if(IsVs1053DataReady())

{

VS_WriteData(GetRingBuffer(&m_RxBuffer));

}

}

:

}






테스트 동영상

간단한 인터넷 라디오를 제작하기 위해 우선 몇개의 인터넷 라디오 사이트를 저장해 두고 스위치를 누름에 따라 각각의 서버에 접속해 라디오를 출력하는 예제를 작성해 보았다.







 

인터넷 라디오 TCP 처리 함수

인터넷 라디오의 이더넷 처리 부분은 아래와 같이 구현이 가능하다.

void ProcessiRadio(unsigned int sock, unsigned int port)

{

int len;

u8 tmp_buffer[MAX_BUF_SIZE];

switch (getSn_SR(sock))

{

case SOCK_ESTABLISHED:

//데이터 수신 검사

if (state == -1)

{

//Request 전송

SendProbe();

state = 0;

}

else if (state == 0)

{

//HTTP Request 전송

SendRequest();

DebugPrint("\r\nSend HTTP request\r\n");


state = 1;

}

else if (state == 1)

{

//응답 메시지 분석

if (ParseReply(sock) > 0) 

{

state = 2;

}

}

else if (state == 2)

{

//MP3 데이터 버퍼링

if ((len = getSn_RX_RSR(sock)) > 0) 

{

len = recv(sock, tmp_buffer, len);

Copy_to_StreamBuffer(len, tmp_buffer);

gTotalWriteCount += len;

}

}

break;

case SOCK_CLOSE_WAIT:                          

//If the client request to close

disconnect(sock);

m_SokStatus1 = 0;

break;

case SOCK_CLOSED:

if(!m_SokStatus1)m_SokStatus1 = 1;


if (getSn_RX_RSR(sock) > 0)

{

       DebugPrint("\r\nParse_Reply2"); 

 Parse_Reply(SOCK_CLIENT);

      }

    

     close(SOCK_CLIENT);


//URL일 경우 DNS 접속

if (Need_DNS(Server_URL, strlen(Server_URL)) == 1) 

{

if (dns_query(Server_URL) != -1)

{

DebugPrint("\r\nDNS ok");


//얻어온 IP 및 포트로 접속

init_socket(sock, Config_Msg.Sip, Config_Msg.Sport);

}else 

{

DebugPrint("\r\nDNS Fail");

}

}

else

{

//IP일 경우 

init_socket(sock, Config_Msg.Sip, Config_Msg.Sport);

}

break;


    default:

        break;

}

}


 

 

결론

기존에도 인너넷 라디오를 제작해 보았지만 네트웍 상황에 따라 끊기는 현상이 발생하는데 메모리 가격 때문에 상용 제품 형태로 제작하기에는 문제가 많았다. 저렴한 가격에 메모리가 포함된 adStar를 이용하면 이러한 문제점들을 해결할 수 있을것 같다. 좀더 다듬으면 훌륭한 인터넷 라디오를 제작할 수 있을것 같다.

adStar Timer Counter 테스트

[MCU]/adStar | 2013.06.29 15:44
Posted by nexp

adStar Timer Counter 테스트

adStar는 4개의 16비트 타이머, 카운터, Capture, PWM 기능이 있는 Timer가 있다.

Timer Counter WAV OUT 기능이 있어 오디오 출력에 장점이 있다. Timer한가지 아쉬운점은 16비트 타이머 카운터이다.

 

adStar Timer Counter 블록도

 

 

  

 

adStar 타이머 테스트

타이머의 클럭소스는 입력 System Clock 이다. EVM에서는 12Mhz를 사용하고 있다.

 

 

 

 

adStar Timer 테스트 예제코드

#include "system.h"
#include "serial.h"


volatile unsigned int gTimerTick1_1ms = 0;


//----------------------------------------------------------------------------
//Timer Interrupt Handler
void Timer0ISR(void)
{

 gTimerTick1_1ms++;

}
//----------------------------------------------------------------------------


int main()
{
 int flag = 0;
 
 SystemInit();

 Led1Init();
 Led1On();

 U0_Init(BAUD_115200);
 DebugPrint("adStar EVM - Timer Test\r\n");



 //Timer  초기화

 set_interrupt(INTNUM_TIMER0,Timer0ISR);
 set_timer(0,1);


 while(1)
 {
  if( gTimerTick1_1ms>1000)
  {
   gTimerTick1_1ms = 0;
    
   flag ^= 1;
   if(flag)Led1On();
   else Led1Off();
  }
 }
 
 return 0;
}


adStar - W5100 TCP/IP 전송 속도 테스트 (외부 메모리 제어 모드 사용)

 

 

 

adStar 도 CANTUS 와 같이 외부 메모리 제어 모드가 있다.  외부 메모리를 연결할 수 있고,  특히 W5100과 같이 고속 이더넷이 필요할 때 사용하면 편리하다. [adStar TFT-EX] 보드에는 메모리 방식의 W5100을 연결할 수 있는 커넥터가 있기 때문에 이를 테스트 해 보았다.

 

메모리 제어 기능은 PORT3, PORT4에서 설정할 수 있다.

 

 

 

adStar의 CS0 할당 번지는 0x5000 0000 이다.

기존 CANTUS 와 약간의 차이가 있는것은 메모리 번지와 제어 레지스터 번지이다. 나름의 이유가 있었겠지만 기존 코드와 호환성을 유지하기 위해 동일하게 했으면 하는 생각이 든다.

 

 

 

 

asStar W5100 초기화 코드

 

void W5100_IO_INIT()
{
 *(volatile U16*)0x80000800 = BIT10; //BANK 0 8Bit

 *R_PAF3 = 0; //SRAM interface address, data
 Cbi(*R_PAF4, GP_CFG(1) | GP_CFG(3)| GP_CFG(4)| GP_CFG(5));// nCS, nWE, nRE, ALE  

 

 

 

asStar W5100 메모리 제어 방식(INDIRECT)을 이용한 TCP/IP 전송 속도 테스트

회로적으로 간단하게 테스트 하기위해 INDIRECT방식을 이용했는데도 6Mbps 이상 나오고 있는데 DIRECT모드를 이용하면 더 빠를 수 있을것 같다. 

 

 

 

adStar - SD Card 이용한 7" TFT LCD 테스트

 

 

adStar의 자장 큰 장점으로 MCU내에 TFT LCD 컨트롤러가 내장되어 있는 것이다. 때문에 7" TFT LCD도 쉽고 저렴하게 제어 할 수 있다.

 

 

adStar TFT LCD제어 초기화 코드

PORT6, PORT7, PORT8 이 TFT LCD데이터 포트 이므로 기능 설정 레지스터를 LCD 로 설정해 주면된다.

주의 사항으로 JTAG핀과 공통으로 사용하므로 개발할때 불편함이 있다. MUX칩으로 스위칭 할수 있도록 하면 좀더 쉽게 개발할수 있다.

void InitLcd()
{
 Cbi(*R_PAF5, 0xFFC0);//VSYNC,HSYNC,DISP_EN,CRTC_CLK_OUT
 BCKLIGHT_IO_INIT();
 BCKLIGHT_OFF();

 

 *R_PAF6 = 0; //LCD R
 *R_PAF7 = 0; //LCD G
 *R_PAF8 = 0; //LCD B
 
 crtc_clock_init(); 
}

 

 

LCD 종류에 따라 모드 설정이 필요한데 setscreen() 함수에서 설정 가능하다.

초기에 정상동작을 하지 않아 약간의 수정을 해 주니 잘 동작한다.

void setscreen(SCREENRES res,U32 scmode)
{
 switch(res)
 {
 case SCREEN_480x272:
  setscreenex(480,272,scmode,0x0000020D,0x0002002B,0x002D020D ,0x0000011E ,0x0002000C ,0x000E011E );
  break;
 case SCREEN_640x480:
  setscreenex(640,480,scmode,0x00000320,0x00130073,0x00A00320 ,0x0000020D ,0x0007000D ,0x002B020B );
  break;
 case SCREEN_800x480:
  //setscreenex(800,480,scmode,1000,(3<<16)|0,(24<<16)|1000 ,530 ,(23<<16)|2 ,(13<<16)|530 );
  break;
 case SCREEN_800x600:
  setscreenex(800,600,scmode,0x00000420,0x002300b0,0x01000420 ,0x00000274 ,0x0004000a ,0x001a0272 );
  break;
 default:
  debugstring("invalid screen size\r\n");
  return;
 }
}


void setscreenex(U32 width,U32 height,U32 scmode,U32 ht,U32 hs, U32 ha, U32 vt, U32 vs, U32 va)
{
 *R_CRTHT  = ht; //Horizontal Active와 Blank구간을 포함한 Horizontal Total Scan Value
 *R_CRTHS  = hs; //Horizontal Sync 구간의 Start(End) value
 *R_CRTHA  = ha; //Horizontal Active 구간의 Start(End) value
 *R_CRTVT  = vt; //Vertical Active와 blank 구간을 포함한 Vertical Total scan value
 *R_CRTVS  = vs; //Vertical Sync 구간의 Start(End) value
 *R_CRTVA  = va; //Vertical Active구간의 Start(End) value
 screen_w= width;
 screen_h = height;
 
 U32 conval=0;
 debugprintf(" CRTC %d x %d Setting Done\r\n",width,height);
 if(scmode&SCREENMODE_RGB888)
 {
  debugstring("RGB888 Mode\r\n");
  screen_bpp = 32;
  conval |= (1<<13);
 }
 else
 {
  debugstring("RGB565 Mode\r\n");
  screen_bpp = 16;
  conval |= (1<<12);
 }
 conval |= (1<<4);//line pitch not align 512,1024
 *R_CRTWIDTH = screen_w;
 *R_CRTCON = conval;
 drawsetclipwindow(0,0,screen_w,screen_h);
 set_interrupt(INTNUM_FRAMESYNC,framesync_isr);
 enable_interrupt(INTNUM_FRAMESYNC,FALSE);
}

 

 

 

asStar 7" TFT LCD 테스트 동영상

sdCard를 이용하여 7" TFT LCD에 BMP영상을 출력핟록 하고 있다. jpg파일도 가능하지만 JPG->BMP 변환 속도가 느려 BMP보다는 출력속도가 느린것 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[adStar EVM] ADC 테스트

[MCU]/adStar | 2013.01.06 23:00
Posted by nexp

 [adStar EVM] ADC 테스트

 

 

 

adStar는 4채널의 10bit ADC가 있고 속도는 최대 12Mhz 까지 가능하다. 4-depth FIFO, DMA를 지원한다.

 

 

adStar ADC 테스트 드라이버 코드

void AdcInit(void)
{
 *R_ADCCTRL = F_ADCCTRL_PMS |F_ADCCTRL_APB256 | F_ADCCTRL_EN | F_ADCCTRL_FIFO;
}

 

//Read ADC Value
unsigned int AdcRead(unsigned char port)
{
 unsigned int adc;
 
 Cbi(*R_ADCCTRL, (3<<5));

 //ADC 시작
 Sbi(*R_ADCCTRL, F_ADCCTRL_STC | (port<<5));
 
 //fifo not empty
 while((*R_ADCSTAT & (1<<4)));

 adc = *(R_ADCFIFO+port) & 0x3FF;

 return adc;
}

 

 

 

 

adStar ADC 테스트 동영상

 

 

 

 

 

 

TAG adstar

 [adStar EVM] AJAX를 이용한 실시간 업데이트 웹서버 - 가속도 센서 그래프출력

 

 

임베디드 웹서버의  센서 모니터링을 위한 기술로 실기간 업데이트 가능한 JAVA(AJAX) 기술을 이용하면 쉽게 구현 가능하다.

참고 : Mini WebServer real time page update(실시간 웹페이지 업데이트)

 

 

[adStar EVM] 보드를 이용하여 실시간 업데이트 가능한 임베디드 웹서버를 구현 해보았다. 웹페이지에서 JAVA코드를 디버깅하기는 쉽지 않기 때문에 자주 수정해야 한다. 웹페이지는 SD Card를 통해 업데이트 되어 복사만 하면 되므로 손쉽게 디버깅 할 수 있다.

 

 

adStar 실시간 업데이트 웹서버 테스트 동영상

실시간성 테스를 위해 3축 가속도 센서 데이터를 모니터링 하는 예제를 테스트 했다. 

 

 

 

실시간 업데이트 테스트 코드

실시간 페이지 업데이트를 위해 웹페이지에서는 AJAX가 스레스생하여 xml파일을 요청하고 임베디드 보드에서 xml 데이터만 수정하여 전소하게 된다. 그러면 부하없이 고속으로 실시간 데이터를 전송할 수 있다.

 

void SendToWebpage_sd(int s, char *name, unsigned char *http_response, unsigned long len, int req_type)

{

  : 

  if(req_type==PTYPE_CGI)
  {
   send_len = replace_sys_env_value(http_response,send_len);
  }
  else if(req_type == PTYPE_TEXT)
  {
   send_len = replace_sys_env_value(http_response,send_len);
   

  //XML 데이터 요청이 있으면
   if(strstr(name,"adc_val.xml"))
   {

       //센서 데이터 업데이트
       send_len = replace_sys_env_value(http_response,send_len);
   }      
  }  
  send(s, http_response, send_len, 0);

  file_len -= send_len;
 }
   
 f_close(&fp);

}

 

 

 

realtime embedded web server 테스트 페이지

 

 [adStar EVM] SD Card를 이용한 임베디드 웹서버 테스트

 

 

[adStar EVM]은 SD Card소켓을 내장하고 있기 때문에 여러가지 활용도가 좋은데, SD 카드를 이용하여 간단한 임베디드 웹서버를 제작해 보았다.

adStar의 풍푸한 SDRAM과 고성능이면서 저렴한 adStar의 장점을 최대한 이용해 보았다.

 

SD Card를 이용하면 웹페이 업데이트 및 관리에 있어서 편리한점이 많다. 특히 메모리가 부족한 임베디드 환경에서 저렴하고 웹서버 구현하는데 있어 좋은것 같다.

 

네트웍은 H/W TCPIP W5200모듈을 이용하여 SPI형태로 쉽게 [XP-NET EVM] 보드에 연결하여 테스트 하였다.

 

 

 

[adStar EVM] Embedded Webserver 테스트 동영상 

SD card에 웹페이지를 저장하고 네으웍으로 접속하여 간단한 웹서버 기능을 테스트 하고 있다. 디지털 입력, 디지털 출력, 아날로그 입력 등을 웹브라우저나 스마트폰등에서 접속하여 테스트할수 있다.

 

 

 

adStar 임베디드 웹서버 메인 페이지

임시로 192.168.0.104로 할당하였다.

 

 

 

 

adStar 임베디드 웹서버 디지털 출력 페이지

CGI 파일을 이용하여 LED1, LED2의 출력 상태를 변경하고 이를 LAMP모듈에 출력한다.

 

 

 

 

adStar 임베디드 웹서버 아날로그 입력 페이지 

아날로그 입력 데이터를 그래프로 표시한다. 그래프 표시는 JAVA(ajax) 를 이용하여 실시간으로 표시하도록 했다.

 

 

 

 

 

 

adStar 임베디드 웹서버 디지털 출력 페이지

디지털 출력으로 FND를 사용하였다.

 

 

 

 

 

 

[adStar EVM] SOUND MIXER 테스트 - WAV 파일 출력 하기

 

 

adStar는 SOUND MIXER 페리가 있어 오디오 출력을 쉽게 처리할 수 있다. 8bit/16bit, signed/unsigned, mono/stereo WAV와 MP3(software decoder)를 지원한다.

 

4개의 사운드 출력 채널과  하나의 입력 채널이 있다. 0번 1번 채널은 I2S를 통한 출력이고, 2번 3번 채널은 digital modulator를 통한 출력이다.

 

 

 

 

 

SDK에서는 2번 채널을 디폴트 출력으로 사용하고,  PORT0 2, 3에 맵핑되어 있다.

P0.2/SPWM2R_P/SPI0_MOSI/nCS1
P0.3/SPWM2R_N/SPI0_SCK/nCS2

  

 

참고로 채널을 변경하려면 STK LIB 소스에서 아래를 수정하면 된다.

#define SND_OUTPUT_CHANNEL 2

 

 

[adStar-EX EVM] 에서는 JP19에 P0.2, P0.3이 연결되어 있다.

 

 

 

 

I2S가 아닌 DIGITAL MODULATOR을 사용할 경우 아날로그 변환을 위한 필터가 필요하다.

테스트 보드에서는 아날로그 필터가 없기 때문에 예전에 제작 했던 [TPA-3110 EVM] D-AMP 를 사용하여 출력 테스트를 했다.

 

 

 

adStar WAV파일 출력 테스트 동영상

스위치 입력에 따라 SD Card의 WAV파일을 출력하는 간단한 테스트 동영상이다.

 

 

 

 

adStar WAV파일 출력 테스트 소스코드

 

int main()
{
 int res;
 SystemInit();

 
 Led1Init();
 Led2Init();
 Led1On();
 Led2Off();
 Sw1Init();
 Sw2Init();
 
 U0_Init(BAUD_115200);
 DebugPrint("adSstar EVM WAV test \r\n");

 

//파일 시스템 초기화

 FATFS fs;
 f_mount(DRIVE_SDCARD,&fs);
 print_files("1:");

 

 

//사운드 출력 초기화

 sound_init();
 WAVE* pWave;

 

 while(1)
 {

  if(GetSw1())
  {
//WAV파일 불러와  
  pWave = sound_loadwav("1:wav2/welcom.wav");

 

//WAV파일 출력

  sound_play(pWave);

 

//출력이 완료되면
  while(sound_isplay(pWave));

 

//메모리 해제
  sound_release(pWave);

  Delay(300);
  }

:

}

 

 [adStar EVM] 3축가속도 센서 테스트 - TFT LCD출력

 

 

[NET-EVM] 보드에는 I2C(SPI)로 연결되는 자이로, 가속도, 온도, 압력 센서등의 모듈을 연결할 수 있는 표준핀맵 커넥터가 있다.

 

SM-Type EVM 에는 핀 8번에, M-Type EVM에는 핀 P13번(adStar EVM의 P0.0)에 CS핀이 할당되어 있다.

 

 

 

adStar 가속도 센서 드라이버 코드

#define _SPI1_ENABLE     1

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

#define ACCEL_CS_BIT     BIT0
#define ACCEL_CS_PORT     GPIO0

#define ACCEL_CS_INIT()     Sbi(*R_PAF0, GP_CFG(0));Sbi(*R_GP0ODIR, ACCEL_CS_BIT)


#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()    SPI1_Init()
#define ACCEL_Read      SPI1_WriteReadByte
#define ACCEL_Write      SPI1_WriteReadByte
//-----------------------------------------------------------------------------

 

 

 

adStar 가속도 센서 테스트 동영상

가속도 센서 데이터를 TFT LCD에 출력하는 테스트

 

 

 

adStar 가속도 출력 테스트 소스코드

int main()
{
    short data;
    unsigned int accel;
 unsigned char buf[6]={0,};
 
 SystemInit();

 Led1Init();
 Led2Init();
 Led1On();
 Led2Off();
 
 U0_Init(BAUD_38400);
 DebugPrint("ADstar EVM1\r\n");
 
 //가속도 센서 초기화
 myAccel3lvInit();
 //SPI1_SetSpeed(SPI_SPEED_4MHZ);     
 
 myAccel3lvWrite(CTRL_REG1, 0xC7);

 data = myAccel3lvRead(WHO_AM_I);
 DebugPrint("Who am I? 0x%02X\r\n", data); 
 
 InitDiaplay();
 
 while(1)
 {
        GetAccelValue(AXIS_X, &data);
       
     if(data&0x0800)accel = (data&0x7FF) -2048;
     else accel = (data&0x7FF);

        //DebugPrint("%d ", accel);
        accel = (2048+accel)/10-100;
        buf[0] = accel>>8;
  buf[1] = (accel&0xFF);

        GetAccelValue(AXIS_Y, &data);
        if(data&0x0800)accel = (data&0x7FF) -2048;
     else accel = (data&0x7FF);
        accel = (2048+accel)/10-100;
        //DebugPrint("%d\r\n", accel);
  
        buf[2] = accel>>8;
  buf[3] = (accel&0xFF);
       
  DisplayPloat(SRL_CMD_PLOTY, buf, 4);
        Delay(30);   
 }
 
 return 0;
}

 

블로그 이미지

nexp

카테고리

분류 전체보기 (1560)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (140)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (213)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (129)
[SENSOR] (41)
[DATA] (21)
[FPGA] (32)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)