[AVR]/Mega1282012. 4. 29. 16:00

[AT90USB1287-EX] 보드에서 Atmega128사용하기

[AT90USB1287-EX] 보드에서 Atmega128사용하기

 

 

 

[AT90USB1287 EVM-EX] 보드는 USB호스트 기능이 있는 AT90USB1287을 테스트 하기 위한 보드 이지만 ATMega128도 실장하여 테스트 가능하다.

핀맵이 약간 다르기 때문에 조립하기전 0옴 저항으로 선택해서 조립할 수 있도록 했다.

 

 

 

ATMega128를 실장할 경우 아래와 같이 프로젝트 파일 및 드라이버 파일에서 약간의 수정이 필요하다.

 

[config.h] 

#define __MCU_TYPE__    AVR_TYPE_MEGA128

 

#define _UART1_ENABLE

 

 

//-----------------------------------------------------------------------------
// On board LED
#define LED1_PROT     PORTG
#define LED1_BIT     BIT3
#define Led1Init()     Sbi(DDRG, LED1_BIT)
#define Led1Off()     Sbi(LED1_PROT, LED1_BIT)
#define Led1On()     Cbi(LED1_PROT, LED1_BIT)


#define LED2_PROT     PORTG
#define LED2_BIT     BIT4
#define Led2Init()     Sbi(DDRG, LED2_BIT)
#define Led2Off()     Sbi(LED2_PROT, LED2_BIT)
#define Led2On()     Cbi(LED2_PROT, LED2_BIT)
//-----------------------------------------------------------------------------

 

 

ATMega128을 실장한 보드

 

 

 

Posted by nexp

댓글을 달아 주세요

[AVR]/AT90USB2012. 1. 30. 00:06

[ AT90USB1287-EX] MP3(VS1033) 모듈 테스트

[ AT90USB1287-EX] MP3(VS1033) 모듈 테스트




[AT90USB1287-EX] 보드는 VS1033 MP3모듈 을 연결할 수 있어 USB메모리 스틱의 MP3파일을 출력하거나 이더넷을 이용하여 인터넷 라디오 등을 제작할 수 있다.




[AT90USB1287-EX] VS1033 MP3모듈 드라이버 소스코드
//-----------------------------------------------------------------------------
#define VS_DREQ_BIT      BIT6
#define VS_DREQ_PORT     PORTD

#define VS_CS_BIT      BIT4
#define VS_CS_PORT      PORTD

#define VS_XDCS_BIT      BIT5
#define VS_XDCS_PORT     PORTD

#define VS_RST_BIT      BIT7
#define VS_RST_PORT      PORTD


#define VS1003_CS_H()      Sbi(VS_CS_PORT, VS_CS_BIT)
#define VS1003_CS_L()      Cbi(VS_CS_PORT, VS_CS_BIT)

#define vs1003_enable()      VS1003_CS_L()
#define vs1003_disable()     VS1003_CS_H()


#define VS1003_XDCS_H()      Sbi(VS_XDCS_PORT, VS_XDCS_BIT)
#define VS1003_XDCS_L()      Cbi(VS_XDCS_PORT, VS_XDCS_BIT)


#define VS1003_RESET_H()     Sbi(VS_RST_PORT, VS_RST_BIT)
#define VS1003_RESET_L()     Cbi(VS_RST_PORT, VS_RST_BIT)

#define IsVs1003DataReady()     (PIND&VS_DREQ_BIT)

#define VS_SendByte       SPI0_WriteReadByte
#define VS_InitSpi()      SPI0_Init()
#define VS_SpiSpeed_Low()        SPI0_SetSpeed(SPI_SPEED_1MHZ)
#define VS_SpiSpeed_High()     SPI0_SetSpeed(SPI_SPEED_4MHZ)

#define MP3_PORT_INIT()         Sbi(DDRD, (BIT4|BIT5|BIT7));\
           Sbi(PORTD, BIT6);Cbi(DDRD, BIT6);\
              VS1003_CS_H();VS1003_XDCS_H()


Posted by nexp

댓글을 달아 주세요

[AVR]/AT90USB2012. 1. 27. 22:46

[AT90USB1287-EX] 이더넷 테스트 - 초간단 웹서버 만들기

[AT90USB1287-EX] 이더넷 테스트 - 초간단 웹서버 만들기




