[ATtiny10 EVM] 6핀초소형 AVR 보드 제작

 


타입의 초소형 MCU시장에 AVR도 들어왔다. Microchip사의 PIC10시리즈가 가장 작았는데 동일한 타입에 성능은 더 좋은 MCU를 출시 했다.


ATtiny10의 특징은 아래와 같다.

512/1024 Bytes FLASH
32 Bytes SRAM
12 MIPS Throughput at 12 MHz
One 16-bit Timer/Counter with Prescaler and Two PWM Channels
4-channel, 8-bit ADC
Idle Mode : 25uA at 1MHz and 1.8V
Power-down Mode: < 0.1uA at 1.8V

 

 

 

 


[SS-Type EVM] 확장 보드에 연결하여 테스트가능 하다.









[ATtiny10 EVM] 회로도

 

 

 

 

 

 

 

AMega128 Ethernet Test 보드 - 테스트 하기

 

 

 

 소스코드
테스트 소스코드 는 TCP 서버 테스트를 위한 예제코드

 


 

//-----------------------------------------------------------------------------
//수신데이터 처리
void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)
{
 unsigned int i;

 DebugPrint("Read Data[%d]\r\n", len);
 
 for(i=0;i<len;i++)
 {
  //if(i%16==0)DebugPrint("\r\n");
  DebugPrint("%c", pRcvBuffer[i]);
 }

 DebugPrint("\r\nReceive OK!\r\n");

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

 

 


 

USB2UART 를 위해 USB를 연결하고, 랜 캐이블을 연결한다.

  

 

CP2012 칩의 드라이버 파일은 아래 링크에서 최신파일을 받을 수 있다.

  CP210x_VCP_Win2K.exe

 http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

 

 

 

펌웨어 다운로드 하고 USB 연결후 하이퍼 터미널(보레이트 115200bps)에 아래와 같이 레지스터 정보를 표시되면 정상동작을 확인할 수 있다.

 

 

코드상에서 보드의 IP를 설정할 수 있다. 여기서는 192.168.0.100 , Port 5000 으로 설정되어 있다.

 // MY Source IP     : 192.168.0.100
#define MY_SOURCEIP {192,  168, 0,  100}

 

// MY Listen Port  : 5000

#define MY_LISTEN_PORT 5000      

 

 


 

테스트용 PC프로그램

PC측 호스트 프로그램은 TCP루프백 테스트를 할 수 있는 AX 플그램을 사용한다.

 


 

 

기본 테스트하기

1) TCP 연결

 

 

보드 IP 192.168.0.100, 5000으로 접속

 

 

정상적으로 접속되면 메세지가 출력된다.

 

 

 

테스트 메세지 전송

 

 

테스트로 100개의 데이터 전송

 

 

 

수신된 데이터 확인

하이퍼 터미널에서 수신된 데이터를 확인 할 수 있다.

 

 

 

 

 

 

[ATMega16-SM EVM] ADC 테스트 - TFT LCD 그래프 표시

 

 

 

 

ATMega16-SM EVM 보드에서 ADC포트는 PORTA PA7~PA0(ADC7~ADC0)에 연결되어 있고 가변저항으로 ADC값을 확인할 수 있다.

 

 

 

AVR ATMega16 ADC 드라이버 코드

ATMega32 의 경우 ADCSR레지스터가 ADCSRA로 변경되었다.

//------------------------------------------------------------------------------
// Function Routine
//ADC Initialize
void AdcInit(void)
{
 ADMUX = 0;
    ADCSR = ADC_ENABLE | ADC_PRESCALE_DIV32;
}

//Read ADC Value
unsigned int AdcRead(unsigned char port)
{
 unsigned int value = 0;

 ADMUX = port&7;
 ADCSR |= ADC_START_CONVERSION;

 while(!(ADCSR & ADC_COMPLETE));

 value = ADCL;
 value = (ADCH<<8) | value;

 return value;
}
//------------------------------------------------------------------------------

 

 

 

 

AVR ATMega16 ADC 테스트 예제코드

 

