운동 기록 10일차


개인적인 기록이므로 편하게 기록합니다.


* 모두 10회씩 진행하였다.

* 매 푸시업 전 30초 휴식

푸시업 -> 점핑 스쿼트 -> 크런치 -> 푸시업 -> 무릎 굽혀 팔벌려 뛰기 -> 자전거타기(누워서 허공자전거) -> 푸시업 -> Mountain Climber -> PT 8번 -> 푸시업 -> 스쿼트 -> 크로스 레그 싯업(윗몸일으키기) -> 푸시업 -> 무릎 높이 올려 뛰기 -> 사이드 크런치 -> 푸시업 -> 버피 -> 푸시업 -> leg climber -> 푸시업 -> 무릎 들어 높이 뛰기 -> 러시안 트위스트 -> 푸시업 -> 점프 스쿼트 -> 다리 올리고 크런치


쉬지않고 쭉 돌면 30분 이내로 운동이 끝난다.


오늘은 구성이 긴 운동으로 하여 시간이 조금 오래 걸렸다. 25분!


조금 쉬었다고 해도 꾸준히 하니까 체력이 점점 올라오는 것 같다. 하지만 뱃살은 들어갈 생각을 하질 않는다...

운동 기록 9일차


*개인적인 기록이므로 편하게 기록합니다.


9일차에 운동 스케쥴이 있지만, 아침부터 수업이 있어서 운동을 못하였다.... 흑흑

'ETC > 운동 기록' 카테고리의 다른 글

[운동 기록] 운동기록 11일차!  (0) 2018.10.19
[운동 기록] 운동 기록 10일 차!  (0) 2018.10.19
[운동 기록] 운동 기록 8일차  (0) 2018.10.11
[운동기록] 운동 5일차  (0) 2018.10.08
[운동기록] 운동 4일차  (0) 2018.10.08

구글 애드센스(AdSense)가 갑자기 나오지 않을 때!



인터넷에 많은 '애드센스'가 갑자기 나오지 않았을 때 대처할 수 있는 팁이 있었지만, 제가 겪었던 상황은 조금 달라서 여기에 공유드립니다.


저의 경우 구글 애드센스를 처음 승인 받고 몇 시간 안되어서 애드센스 광고가 송출되었는데, 그 이후로 잠시 블로그를 떠나 있었을 때, 애드센스 광고가 중단된 적이 있습니다.


몇 달 전 다시 블로그에 왔을 때, 그 모든 칸이 공란이더라구요.


그래서 아 혹시 취소됐나... 하고 애드센스가서 광고단위를 눌러 보았는데, 싹다 사라져 있더군요.


하.. 진짜 암담했습니다. 아예 다시 시작했어야 했으니까요.


그래서 광고단위를 다시 만들어서 블로그에 다시 또 링크시키고 하는 삽질을 했습니다.


그렇게 며칠 뒤엔 다시 나오겠지... 했는데, 오늘까지도 안나오더군요! 일주일이 넘었습니다.


그래서 다시 애드센스에 들어가 보았는데... 광고단위가 또 사라져 있었습니다.



완전 좌절... 다시 만들어야 하나... 싶었을 때!


광고단위 옆에 필터를 눌러서 '모든 항목 보기'를 눌러주세요.


저는 여기서 광고들이 '운영중지'상태가 되면, 자동으로 표시가 안되고 사라졌던 것이더라구요.


보니까 전에 사라졌던 광고단위들도 다 거기 있었습니다...


애꿎은 삽질만 한 것이지요...



다행히도 오늘 다시 삽질하기전에 알아서 다행입니다!



이 상황에 따른 대처법은 매일 블로그를 잘 관리해주며 '기다리는' 것 뿐이라네요...


만약 다시 트래픽이 생기고 광고가 많이 노출되게 되면 자연스럽게 다시 게재 된다고 합니다.