AVR와 W5100을 이용하여 아주 간단한 웹서버를 만들어 보도록 하자.
웹서버는 TCP서버의 일종으로 웹브라우저에서 80번 포트로 접속하면 HTTP프로토콜에 따라 데이터를 송수신 하면 된다.

AVR 초간단 웹서버 테스트 동영상
[AT90USB1287-EX] 보드가 임베디드 웹서버로 동작하고 접속하여 보드의 LED제어하는 간단한 예제를 작성해 보았다.





먼저 접속하면 보여줄 웹페이지를 HTML 코드로 작성해서 변수로 저장해 둔다. 추후 좀더 복잡한 페이지는 USB메모리 스틱이나 SD Card에 저장할 수 있다.




const unsigned char str_http_ok[] = {"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n"};

const unsigned char str_msg[] = {"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n\
    <html><head></head><body ><DIV><p align=\"center\"><b><size=\"8\"><br>[AT90USB1287-EX] WebServer - LED Test</font></b></DIV>\
    <HR style=\"COLOR: #3366FF; BACKGROUND-COLOR: #EB9243\"></DIV><div align=\"center\"><p align=\"center\"></p></div>\
    <form name=\"form1\" method=\"get\" action=\"$LED_ON\"><p align=\"center\"><input type=\"submit\" value=\"LED ON\"  name=\"ledo\"></p></form>\
 <p><p></td></tr><tr><td><form name=\"form2\" method=\"get\" action=\"$LED_OF\"><p align=\"center\">\
    <input type=\"submit\" value=\"LED OFF\" name=\"ledn\"></p></form><p></td></tr></table></div></body></html>"};




TCP서버 처리를 위한 함수는 기존과 동일한데 HTTP프로토콜은 디폴트 80번 포트 이므로 80번포트로 소켓을 생성하고 데이터 수신되면 웹페이지를 전송해 주면 된다. 아래 코드와 같이 아주 간단하다.

void ProcessTCPS(unsigned int sock)
{
    unsigned int len;
 unsigned int port = MY_LISTEN_PORT;

 switch (getSn_SR(sock))
 {
  // Socket CLOSED일 경우     
 case SOCK_CLOSED:
  if(!m_SokStatus1)
  {
   DebugPrint("[%d] : Web Server Started.",sock);
   m_SokStatus1 = 1;
  }

  if(socket(sock, Sn_MR_TCP, DEFAULT_HTTP_PORT, 0x00) == 0)
  {
   DebugPrint("\a%d : Fail to create socket.",sock);
   m_SokStatus1 = 0;
  }
  else listen(sock);
 
  break;

case SOCK_ESTABLISHED:
  //수신데이터가 있으면
  if((len = getSn_RX_RSR(sock)) > 0)   
  {
      if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
      //데이터 수신
      len = recv(sock, data_buf, len);  
  
     //수신데이터 처리 -> 웹 쿼리 응답
     ProcessWebpage(sock, data_buf);    
  } 
  break;

 case SOCK_CLOSE_WAIT:                            
  //If the client request to close
  disconnect(sock);
 
  m_SokStatus1 = 0;
  break;  
  } 
}



이제 웹페이지에서 특정한 응답을 받아서 처리 하는 부분을 작성해 보자. 이번 예제에서는 웹페이지에 있는 버튼에 따라 LED를 On/Off할 수 있도록 해 보았다.

아래 코드와 같이 브라우저에서 웹페이지를 요청하면 "HTTP/1.0 200 OK" 메세지와 HTML페이지를 전송하면 된다.
  send(sock, str_http_ok, strlen(str_http_ok));
  send(sock, str_msg, strlen(str_msg));


void ProcessWebpage(unsigned sock, unsigned char *data_buf)
{
 int wait_send=0;

 //LED 제어 처리
 if(strncmp("$LED_ON", (char *)&(data_buf[5]), 7)==0)
 {     
  Led1On();
  send(sock, str_http_ok, strlen(str_http_ok));
  send(sock, str_msg, strlen(str_msg));
  DebugPrint("led on\r\n");
 }
 else if(strncmp("$LED_OF", (char *)&(data_buf[5]), 7)==0)
 {     
  Led1Off();
  PORTF = 0xFF;
  send(sock, str_http_ok, strlen(str_http_ok));
  send(sock, str_msg, strlen(str_msg));
  DebugPrint("led off\r\n");
 }
 else
 {
  send(sock, str_msg, strlen(str_msg));   
 }

 while(getSn_TX_FSR(sock)!= getIINCHIP_TxMAX(sock))
 {
  if(wait_send++ > 1500)
  {
   DebugPrint( "HTTP Response send fail");
    break;
  }
  Delay(1);
 }
 disconnect(sock);
 DebugPrint("closed\r\n");
}