int main(void)
{
 char c;
 unsigned int adc;
 unsigned char buf[8];
 
 SystemInit();
 
 Led1Init();
 Led1On();

 //UART Init
 DebugInit(BAUD_115200);
 DebugPrint("ADC Test Program\r\n");
 
 AdcInit();

 while(1)
 {

  adc =  AdcRead(7);

  buf[0] = (adc>>8);
  buf[1] = (adc&0xFF);

  adc =  AdcRead(6);

 

  buf[2] = (adc>>8);
  buf[3] = (adc&0xFF);

  SendPacket(SRL_CMD_PLOTY, buf, 4);

 

  Delay(20);
 }
}

 

 

 

AtMega32 ADC 테스트 동영상 - TFT LCD그래프 표시

 

[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 모듈을 연결할 수 있다.









AVR 개발환경 설정 - 무료 개발툴 이용


개발 환경 설치
AVR 개발 환경 구축을 하기 위해 필요한 파일은 AVR을 컴파일 할 수 있는 WINAVR과 IDE 및 프로그래밍 툴인 AVR Studio 이고 아래링 크에서 다운 로드 가능하다.
1) WINAVR 다운로드 : http://winavr.sourceforge.net/download.html
2) AVR Studio 다운로드 : http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

각 파일의 최신 버전을 다운로드 받아 설치한다. (별다른 설정 없이 각 파일을 디폴트 디렉토리에 설치하면 된다.)



IDE환경 설정 및 기본 예제 컴파일

프로그램 설치가 완료 되었다면 AVRStudio를 실행한다.

새로운 프로젝트 생성
메뉴에서 [project->Nwe Project] 를 클릭하여 새로운 프로젝트파일을 생성한다.

 

 

Project Tyoe를 AVR GCC로 설정하고(C언어를 이용하기 위해), 원하는 폴더에 원하는 프로젝트명으로 프로젝트 파일을 생성한다.

 

 

디버깅 툴 및 디바이스 설정

 

 

새로운 프로젝트 파일이 생하면 기본적인 환경설정이 이루어 지는데 메뉴에서 [Edit Configuration Option]을 이용해서 디바이스를 다시 설정하거나 컴파일 옵션등을 변경할 수 있다.

 

 

간단히 LED O/Off하는 예제를 작성해서 메뉴에서 [Build -> Build] 를 클릭하면 에러 없이 컴파일되는 것을 확인 할 수 있다.

 

 



프로그램 다운로드

컴파일이 완료 되었다면 실제로 보드에 다운로드 해서 테스트 해볼 수 있다.

메뉴에서 [Tools -> Program AVR -> Connect]를 클릭해서 다운로드 툴을 선택한다. (여기서는 AVRISP mkii를 이용한다.)

 

 

한번 설정하면 다음부터는 AVRISP로 바로 들어갈 수 있다.

먼저 [Main]탭에서 디바이스를 선택한다. 

 

 

[Fuses]탭에서 적절한 Fuses 비트를 선택한다.

여기서는 CKDIV8를 선택 해지하고, SUT_SKCSEL 을 8Mhz 이상으로 선택한다.

 

 

최종적으로 [Program] 탭에서 컴파일 된 hex파일을 선택하고 [Program] 을 클릭하면 다운로드 되는것을 확인 할 수 있다.

 

 



참고

LockBit설정

AVR에 프로그램 후에 프로그램된 내용을 확인할 수 없도록 Lock을 설정할 수 있다. 양산품이라면 보드의 프로그램 내용을 보호하기 위해 설정이 필요하다.

 

 

 

TIP

AVR Studio의 버그? 인지 몰라도 프로젝트에 파일을 추가하면 절대 경로로 잡히는데...

파일이 많아지고 여러폴더에서 링크하거나 다른 컴퓨터로 복사해서 다른 폴더에서 실행하면 경로를 잡지 못해서 에러가 발행하는데..

프로젝트 파일인 *.asp 파일을 열어서 절대 경로를 삭제 하거나 상대 경로로 설정해 주면 이런 문제를 해결 할 수 있다.

AVR 파워다운 모드 전류측정 실험