18.11.05 추가-

 며칠을 기다려봐도 해결될 기미가 보이지 않아 혹시 광고단위의 문제가 아니라 블로그 자체가 연동이 되어 있지 않은가 싶어서 메뉴 중 '광고' -> '기타제품'을 선택하여 블로그 이름을 다시 입력한 뒤 신청요청을 하였습니다. 이 메뉴는 본인의 애드센스 승인된 블로그 이외에 다른 사이트를 추가할 때 사용되는 메뉴인데, 저는 여기서 제 블로그를 다시 심사 신청하였고, (정확히) 3일 뒤 승인 메일과 함께 다시 블로그에 광고가 게재되기 시작하였습니다. 혹시 광고단위 설정 후 '신규'에서 블로그에 게재되지 않은 채 7일이 지나 '운영중지'상태로 넘어가는 경우 블로그가 제대로 애드센스에 연동이 되어있나 확인해 보시고, '기타제품'으로 다시한번 신청해보시는 것도 한 가지 해결책이라 보입니다.

ATmega128로 FND 만들고 활용하기! -추가실험-



저번에 확인해 보기로 하였던 DDR을 0로 만든 후 PIN으로 바꾸어 보는 실험은 제대로 동작하지 않았습니다!


아마 PIN같은 경우에는 같은 전압을 걸어서 전류가 흐르게 하지 못하는 효과를 내지 못하여서 그런 것 같습니다!

운동 기록 8일차


개인적인 기록이므로 편하게 기록합니다.


* 모두 10회씩 진행하였다.

* 매 푸시업 전 30초 휴식

푸시업 -> high knee -> 크로스 레그 크런치 -> 푸시업 -> 점프 스쿼트 -> 공중자전거 -> 푸시업 -> 버피 -> 누워서 다리 차기 -> 푸시업 -> 사이드 스텝 -> 러시안 트위스트 -> 푸시업 -> 팔벌려뛰기 -> 엉덩이 들기 -> 푸시업 -> 발꿈치 들고 스쿼트 -> 사이드 플랭크 -> 푸시업 -> 무릎 굽혀 팔벌려 뛰기 -> 다리 올리고 크런치 -> 푸시업 -> 제자리 점프 -> 플랭크


쉬지않고 쭉 돌면 30분 이내로 운동이 끝난다.


오늘 운동이 제일 빡쎘다. 25분!


스케쥴상 6일과 7일차는 휴식이었다.


그래도 확실히 꾸준히 하니까 첫 날보다 확실히 좋아진 것이 느껴진다!

'ETC > 운동 기록' 카테고리의 다른 글

[운동 기록] 운동 기록 10일 차!  (0) 2018.10.19
[운동 기록] 운동기록 9일차!  (0) 2018.10.19
[운동기록] 운동 5일차  (0) 2018.10.08
[운동기록] 운동 4일차  (0) 2018.10.08
[운동기록] 운동 3일차  (0) 2018.10.08

 

60갑자에 대하여
+연도를 입력하면 천간과 지지를 알려주는 프로그램(임인년, 계묘년 등)
(띠 찾기, 00년 계산)

 

* 프로그램은 글 최하단에 있습니다! *



살다보면 천간과 지지를 이용한 연도표기를 많이 보게 되는데요. (2018 무술년, 2017 정유년, 2016 병X년...)

전체를 표시해 보면 다음과 같습니다.

甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 甲戌 乙亥
갑자 을축 병인 정묘 무진 기사 경오 신미 임신 계유 갑술 을해

丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 甲申 乙酉 丙戌 丁亥
병자 정축 무인 기묘 경진 신사 임오 계미 갑신 을유 병술 정해

戊子 己丑 庚寅 辛卯 壬辰 癸巳 甲午 乙未 丙申 丁酉 戊戌 己亥
무자 기축 경인 신묘 임진 계사 갑오 을미 병신 정유 무술 기해

庚子 辛丑 壬寅 癸卯 甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥
경자 신축 임인 계묘 갑진 을사 병오 정미 무신 기유 경술 신해

壬子 癸丑 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥
임자 계축 갑인 을묘 병진 정사 무오 기미 경신 신유 임술 계해


이렇게 60 갑자인데요.

천간 10개 (갑, 을, 병, 정, 무, 기, 경, 신, 임, 계)와 지지 12개(자, 축, 인, 묘, 진, 사, 오, 미, 신, 유, 술, 해)의 조합으로 이루어 집니다.

