9. for문에 대하여

.

(http://parkya.tistory.com/1107) 참고자료. 이거 생각하고 진행하면 되겠다.

설정

트랙백

댓글

(1.20) 연구실 자리 셋업 및 AVRISP mkII 문제.

.









일단 제일 중요한건 AVRISP mkII라는 시리얼 포트를 이용해서 ATmega168과 연결하는 것인데 큰 문제가 생겼다.


위 사진처럼 포트가 6개가 아니라 10개이다...
아무리 구글링을 해봐도 포트가 6개인 것만 나오는데 10개는 어떻게 쓰는 것인지...


그나마 찾은 독일 사이트(http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Atmel_Board-Schnittstelle_.26_AVRISP_MkII)

독일 사이트에서는 핀 구성이 이렇게 나와 있다고 하는데... 나와 수퍼바이저는 고민하다가 새로 6핀 커넥터를 사기로 했다 ~_~;



그 전에 Atmel 회사에서 유저가이드를 만들은 것을 알게 되었는데 유용할 듯.


여기에서 User guide를 찾는다.(http://www.atmel.com/tools/avrispmkii.aspx?tab=documents)

-User guide 주소->(http://www.atmel.no/webdoc/)



(http://www.atmel.no/webdoc/avrispmkii/index.html)-(http://www.atmel.no/webdoc/avrispmkii/avrispmkii.hardware_targetinterface.html)


타겟인터페이스-ISP인터페이스.



지금 가장 큰 문제는 Atmega168칩과 연결을 해서 코딩을 시작해야 되는데 할 수가 없고

그리고 일을 빨리 끝내려면 예제 소스가 많아야 하는데 없다는 것이다.

그리고 시간은 한 달 밖에 남지 않았고 허허... 그거참.

설정

트랙백

댓글

4. 배열에 대한 궁금증.

참고자료 (http://cafe.naver.com/cafec/288156)


-int형 배열연습


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    int i[3];  // 선언과 동시에 초기화 하려면 int i[3] = {1,2,3}; 도 가능하다.
    i[0]=1;
    i[1]=2;
    i[2]=3;
    printf("%d\n",i[0]);
    printf("%d\n",i[1]);
    printf("%d\n",i[2]);
    for(;;);    
}

각각의 배열 자리값 i[0], i[1], i[2]에 초기화를 안해주면 쓰레기값..

3개중 하나라도 0이든 뭐든 초기화 해주면 나머지는 선언 안해도 알아서 0으로 초기화됨.


-변수형 배열

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
 
int main()
{
    int i[3];
    int j=1;
    i[0]=1;
    i[j]=2;
    i[j+1]=3;
    printf("%d\n",i[0]);
    printf("%d\n",i[j]);
    printf("%d\n",i[2]);
    for(;;);    
}
 
 
#include <stdio.h>
 
int main()
{
    int score[5];
    int i;
    for(i=0;i<5;i=i+1)
    {
        printf("%d번 학생 점수 입력 : ",i+1);
        scanf("%d", &score[i]);
    }
    for(i=0;i<5;i=i+1){
        printf("%d번 학생 %d점\n",i+1,score[i]);
    }
    for(;;);
}
 
 

이건 좀 어려웠다.

=========================================================================================================


그런데 배열 코드를 연습하다 보니 문제가 생겼다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
#include <stdio.h>
 
int main()
{
    int aaa[3][5]={{1,1,1,1,1},{2,2,2,2,2},{3,3,3,3,3}};  // aaa[0][0]={1}
    int i=0;
    int j=0;
    
    for(i;i<4;i=i+1)
    {
        for(j;j<5;j=j+1)
        {
        printf("%d", aaa[i][j]);
        }
        printf("\n");
    }
 
    for(;;);
}
 



위의 코드를 보면 처음부터 변수를 0으로 초기화 시켜 두었다. 이런 경우 내가 원하는


11111

22222

33333 

이런 결과물이 나오지 않는다;; 왜이럴까


반대로

아래 코드와 같이 for문 안에서 =0 으로 초기화 시키면 결과가 잘 나온다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main()
{
    int aaa[3][5]={{1,1,1,1,1},{2,2,2,2,2},{3,3,3,3,3}};  // aaa[0][0]={1}
    int i;
    int j;
    
    for(i=0;i<3;i=i+1)
    {
        for(j=0;j<5;j=j+1)
        {
        printf("%d", aaa[i][j]);
        }
        printf("\n");
    }
 
    for(;;);
}


왜 이런 문제가 생기는 것인가..?


설정

트랙백

댓글

2. AVRstudio4 실행법. with ATmega168

참고자료(http://binworld.kr/5)



1. 설치가 완료되었으면 시작 > Atmel AVR tools > AVR Studio 4를 실행.


2. New Project를 눌러 새로운 프로젝트를 시작.


-1. 프로젝트 타입은 C언어로 코딩할것이므로 AVR GCC를 선택.

-2. 파일 이름을 정한다.

-3. Location 코드가 저장될 폴더를 ... 버튼을 눌러 지정.

저장될 장소에 폴더를 만들어 지정해서 저장해도 되나 이미지 처럼 Location을 문서로 지정해

두고 Create folder를 체크해두면 자동으로 폴더가 생성됩니다.

Next를 눌러 다음으로 진행합니다.


3. AVR 시뮬레이터 설정을 해준다.



시뮬레이션을 할때 필요하며 기본을 다지는데는 중요하지 않습니다.

Debug platform에서 AVR Simulator를 선택하고 Device에서 사용하는 AVR을 선택하고

Finish를 눌러서 새 프로젝트 생성을 완료합니다.



=========================================================================================================


이 밑에 더 있지만 다음은 위 스샷과 같이 Device를 알아야 한다.

아마 내가 이번 연구실에서 쓰게 될 IC chip은 ATmega168인 것 같다.

설정

트랙백

댓글

1. 설치하기 - AVR Studio 4 설치->WinAvr 설치->avr-toolchain->USB driver 설치


설치파일-(http://binworld.kr/5)

설치방법 참고자료-(http://blog.naver.com/kgg1959?Redirect=Log&logNo=30178551080)


찾는데 한참 걸린다.


구글클라우드에 자료를 다 모아놓았다.

(https://drive.google.com/folderview?id=0BwORqrY3RIy3d1o0bXExT19sRmc&usp=sharing)


=========================================================================================================


1. AVR Studio 4 설치


이렇게 생긴 파일을 가지고 설치.







여기서 주의! 가만히 기다리면 설치가 되는 것이 아니라

따로 USB 드라이버를 설치하는 창이 뜬다.

거기서 다시 경로지정을 하고 설치까지 완료해야됨.


이렇게 또 새로운 AVR Jungo USB가 뜬다.


이건 다른 블로그에는 없는 과정인데... 그냥 설치...

완료.


=========================================================================================================

2. WinAvr 설치

참고자료(http://blog.naver.com/kgg1959/30178549026)


AVR STUDIO 5.0 버전 아래 버전은 프로그램 자체에 컴파일러가 포함되어 있지 않아 컴파일러를 따로 설치해야 함.






마침.


=========================================================================================================

3. avr-toolchain-installer-3.3.0.710 설치


avr-toolchain-installer-3.3.0.710-win32.win32.x86











=========================================================================================================


4. Chip 드라이버 설치

이 부분은 나중에 해야될 것 같다. 직접 연결로.(http://blog.naver.com/kgg1959/30178549954)





설정

트랙백

댓글

3. 함수나누기 void형 함수

강좌 18, 19


강좌 19-(http://cafe.naver.com/cafec.cafe?iframe_url=/ArticleRead.nhn%3Fclubid=10026632%26page=3%26menuid=149%26boardtype=L%26articleid=287668%26referrerAllArticles=false)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
void triangle(int height)
{
    int i=0;
    int j=0;
 
 
    for(i;i<height;i=i+1)
    {
        for(j;j<=i;j=j+1)
        {
            printf("#");
        }
        printf("\n");
    }
}
 
int main()
{
    triangle(5);
    for(;;);
}
 


이렇게 하면 



아래 그림처럼 나오는데



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
void triangle(int height)
{
     int i, j;
     for(i=0;i<height;i=i+1){
     for(j=0;j<=i;j=j+1){
     printf("#");
     }
     printf("\n");
     }
}
int main()
{
    triangle(5);
    for(;;);
}


이렇게 코드를 입력하면



차이가 뭐지??

설정

트랙백

댓글

2. for문과 조건문

http://blog.naver.com/fflash4/30150789726


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main(){
    int i=0;
    int a=0;
 
    for(i;;i=i+1){
        printf("정수 입력 :");
        scanf("%d", &a);
 
        if(a>1){
            printf("입력한 값이 1보다 큽니다");
        }
        else if(a<1){
            printf("입력한 값이 1보다 작습니다");
        }
        else{
            printf("입력한 값이 1입니다");
        }
    }
    for(;;);
}


설정

트랙백

댓글

1. for문과 scanf를 이용한 문제.


참고자료 (http://blog.naver.com/fflash4/30150577724)


무한 루프를 이용하여 scanf() 함수로 두개의 정수를 사용자로부터 입력받아

두 정수의 합을 출력하는 프로그램을 제작 하세요


여기 숙제처럼 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(){
    int a;
    int b;
    
    int i=0;
    int c=a+b;
 
    for(i; ;i=i+1){
    printf("정수 두개 입력 :");
    scanf("%d %d", &a, &b);
    
    printf("\n");
    printf("두 수의 합 : %d \n", c);
    }
    for(;;);
}


이렇게 적고 F5 하면, 아래 스샷과 같이 경고문이 나온다.


계속을 하면 실행은 되지만... 결과가



이런식으로 나온다...


하지만 int c를 지우고 printf 함수에 a+b 의 값을 받아오게 하면 잘된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(){
    int a;
    int b;
    
    int i=0;
    
 
    for(i; ;i=i+1){
    printf("정수 두개 입력 :");
    scanf("%d %d", &a, &b);
    
    printf("\n");
    printf("두 수의 합 : %d \n", a+b);
    }
    for(;;);
}


원인이 뭘까??

설정

트랙백

댓글