AVR은 저전류 전용 칩이 아니기 때문에 고려 해본적이 없었는데 전류소모를 적게 해야 할 일이 있어 AVR소비 전류를 줄이는 방법에 대해 검토 해 보았다. MSP430에 비하면 비할 바가 못되지만 아무튼 5단계의 슬립모드 설정이 가능하고 실험 결과 나쁘지 않게 사용가능할것 같다.


AVR전류 측정

전원 공급후 while루프 돌때 - 12mA
USB기능 동작시 - 25mA

아무런 동작을 하지 않아도 12mA가 흐러고 타이머나 기타 페리를 사용하는 순간 25mA까지 소비 한다.

이 상태로는 좀 문제가 있는것 같고 슬립모드 관련 데이터 시트를 보니 몇가지 방법이 있는것 같다. 테스트에 사용한 칩은 ATmega88V이다. 예전 버전 ATmega8을 가지고 테스트 하다 고생 했는데.. 결국 새로운 칩은 슬립 모드 관련 상당히 개선된 점이 많았다.


AVR에는 5단계의 슬립모드가 있다.



IDLE Mode
표에서 처럼 CPU클럭만 멈추고 다른 페리들은 살아 있어서 외부 페리의 이벤트에 따라 께어날 수 있다. 하지만 소비 전류는 크게 줄어들지 않는다.

WINAVR에서 제공하는 코드로 아래와 같이 하면 슬리모드로 진입할 수 있다.
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_mode();

실험 결과 슬립모드로 들어 들어 갔을때 9mA 정도 소비 한다. 일반 동작시보다는 3mA정도 줄어 든것 같다


ADC Noise Reduction Mode
IDLE모드 보다는 조금더 페리를 정지 시켜서 전류 소모를 줄이는데... ADC노이즈를 줄이는데 효과가 있다고 하니 사용해볼 만하다.


Power-save Mode
슬립모드에서도 타이머를 사용할 수 있기 때문에 일정시간 이후 슬립모드에서 깨어날 수 있도록 할 수 있다. 
아래 코드로 진입 가능하며 하다.
  set_sleep_mode(SLEEP_MODE_PWR_SAVE);
  sleep_mode();

타이머 인터럽트로 일정 시간 이후 깨어날 수 있으므로 일정시간 간격으로 데이터 센싱하는 용도로 사용하면 파워를 많이 줄일 수 있다.
실험 결과 파워세이브 모드에서 1mA 정도의 소비 전류가 있다.


Power-down Mode
표와같이 모든 페리를 끄고 외부 인터럽트만 동작하는 모드로 가장 전류 소모를 줄일 수 있다. 하지만 께어날 수 있는 방법이 스위치 등을 달아서 에서 인터럽트 발생하는 방법 밖에 없으로 일정시간 후 스스로 께어나기는 힘들다.
아래 코드로 설정 가능하다.
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_mode();

실험 결과 파워다운 모드에서 0.6uA 정도의 전류 소모로 동작이 가능하다.




파워다운 모드가 좋은데 아쉬운 점은 스스로 께어나지 못한다는 점이다. 그렇다고 파워 세이브 모드로 해서 타이머를 켜두면 1mA의 전류가 흐르기 때문에 문제이다.
메뉴얼을 보니 와치독 타이머 인터럽트로 CPU를 깨울 수 있다고 한다.
와치독타이머로 일정 시간후 스스로 께어나게 코드 수정 후 테스트 결과 6uA정도 소모 한다. 께어나는 동안 페리가 동작하므로 잠깐 13uA까지 모소 하지만 파워 세이브 모드와 유사하게 동작하지만 전류는 상당히 줄일 수 있었다.




참고로 ATMega8 (예전 버전)에는 슬립모드 관련 기능이 많이 빈약하다.


[Atmega8 EVM] USB HID 테스트

[AVR]/Mega8 | 2011.09.22 23:30
Posted by nexp
[Atmega8 EVM] USB HID 테스트


USB HID을 이용하면 윈도 표준 입력 인터페이스로 드라이버 필요 없이(정확히는 Windows 내부 표준 드라이버) USB연결 할 수 있다. USB Mouse, Keyboard, Joystick 등이 이 표준을 따르는데 USB를 연결하면 바로 동작하기 때문에 사용자 입장에서 상당히 편리한 인터페이스 이다.