Posted by nexp

댓글을 달아 주세요

[AVR]/AT90USB2012. 1. 23. 18:00

[AT90USB1287-EX] 보드 제작 - AT90USB1287, ATMeaga128, 테스트 보드 제작

[AT90USB1287-EX] 보드 제작 - AT90USB1287, ATMeaga128,  테스트 보드 제작


AT90USB1287, ATMega128을 이용하여 [W5100 EVM] 이더넷,  [MP3 Module] (VS1033),  표준 8bit Mode [TFT-LCD MODULE] 등을 테스트 할 수 있는 보드를 제작했다.

기본적으로 AVR의 주요 기능을 테스트 할 수 있고, 주요 기능핀들은 확장 핀으로 할당되어 있다.
보드에는 USB2UART(CP2101), LED, CdS, 온도센서, 압력센서, IR 리모콘, MIC, Switch, 32kByte SRAM 등이 있어 AVR의 기본 기능을 테스트 할 수 있다.




AT90USB1287을 이용하면 USB Host기능을 테스트 할 수 있다. 메모리 스틱을 이용하여 MP3파일 출력이나 이더넷 FTP기능을 테스트 할 수 있다.




확장포트를 이용하여 TFT-LCD 모듈을 연결하여 테스트 가능하다.






표준 시리얼 핀맵을 이용해 USB2UART, Zigbee2UART, Bluetooth2UART, WiFi2UART 모듈을 연결할 수 있다.









Posted by nexp

댓글을 달아 주세요

[AVR]/Mega1282009. 11. 22. 05:26

ATMega128 TFT LCD(COM26T2844) 테스트

ATMega128 TFT LCD(COM26T2844) 테스트


ATMega128을 이용하여 [LCD_EXP EVM] 보드를 테스트 했다.
자료 정리 차원에서 정리해 본다.

ATMega128 TFT LCD(COM26T2844) Pinmap



ATMega128 TFT LCD(COM26T2844) Driver Code
//-----------------------------------------------------------------------------
// TFT LCD(COM26T2844) Driver
#define TFT_DRV_COM44     1

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

#define LCD_RST_BIT      BIT4
#define LCD_RST_PORT     PORTD
#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      BIT7
#define LCD_RS_PORT      PORTE
#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      BIT3
#define LCD_WR_PORT      PORTG
#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      //BIT7
#define LCD_RD_PORT      //PORTA
#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      PORTB
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define TFTGpioInit()     DDRA = 0xFF;\
          DDRC = 0xFF;\
          Sbi(DDRB, BIT4|BIT5);\
          Sbi(DDRD, BIT4);\
          Sbi(DDRE, BIT7);\
          Sbi(DDRG, BIT3);

#define DATA_OUT(Data)     PORTA = (Data&0xFF); PORTC = ((Data>>8)&0xFF)


TFT LCD 기본 테스트 예제코드
#include "system.h"
#include "serial.h"
#include "tft_lcd.h"

//-----------------------------------------------------------------------------
int main(void)
{
 SystemInit();
 int delay_time = 1;
  
 Led1Init();
 Led1On();

 //Serial Init
 U0_Init(BAUD_115200);
 printf("myAVR Mega128 Test Program1\r\n");
 
 TftLcd_Init();         //Initial LCD 

 while(1)
 {
   Disp_Full_Color(Red);
  Delay(delay_time);
  Disp_Full_Color(Green);
  Delay(delay_time);
  Disp_Full_Color(Blue);
  Delay(delay_time);

  Ver_8Gray_Disp() ;
  Delay(delay_time);
  Hor_8Gray_Disp() ;
  Delay(delay_time);
  Ver_8Color_Disp() ;
  Delay(delay_time);
  Hor_8Color_Disp() ;
  Delay(delay_time); 
 }
}
//-----------------------------------------------------------------------------


테스트 동영상
ATMega128 7.3728Mhz에서 TFT LCD테스트



Posted by nexp

댓글을 달아 주세요