얼핏 10*12의 120개의 갑자가 나올 것 같지만, 60갑자인 이유는, 두개의 조합이 동시에 움직이기 때문이에요.

그래서 천간의 홀수 번째 글자는 지지의 홀수 번재 글자와만 만나게 되어 60개 조합이 생기게 된답니다!

[10*120/2=60 혹은 빨간 표신된 '갑'이 들어간 천간이 6번 반복되니까 6*10=60!]


이걸 육십갑자(六十甲子) 혹은 줄여서 육갑(六甲)이라고 부른다고 하네요!


또한 띠를 표시할 때 이렇게 표시하기도 하죠. 백말 띠, 황금돼지 띠 이렇게요.

근데 의외로 이거를 변환해주는 사이트나 프로그램이 없더군요!

이번 추석 때 친척들과 이야기 하는데 참 사람의 개인 년도로 태어난 해의 간지를 찾기가 너무 힘들었어서 만들어봤습니다!

그냥 연도만 아래에 입력 해 주시면 그 해에 해당하는 간지를 표기해 줍니다!


또한 천간과 지지 옆에 한글로 이것이 무엇을 뜻하는지를 병기해 놓아서 읽기에 굉장히 좋습니다!

예를 들어 아래 입력하는 공간에 1592를 입력하면... 임진년이 나옵니다! 이 해는 임진왜란이 있던 해이죠!
이렇게 역사적으로도 간지를 사용하여 역사적 사건을 표기한답니다!
임진년은 검은 용의 해였네요!


그럼 잘 쓰시고 좋은하루 되세요!!

[저 처럼 한 해 찾는다고 몇십분 동안 핸드폰으로 계산해가며 검색하지 마세요.....!]

 

* 버전 1버전 2를 같이 올립니다!

* 버전 1은 간단하게 해당 년도의 천간지지, 띠, 서기, 단기 만을 알려주며 계산결과가 빠릅니다.

* 버전 2.0는 버전 1에 더해서 더 자세하게, 음력 1월 1일을 기점으로 바뀌는 천간지지의 특성을 반영하여, 양력 몇월며칠부터가 진짜로 해당 년도의 천간지지인지 알려주지만, 계산이 보통 10초 내외느리며 가끔씩 네트워크 오류로 작동이 안될수도 있으나 이때는 약 5분 정도 있다가 다시 계산해주시면 됩니다.

* 버전 2.1은 버전 1에 더해서 더 자세하게, 음력 1월 1일을 기점으로 바뀌는 천간지지의 특성을 반영하여, 양력 몇월며칠부터가 진짜로 해당 년도의 천간지지인지 알려줍니다. 음력계산은 단순한 로직이 아니라 아주 복잡한 계산을 하기에 생활천문관 서버와 통신이 필요하기 때문에 통신시간이 조금 걸립니다. 그러나 버전 2.0에서 문제였던 느린 통신시간네트워크 먹통의 문제를 해결하여 버전 2.1에서는 1.5초 내외로 통신속도를 개선하였으며, 네트워크 오류 문제를 해결하여 2.0에 비해 먹통이 되는 문제를 완벽히 개선하였습니다.

 

- 버전1

여기에 입력 vvv 후 '계산!' 버튼을 눌러 주세요!

연도입력 :




- 버전2.1

여기에 입력 vvv 후 '계산!' 버튼을 눌러 주세요!

연도입력 :






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


ATmega128로 FND 만들고 활용하기!



안녕하십니까?


하루 지나고 다시 글을 올리게 되었습니다.


그 전까지는 사실 배선도그렇고, 개념도 그렇고, 프로그래밍도 그렇고 사실 별로 그렇게 많이 어렵지 않아서 그냥 무작정 따라하기 3단계(배선! 프로그래밍! 실행!)이렇게 스파르타하게 달려왔다면 이번 것은 저도 굉장히 애를 먹었던 부분이라 조금 자세하게 설명하겠습니다.


그 전과는 뭔가 포스팅 분위기부터가 많이 달라졌죠? [몰아서 올리지 않아서 그렇습니다.]


