#AVR, #ATmega 128, #ATmega128, #LED, #ATmel Studio 7, #아두이노, #전자전기, #ATmel Studio


ATmega128로 연속 LED 시퀀스 만들기!



8개 LED가 연속적으로 변화합니다. 코드를 수정할경우 다른 경우도 만들 수 있습니다.

1) 배선한다!

7-segment보다 덜 복잡합니다. 그냥 PA0부터 1번 LED, PA2-2번LED, ... 순으로 입력해주시면 됩니다. 복잡해 보일 것 같아서 저항은 뺐습니다. (LED가 버틸 수 있는 전압이라 뺐습니다)


2) 프로그래밍한다!

#include <avr/io.h>

#include <util/delay.h>


#define F_CPU 16000000UL


int main(void)

{

int i;

DDRA = 0xFF;

while(1){

for (i=0 ; i<8 ; i++){

PORTA = (0b00000001<<i)-1;

_delay_ms(500);

}

for (i=0 ; i<8 ; i++){

PORTA = (0b11111111<<i);

_delay_ms(500);

}

PORTA = 0x0;

_delay_ms(500);

for (i=0 ; i<8 ; i++){

PORTA = (0b10000000>>i)|PORTA;

_delay_ms(500);

}

for (i=0 ; i<8 ; i++){

PORTA = (0b11111111>>i);

_delay_ms(500);

}

}

return 0;

}

이번 프로그래밍에서 정확하게 1초를 계산할 수 있는 방법이 나왔습니다.

util/delay.h를 인클루드 해 주시고 F_CPU를 16000000UL로 define해주세요. 여기서 16000000은 눈치챈 분도 계시겠지만, ATmega128의 구동 Hz입니다. 기본은 10000000UL로 맞추어져 있으니 다시 define해주시는게 정확하게 1초가 맞게됩니다.

빌드시 warning뜨는데, 재정의 warning이니 무시해주셔도 됩니다.


저는 영상과 같은 모양을 구현하기 위해서 위와같은 코드를 짰습니다.

더 간소화 할 수 있을 것 같은 느낌적인 느낌이 들지만 그냥 적당한 선에서 타협하기로 했습니다.


3) 실행한다!


개인적으로 조금 만족할만한 결과가 나왔습니다.


다음에 다시 뵙겠습니다.

+ Recent posts