이번에는 AVR AtMega8  (ATMega8-EVM) 의 USB 소프트웨어 스텍을 이용하여 HID Data 테스트를 해 보았다. 스프트웨어 스텍이라 약간 불안하거나 속도에 문제가 있지 않을까 했는데.. 테스트 결과 속도도 나쁘지 않고 저렴고 간단하게 사용할 수 있어서 좋은것 같다.

Atmeg8 EVM을 USB에 연결하면 HID장치로 인식되고 휴먼인터페이스 장치에서 확인 할 수 있다. (드라이버 설정 필요 없이 바로 인식된다.)




AVR USB HID처리
uchar ProcessUSB(uchar *data, uchar len)
{
 unsigned char temp[9];
 unsigned int adc=0;

 switch(data[0])
 {
  case CMD_LED_OFF:
   Led1Off();
   break;

  case CMD_LED_ON:
   Led1On();
   break;
  
  case CMD_EEPROM_READ:
   eeprom_read_block(data, (uchar *)0 + data[1], data[2]); 
   SendUsb((void *)&data, 8);
   break;
   
  case CMD_EEPROM_WRITE:
   eeprom_write_block(data, (uchar *)0 + data[1], data[2]);
   break;   

  case CMD_GET_ADC:
   adc = AdcRead(0);
   //DebugPrint("ADC:%d\r\n", adc);

   temp[0] = adc&0xFF;
   temp[1] = (adc>>8)&0xFF;
   SendUsb((void *)&temp, 8);
   break;
 }  
}


HID제어 Main Source Code
int main(void)
{
 uchar   i;

 //System Init
 SystemInit();
 Led1Init();
 Led1On();
 
 //UART Init
 DebugInit(BAUD_38400);
 DebugPrint("USB HID Test Program\r\n");
 
 //ADC Init
 AdcInit();
    
 //USB Init
    usbInit();
    usbDeviceDisconnect();
   
 i = 0;
    while(--i){             /* fake USB disconnect for > 250 ms */
        wdt_reset();
        _delay_ms(1);
    }
 
    usbDeviceConnect();
    sei();
   
    while(1)
 {  
        wdt_reset();
  //USB 처리
        usbPoll();
    }
    return 0;
}



HID제어 PC Host 프로그램
PC용 프로그램은 C#을 이용하여 작성하였다.
HID제어 부분을 표준 DLL로 제작해 두었기 때문에  VC++, VB, C#에서 쉽게 제어 가능하다.





HID제어 DLL이용하면 아주 간다하게 프로램을 작성할 수 있다.

        private void button2_Click(object sender, EventArgs e)
        {
            bool ret;

            ret = GPortIOHidInit(0, 0);

            if (ret)
            {
                label1.Text = "USB HID Init OK";
            }
            else
            {
                label1.Text = "USB Init ERROR";
            }
        }
  
        private void button3_Click(object sender, EventArgs e)
        {
            int ret;
            ret = OutPort(CMD_LED_ON, 0)
        }

        private void button4_Click(object sender, EventArgs e)
        {
            int ret;
            ret = OutPort(CMD_LED_OFF, 0)
        }

         private void button5_Click(object sender, EventArgs e)
        {
                int ret;
                int adc_val;
                byte[] Buffer = new Byte[8];

                ret = InPort(CMD_ADC_READ+0 ), Byte)

                 adc_val = Buffer[1] | Buffer[2] << 8;
                label1.Text = adc_val.ToString();
       }




AVR HID테스트 동영상
HID를 이용하여 LED를 제어 하고 Mega8의 EEPROM에 데이터를 읽고 쓰며  ADC값을 그래프로 표시하는 테스트 이다. 소프트웨어 스텍임에도 속도가 나쁘지 않다.