오늘 해 볼것은 FND다루기 입니다.

FND는 Finite Numeric Display의 약자로써 7-Segment(이전 포스팅을 참조 해 주세요!)를 4개 붙여 놓은 것과 같은 형상입니다.


사실 FND와 7-Segment는 서로 교차되서 부르기도 하는데, 1자리 7-Segment를 FND로 부르기도 합니다. (사실 Finite Numeric이니까 길이 제한만 있으면 어떤 Display에 다 써도 될 것 같지만요...)


먼저 준비사항에 대하여 알아보겠습니다.


0] 준비

1) AVR

너무 당연. 항상 ATmega128을 사용하고 있습니다.

2) USB허브

깜빡하고 전 포스팅에서 언급하지 않았었는데, 따로 콘센트-플러그가 있는 USB 허브 제품(그냥 USB하나 달랑 컴퓨터에 꽂는 것이 아니라 거기에 추가로 220V 플러그가 추가로 달려있는)이 혹여 제품에 과도한 전류가 흘렀을 때도 컴퓨터에 영향을 주지 않는다고 합니다.

3) FND

이번에 사용할 모델은 HSN-5643AS-H 입니다. 4자리 7-Segment입니다.

핀은 아래와 같습니다.

여기서 D1, D2, D3, D4는 각 자리를 표시해주는 핀이며, A~G까지의 핀은 각 11, 7, 4, 2, 1, 10, 5에 매치됩니다. 3번 핀은 DP(Dot Point)입니다.

특히 이 모델은 공통 캐소드(CC) 방식으로 각 핀에 주어진 source전류가 한번에 Dx핀으로 빠져나갑니다.

즉, 8개 다 켜지면 sink 전류가 ATmega가 최대로 받아들일 수 있는 전류 100mA 보다 커지므로 필수적으로 저항을 설치해 줘야 합니다. 역기서는 A~DP까지 하나하나 저항을 달아주는 방법과, 각 Drain port에 큰 저항을 4개 써주는 방법이 있겠습니다. 저는 드레인 포트에 큰 저항을 4개 써 주었습니다.

보시면 아시겠지만 A~DP에 해당하는 핀이 1개씩밖에 없으므로 이 4개가 연속된 FND는 순차적으로 불을 켜서 표시하게 됩니다. 즉, 눈의 잔상효과로 인해 사실은 네개가 동시에 켜져있는 것이 아니지만, 인간은 한번에 다 켜져있다고 생각하게 되는 것이죠.

4) 10K 저항 *4

10K 저항을 Drain Port에 달아주었습니다. 너무 어두우면 1K 저항까지도 사용이 가능합니다.


항상 이론과 실제의 오차가 존재하듯이, 실수로 저항 없이 바로 연결이 된 적이 생겼었는데, 다행히도 어떤 부품도 상하지는 않았습니다만... 조심하시는 것이 좋을 것 같습니다.


1] 이 부품의 핀을 보고 배선을 해줍니다.

저번 7Segment와 동일하게 A~DP까지는 PORTA0~7에 연결하였습니다. 그리고 D1~4는 각 PORTG0~3에 연결하였습니다.

각 D1~D4까지는 저항을 달아주었습니다. 브레드보드(빵판)에서는 세로줄이 전부 연결이므로 핀 꽂을때 저항을 달면 옆으로 조금씩밀어주시면 되겠습니다. 같은 라인에 연결하면 전류가 저항 없이 다이렉트로 FND핀에 꽂힙니다. (이렇게 해서 저는 실수했었습니다.)


배선은 그다지 어렵지 않습니다. 그저 시간과 노가다가 오래 걸릴뿐...


2] 프로그래밍!!!!!!

대망의 프로그래밍입니다.

D1~D4는 전류가 빠져나가는 (-)입니다. 다시말해, PORTG0가 1이면 D1에서 전류를 못 흐르게 막는 다는 것이고, 이 말은 D1을 끈다는 소리와 같습니다. 그러면 PORTG0가 0이면 sink 포트가 되면서 전류가 흘러 해당하는 자리에 불이 들어오게 됩니다.

