[AVR]/Mega82012. 5. 9. 23:51

[ATmeag88] Timer2 테스트 - 8-bit Timer/Counter2 with PWM

[ATmeag88] Timer2 테스트 - 8-bit Timer/Counter2 with PWM

 

- Single Channel Counter
- Clear Timer on Compare Match (Auto Reload)
- Glitch-free, Phase Correct Pulse Width Modulator (PWM)
- Frequency Generator
- 10-bit Clock Prescaler
- Overflow and Compare Match Interrupt Sources (TOV2, OCF2A and OCF2B)
- Allows Clocking from External 32 kHz Watch Crystal Independent of the I/O Clock

 

 

 

 

Timer2 초기화

#define TIMER2_VALUE      (256-115)

 

#define TIMER2_CLK_DIVCLK                   1
#define TIMER2_CLK_DIV8                     2
#define TIMER2_CLK_DIV32                    3
#define TIMER2_CLK_DIV64                    4
#define TIMER2_CLK_DIV128                   5
#define TIMER2_CLK_DIV256                   6
#define TIMER2_CLK_DIV1024                  7

 

#define TIMER2_DISABLE_PWM                 0

 

 

#define TIMSK        TIMSK2
#define TIMER2_INT_ENABLE     BIT0
#define Timer2Set(Value)     (TCNT2 = Value)
#define TCCR2        TCCR2B

 

//Initialize Timer2

void IntitTime2(void)
{

    // Enable Timer 2 output compare interrupt
    Sbi(TIMSK, TIMER2_INT_ENABLE);

 

    // Start timer 2 with prescaler 128

    Sbi(TCCR2, TIMER2_CLK_DIV128);

   //set 1ms
   Timer2Set(TIMER2_VALUE);
}

 

 

Timer Interrupt Handler

 SIGNAL(SIG_OUTPUT_COMPARE2A)

    gTimeTick++;

    Timer2Set(255-5);

}   

 

 

 

Posted by nexp

댓글을 달아 주세요

[AVR]/Mega82011. 10. 31. 01:25

[Mega88-SS EVM] 초소형 Arduio 테스트 보드 제작

[Mega88-SS EVM] 초소형 Arduio 테스트 보드 제작


ATmgea8 QFN타입을 이용하여 초소형의 보드를 제작 했다. 기존에 제작했던 보드와 호환성을 유지하면서 소형으로 만들어 여러 용도로 사용하고 있다.


Atmega88의 UART, SPI, I2C, ADC등 가장 필수 적인 기능만 두어 초소형으로 만들었다.





2.54 피치로 브레드보드에 연결하여 테스트 가능하다.






기존의 MSP430등의  [SS-Type EVM EVMM] 보드와 핀 호환 되도록  제작 하였다.






[Atmege8-SS EVM]  ISP 및 확장 테스트 보드
모든 포트는 빠져 있고 ISP 및 USB2UART를 이용하여 디버깅 가능하다.







Posted by nexp

댓글을 달아 주세요

[AVR]/Mega82011. 9. 22. 23:30

[Atmega8 EVM] USB HID 테스트

[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값을 그래프로 표시하는 테스트 이다. 소프트웨어 스텍임에도 속도가 나쁘지 않다.




Posted by nexp

댓글을 달아 주세요

  1. fjkd

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

    2011.10.29 12:43 [ ADDR : EDIT/ DEL : REPLY ]
  2. sinwho

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

    2012.08.21 09:37 [ ADDR : EDIT/ DEL : REPLY ]
  3. 서동훈

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

    2016.02.02 22:24 [ ADDR : EDIT/ DEL : REPLY ]

[AVR]/Mega82009. 9. 16. 20:41

ATMega168 을 이용한 오버클럭 속도 측정

ATMega168 을 이용한 오버클럭 속도 측정



ATMega168 을 이용해서 GPIO 토글속도를 측정 했다. Mega168는 20Mhz까지 구동 가능하므로 24Mhz에서 측정해 보았다.
24Mhz -> 209ns/2.4Mhz

[다른 MCU속도 측정 결과]와 비교 하면 저렴한 Mega168에서 상당히 빠른것 같다.

ATMega168 GPIO속도 측정 소스코드
#define Led1Toggle()              Tbi(LED1_PORT, LED1_BIT)   //PORTB ^= BIT1

int main(void)
{
 SystemInit();

 Led1Init();
 Led1On();

 while (1)
 {
  Led1Toggle();
  //Delay(100);
 }  
}


WinAVR(AVR Gcc) 옵티마이즈 옵션



컴파일러의 어샘블 결과는 아래와 같다. 5 머쉰사이클 정도 나온다.
Level-s 209ns/2.4Mhz
 while (1)
 {
  Led1Toggle();
  88: 92 e0        ldi r25, 0x02 ; 2
  8a: 85 b1        in r24, 0x05 ; 5
  8c: 89 27        eor r24, r25
  8e: 85 b9        out 0x05, r24 ; 5
  90: fc cf        rjmp .-8       ; 0x8a <main+0xa>

Level-0 500ns/1Mhz
  while (1)
 {
  Led1Toggle();
  a8: a5 e2        ldi r26, 0x25 ; 37
  aa: b0 e0        ldi r27, 0x00 ; 0
  ac: e5 e2        ldi r30, 0x25 ; 37
  ae: f0 e0        ldi r31, 0x00 ; 0
  b0: 90 81        ld r25, Z
  b2: 82 e0        ldi r24, 0x02 ; 2
  b4: 89 27        eor r24, r25
  b6: 8c 93        st X, r24
  b8: f7 cf        rjmp .-18      ; 0xa8 <main+0x28>
Posted by nexp

댓글을 달아 주세요

[AVR]/Mega82009. 5. 8. 22:40

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

[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



Posted by nexp

댓글을 달아 주세요