본문 바로가기

AVR스터디

(12)
AtTiny13 개발환경 설정 AtTiny13 개발환경 설정 AVR Tiny13 컴파일 AVRGcc 2004버전과 호환 해서 프로그램을 작성해야 한다면 아래와 같이 설정한다. Tiny13은 AVRGcc 2005버전으로 컴파일 해야 하므로 2005버전을 WinAVR2005디렉토리에 설치하고 make를 호출 해주도록 Edit에 설정한다. Makefile에서 디렉토리를 변경 시켜주면 된다. : # Define directories DIRAVR = C/WinAVR2005 DIRAVRBIN = $(DIRAVR)/bin DIRAVRUTILS = $(DIRAVR)/utils/bin DIRINC = . DIRLIB = $(DIRAVR)/avr/lib : 환경변수 수정 새로운 컴파일러를 위해 환경변수에서 Path부분을 수정 해 주어야 한다. C:\W..
Atmega128을 이용하여 CPU실행속도 측정 테스트 Atmega128을 이용하여 CPU실행속도 측정 테스트 단순히 포트 On/Off만을 이용하여 실행 속도를 테스트 하였다. int main(void) { DDRB = 0xFF; while(1) { PORTB ^= 0xFF; } return 0; } 8FEF ldi r24,lo8(-1) 87BB out 55-0x20,r24 L17: 88B3 in r24,56-0x20 8095 com r24 ;$FF-r24 88BB out 56-0x20,r24 FCCF rjmp .L17 ;(2cycle) 포트를 On/Off 하기위해 5cycle의 CPU클럭이 필요 하므로 1CPU 클럭 : 1/16Mhz = 62ns On/Off주가 : 62ns x 5 = 310ns 실제 오실로스코프 확인 결과 Atmega128(16Mhz) P..
WINAVR에서 long type shift 연산 버그 및 해결법 WINAVR에서 long type으로 시프트연산을 사용하면 0으로되는 현상을 발견했다. 이것때문에 3시간이상 고생했다. 결국 memcpy함수를 이용해서 변수를 복사 하는방법을 해결하였다. unsigned long GetFileSize(void) { unsigned char buffer[4] = {0x00, 0x24, 0x3d, 0x2a}; unsigned long size = 0; printf("%02x ", buffer[0]); printf("%02x ", buffer[1]); printf("%02x ", buffer[2]); printf("%02x ", buffer[3]); printf("\r\n"); //Shif연산 사용 size = (buffer[3]
AVR GPIO관련 자료 AVR GPIO관련 자료 AVR의 각 포트는 DDxn, PORTxn, PINxn 3개의 레지스터로 구성된다. DDRx 레지스터는 포트의 방향을 설정하는데 각비트가 1로 설정되어 있으면 출력이고, 0으로 설정하면 입력으로 설정할 수 있다. 입력핀으로 설정되어 있고 PORTxn 레지스터가 1로 설정하면 풀업 레지스터가 활성화 된다. 풀업 레지스터를 off하려면 PORTxn은 0으로 설정하거나 핀이 출력핀으로 설정하면 된다. 리셋직후 모든 포트핀은 tri-stated상태가 된다 AVR GPIO 기본 예제 unsigned char i; ... /* Define pull-ups and set outputs high */ /* Define directions for port pins */ PORTB = (1

반응형