소스는 아래와 같습니다.


#include <avr/io.h>

#include <util/delay.h>

#define F_CPU 16000000UL


int d2b[10] = {0b00111111,

0b00000110,

0b01011011,

0b01001111,

0b01100110,

0b01101101,

0b01111101,

0b00100111,

0b01111111,

0b01101111};


int main(void)

{

    DDRA = 0xFF;

    DDRG = 0b00001111;

    int dp = 0b10000000;

    int flag = 0b00000000;

while(1){

for (int c=3 ; c<13 ; c++){

for (int k=0 ; k<50 ; k++){

for (int i=0 ; i<4 ; i++){

PORTA = d2b[(c-i)%10]|(dp&flag);

flag = ~flag;

PORTG = ~(0b1<<i);

_delay_ms(100);

}

}

flag = ~flag;

}

}

return 0;

}


저번 7segment에서는 각 핀이 (-)역할을 하였으므로 위에서 표시된 0b00111111을 비트 반전시켜서 포트에 출력했을 시 0이 나왔지만, 이번에는 각 핀이 (+) 단자이니 이 코드를 그대로 쓰겠습니다. d2b[0]~d2b[9]는 각 0~9를 나타냅니다.


A포트는 모든 핀을 출력핀으로 사용할 것이니 DDRA = 0xFF;로 모두 개방해줍니다.

G포트는 0~3 핀만 출력핀으로 사용할 것이니 DDRA = 0b00001111;로 첫 4개만 개방해줍니다. 여기서 PORT로 5V를 줬다 뺐다 하는 식으로 조작할 건데 이 부분을 DDR반전 시키고 PIN으로 처리해도 될 것은 같습니다만 제가 해보지 않아서 단정지을 수는 없을 것 같습니다.


dp와 flag는 저번 포스팅에서도 말씀드렸다시피 dp의 깜빡거림을 제어하기 위한 장치였기 때문에 dp와 flag를 모두 빼시고 보시면 더 소스가 간결해집니다. 여유가 되시는 분들은 한번 저 두 변수의 역할에 대해 생각해 보시는 것도 좋은 유흥이 될 것이라 생각합니다.


반복문은 가장 안쪽에서 부터 보는 것이 로직 이해해 도움이 됩니다.

가장 안쪽을 보면 4번 돌아가는 for문이 있는데, 이 것은 대충 눈치 채셨다시피 각 자릿수에 해당하는 것입니다. PORTG를 순서대로 개방하면서 각 PORTG에 해당하는 숫자를 PORTA로 지정해주는 것입니다. 저는 왼쪽으로 밀 것이기 때문에 10개 자릿 수 내에서 돌아가도록 10을 나눠주어 빙글빙글 돌렸습니다.

출력은 D4부터 D1순서로 돌아오므로 D4에 3이 나오게 하기 위해서 c변수를 3에서 출발시켰구요, 자릿수가 오름에 따라서 숫자를 하나씩 줄이기 위해서 c-i를 썼습니다.

_delay_ms()함수를 조절해보면 눈에서 이 문자가 덜 깜빡거리면서 동시에 켜져있는 것처럼 보이게 되는 지점이 있습니다. 대략 125면 어느정도 깜빡이는 수준 안에서 동시에 출력되는 것으로 보입니다. 저는 100이 가장 괜찮았습니다.

그 밖에서 50번 도는 for는 글자를 약 1초간 지속적으로 표시해주는 역할입니다. 왼쪽으로 미는 것처럼 보일 것이기 때문에 숫자가 바뀌는 부분과 표시하는 부분은 따로 진행이 되어야 합니다.

대망의 가장 바깥쪽 for문은 숫자를 증가시켜주는 역할입니다. 가장 오른쪽 숫자를 1씩 증가시키는데, 이렇게 디스플레이하면 왠지 숫자가 옆으로 진행하는 것 같죠.


이렇게 준비가 끝났습니다.

AVR에서 실행시켜보죠!


3] 실행!


자 이렇게 어려운 FND도 마무리 해 보았습니다.


다음에 다시 찾아뵙겠습니다.

#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) 실행한다!


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