AVR 와치독(Watchdog) 타이머 사용하기
MCU가 예외 상황으로 멈춰 있을때 리셋을 걸어 주어야 하는데.. 이때 Watchdog를 사용할 수 있다.
초기화는 WDTCR레지스터의 비트3을 설정해주면 와치독 타이머가 동작한다.
이때 주의 사항은 MCUSR레지스터의 WDRF비트를 0으로 설정해 주어야 한다.

와치독 타이머가 동작하면 설정한 주기 이내로 레지스터 값을 클리어 해 주어야 하는데
#asm("WDR")
로 가능하다.

WIN AVR을 이용하면 wdt.h에 기본 함수가 정의 되어 있어 간단히 사용할 수 있다.


AVR Watchdoc 타이머 사용 예제 소스코드
#include <avr/wdt.h>

#define  WDTO_15MS   0
#define  WDTO_30MS   1
#define  WDTO_60MS   2
#define  WDTO_120MS   3
#define  WDTO_250MS   4
#define  WDTO_500MS   5
#define  WDTO_1S   6
#define  WDTO_2S   7 


void main(void)
{
   :
   
    //Watchdog 초기화 - ATmega162에서는 MCUSR레지스터가 MCUCSR이다.

    MCUCSR &=~(1<<WDRF);
    wdt_enable(WDTO_500MS);


    while(1)
   {
      :  
      //주기적으로 와치독 클리어
      if(gTimerTickWD>400)
      {
          gTimerTickWD = 0;
          wdt_reset();
      }
   }
  }
TAG AVR, WATCHDOG

[ATXmega128A1 EVM] 보드 제작

[AVR]/ATXmega | 2010.08.21 18:15
Posted by nexp
[ATXmega128A1 EVM] 보드 제작



Atmel의 ATXmega128A1 EVM 보드를 제작 했다. 예전에 만들어 두었던 보드 인데 정리하면서 조립 했다. (XMega128A1 을 지인으로 부터 받아서..)

1.6~3.3V 에서32Mhz, 8개의 16bit timer, SPI 4채널, TWI 채널, USART 8채널, DMA 지원하고, SDRAM도 연결가능하니 나쁘지 않다.



기존 제작된 보드와 핀맵을 호환 되도록 했고 USB2UART나 Bluetooth모듈을 연결할 수 있다.
IR센서를 연결 할 수 있어 리모콘 수신 테스트를 해 볼수 있다.



포트가 풍부하다 보니(SPI 4채널) 뒷면에 T-Flash 연결 가능하도록 했다.


확장 테스트 보드
TFT-LCD테스트 확장 모듈


이더넷 테스트 확장모듈
사실 XMega128 보드 제작 동기는 8채널 Serial to Ethernet모듈 제작 테스트를 위해서 이다. XMega64의 경우 UART 8채널에 3$대로 구매 할수 있기 때문에 저렴하게 8채널 Serial to Ethernet모듈 제작이 가능하다. 특히나 Wizet의 W5300은 8개의 포트를 지원하는 하드웨어 TCP/IP이므로 쉽고간단히 그리고 저렴한 Seral To Ethernet 모듈을 제작 할 수 있다.



ATXmega128A1 테스트 동영상


XMega128a1 TFT LCD테스트 동영상



[Mega8-SM EVM] 소형 AVR보드 제작

[AVR]/Mega8 | 2009.05.08 22:40
Posted by nexp
[Mega8-SM EVM] 소형 AVR보드 제작



기존 [Mega8-s EVM]에 확장해서 [SM-Type EVM] 로 제작 했다. SM-Type은 USB2Seral 모듈이나 Bluetooth 모듈 등을 연결할수 있고 SPI, I2C, UART등의 자주사용하는 기능을 표준화된 핀맵으로 정의해서 제작하고 있다. 또한 소프트웨어 USB스택을 테스트 할 수 있도록 USB커넥터를 연결 하능하다. (참고 USB 관련 테스트 예제, USB 호스트 예제)



USB커넥터를 두어 SW USB Stack을 테스트 할 수 있을 뿐아니라 USB2UART가 있어 디버깅 및 Arduino 를 쉽게 포팅할 수 있도록 제작했다.



회로도

확장 커넥터


on board LED


USB Connector



블로그 이미지

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)