다음에 다시 뵙겠습니다.

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


ATmega128로 7-segment LED 조작하기!


애석하게도 따로 찍은 사진이 없어 영상 속 화면으로 대체합니다.



1) 배선한다!

사진 속 7-segment LED는 5611BH 모델입니다. 이 모델은 공통 전원부가 (-)가 아닌 (+)입니다. 즉, 아래 이미지에서 8번 핀에 ATmega 그림에서 아래쪽에서 제일 왼쪽에 있는 VEXT 포트를 연결해주어야 합니다.

저는 A부터 차례대로 PA0와 대응시켰습니다. 즉, A-PA0, B-PA1식으로 DP-PA7로 하였습니다.


2) 프로그래밍 한다!

소스코드입니다.

#include <avr/io.h>


int d2b[10] = {0b10111111,

0b10000110,

0b11011011,

0b11001111,

0b11100110,

0b11101101,

0b11111101,

0b10100111,

0b11111111,

0b11101111};


void delay_secp10(int sec){

volatile int i, j, k;

for(k=0;k<sec;k++){

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

for(j=0;j<1000;j++);

}

}

}


int main(void)

{

    DDRA = 0xFF;

    int dp = 0b10000000;

    int flag = 0b00000000;

while(1){

for (int i=9 ; i>-1 ; i--){

PORTA = ~(d2b[i])|(dp&flag);

delay_secp10(5);

flag = ~flag;

PORTA = ~(d2b[i])|(dp&flag);

delay_secp10(5);

flag = ~flag;

}

}

return 0;

}

d2b배열은 인덱스 넘버가 곧 그 숫자를 표시하는 2진수 바이너리 코드입니다. 즉, 0은 마지막 G핀만 제외하고 나머지가 모두 점등되어야 하므로 0b10111111입니다.

또한 여기서는 delay_secp10이란 함수를 썼는데, 이는 그 전에 delay_sec을 10등분 한 함수입니다. 1초에 dot point를 두번 깜빡여주고 싶어서 만들었습니다.

dp와 flag모두 두번깜빡여주기 위해 만든건데 사실 dp 깜빡임밖에 효과가 없으므로 빼고 진행하셔도 무방합니다.


3) 실행한다!


다음에 뵙겠습니다.

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


ATmega128로 신호등 만들기!


ATmega128이 무엇인지는 현대 인터넷 사회에서 다른 곳에서 엄청 자세히 나와있으므로 일단 실습으로 바로 넘어가겠습니다.


저도 처음입니다!


무작정 따라하기 입니다!


1) 배선한다

2) 프로그래밍 짠다

3) ATmega에 넣어준다!




빨간기판이 ATmega128입니다.

아래쪽 왼쪽에서 두번째가 GND(그라운드)이므로 -선을 연결하여 주시고, 바로 다음부터 있는 PA0번과 1번을 각각 빨간불, 초록불에 대응시켰습니다.


즉, 0번(혹은 1번)이 신호에 따라 +신호를 주고, 이것이 LED로 가서 불을 켜고, GND인 -로 들어오는 회로입니다.


사진에서는 LED가 너무 밝아 각 1K ohm의 저항을 달아주었습니다.


영상에서는 그냥 다이렉트로 꽂혀있는데, 영상쪽이 훨씬 직관적입니다.



아래는 소스코드 입니다.


#include <avr/io.h>


void delay_sec(int sec){

volatile int i, j, k;

for(k=0;k<sec;k++){

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

for(j=0;j<1000;j++);

}

}

}


int main(void)

{

DDRA = 0b00000011;

while(1){

delay_sec(1);

PORTA = 0b00000000;

PORTA = 0b00000001;

delay_sec(1);

PORTA = 0b00000000;

PORTA = 0b00000010;

}

}


위에서 delay_sec함수는 ATmega128이 초당 16MHz의 처리 속도를 가지고 있는 것을 바탕으로 대략 근사한 값입니다.

정확히 1초는 아니고 1초보다 약간 더 오래 걸립니다.


정확한 1초는 나중에 또 포스팅하겠습니다.


그럼 다음에 또봐요!


+ Recent posts