ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Microchip Studio를 통해 아두이노에 프로그램 업로드 하기 (LED 제어)
    Arduino/Atmel Studio 2020. 12. 31. 22:24

    MPU가 제거되지 않은 아두이노를 연결한다.
    아두이노 프로그램을 띄운다. 툴에서 기본적인 세팅은 아래와 같다.


    아두이노 보드를 테스트 하자.  앞 장에서와 같이 예제 소스 파일을 하나 띄우자.

     

    아래의 내용을 참고하자.

    designatedroom87.tistory.com/354

     

    Atmega Firmware

    pc에서 코드를 작성한다. 임베디드 시스템에서 회로를 제작했다고 하면 이 pc와 임베디드 시스템에서는 프로그래머가 필요하다. 이 프로그래머가 ISP이다. ISP는 SPI혹은 시리얼 통신으

    designatedroom87.tistory.com

     

    파일 -> 예제 -> Basics -> Blink 소스를 선택한다.
    툴 -> 보드 -> Arduino Uno로 선택한다.

    그리고 업로드를 하자. 업로드 시에 에러가 발생한다면 포트 연결부터 확인하자.
    Blink 예제 소스를 아두이노에 업로드를 하면 13번핀 옆에 알파벳 L자 옆에 LED가 주기적으로 깜빡인다.

    그러면 보드 테스트는 완료이다.

     

    그리고 한 가지 설정해야 할 내용이 있다.

    파일 -> 환경 설정 -> 다음 동작중 자세한 출력 보이기에서 컴파일은 체크해제, 업로드는 체크 하고 확인을 선택하자.

    설정은 아래와 같다.

     


    다시 Blink 예제를 업로드 해보자.

    그러면 거의 맨 끝에 아래와 같은 문구를 발견할 수 있다.

     

    avrdude: reading input file "C:\Users\admin\AppData\Local\Temp\arduino_build_225982/Blink.ino.hex"

    컴파일을 하면 위의 경로에 hex파일이 생성되어 아두이노에 업로드가 된다.

     

    예를 들어서,  C언어에서는 main.c라는파일이 있다고 하면 컴파일을 하면 main.hex라는 파일이 생성된다.

    아두이노에서는 main.c에 해당하는 것은 main.ino이며 컴파일을 하면 main.hex가 나타난다.

     

    위에서는 아두이노 프로그램을 통해서 아두이노에 프로그램을 업로드를 하였는데,

    이번에는 Microchip Studio를 통해 프로그램을 업로드를 해보자.

    프로그램을 다운로드 하기 전에 해야할 작업이 있다.

    맨 위쪽에 위와 같은 문구가 있음을 볼 수 있다.

    윈도우 탐색기로 위의 경로로 이동해보자. 경로로 이동하면 아래와 같은 conf라는 확장명의 파일이 있다.

    이 파일을 우선 복사를 하자.

    그리고 C드라이브에 avrdude라는 폴더를 하나 생성해서 복사한 파일을 붙여넣도록 하자.

    그리고 위의 경로의 상위에 bin폴더가 있는데, 이 bin폴더에 들어가서 avrdude.exe 라는 실행파일을 찾도록 하자.

    이 실행 파일 또한 복사를 해서 avrdude폴더에 붙여 넣도록 하자.

    아래와 같이 C드라이브의 avrdude 폴더에 다음의 두 파일이 있으면 된다.

    여기까지가 준비 과정의 끝이라 볼 수 있다.

     

     

    프로그램 파일을 다운을 받아야 한다. 아래의 사이트에서 다운 받도록 하자.

    www.microchip.com/en-us/development-tools-tools-and-software/avr-and-sam-downloads-archive#

     

    AVR and SAM Downloads Archive | Microchip Technology

    To submit your extension to the Atmel Gallery, you'll need an integration with the Atmel Studio platform. The Atmel Studio Extension Developer's Kit (XDK) can assist you with the integration.

    www.microchip.com

     

    아래와 같이 웹 설치 프로그램으로 다운로드를 한다.

    설치 중간에 프로그램 설치하라고 나오는데, 모두 설치를 하도록 한다.

     

    그리고 실행을 해보자. Visual Studio와 많이 닮았다.

    프로젝트를 하나 생성하자.

     

    그리고 다음과 같이 실행가능한 프로젝트를 선택하고 이름은 First로 짓는다.

     

    그리고 다음과 같이 검색창에 atmega328p를 선택한다.

    우리 아두이노에 현재 달려있는 mpu의 모델명이다.

     

    그리고 나서 main.c 파일이 하나 생성되어 있고, 다음과 같이 내용이 작성되어 있다.

     

    우선 프로젝트를 빌드해보자. 그 이유는 hex파일이 생성되었는지 확인해보기 위함이다.

    아래와 같이 Build 탭을 Build First를 선택하자.

     

    그러면 Output 창에 다음과 같은 경로를 볼 수 있다.

    즉, 우리가 이동할 경로는 다음과 같다.

    c:\users\admin\Documents\Atmel Studio\7.0\First\First

     

    위의 경로로 이동하면 아래의 4개의 파일 및 폴더가 보인다.

     

    이 Debug폴더에 들어가면, First.hex 파일이 들어있다.

     

    이 Debug폴더의 hex파일을 아두이노에 집어넣을 방법을 알아보자.

    설정할 내용이 있다.

     

    아래와 같이 Tools탭을 선택하고 External Tools를 선택한다.

     

    그러면 아래와 같이 Menu가 하나 뜬다.

    타이틀을 Atmega328P로 입력하자.

    그리고 Command 항목의 맨 끝을 선택해서 위에서 C드라이브에 생성한 avrdude폴더의 avrdude.exe 파일을 선택하자.

     

    그러면 아래와 같이 Command 항목이 입력된다.

     

    그리고 Arguments 항목을 입력해야 하는데, 입력할 내용이 길고 대소문자를 반드시 구분해야 한다.

    집중하자.

    Arguments 항목에 일단 아래의 문장을 복사해서 붙여넣자.

    아래의 -P COM의 바로 뒤의 숫자는 모두 다를 수 있다.

    포트 번호를 반드시 체크하자. 아두이노 프로그램을 통해서 알아 낼 수 있다.

    -C C:\avrdude\avrdude.conf -v -p atmega328p -c arduino -P COM6 -D -U flash:w:

    그리고 나서, Arguments 항목의 맨 오른쪽에 오른쪽 화살표 모양의 버튼이 있는데 이를 누르자.

    아래와 같이 Target Directory를 선택한다.

     

    다시 오른쪽 화살표를 눌러 이번에는 아래와 같이 Target Name을 선택한다.

     

    그리고 뒤 이어서 .hex:i를 적는다.

    즉,  Arguments 항목에 들어가는 내용은 아래와 같다.

    -C C:\avrdude\avrdude.conf -v -p atmega328p -c arduino -P COM6 -D -U flash:w:$(TargetDir)$(TargetName).hex:i

     

    그리고 마지막으로 Use Output window를 체크하고 Prompt for arguments를 체크하자.

    그리고 Apply를 선택하고 OK를 선택한다.

     

    그리고 아래와 같이 Tools 탭으로 가면 Atmega328P라는 항목이 새로 생성되었다.

    이를 선택해보자.

     

    아래와 같이 Command Line을 보고 OK선택하자.

     

    이 Microchip Studio에서 컴파일 된 코드를 외부프로그램을 이용해서 아두이노에 업로드하겠다는 의미이다.

    아래의 실행결과를 보면 위의 아두이노의 실행결과와 비슷하다.

     

    이 프로그램에서 프로그래밍을 해서 아두이노에 업로드를 해보자.

    우선 기본적으로 설명할 사항은,

    회로도에서 PB5 = 13번핀(아두이노)
    PB4 = 12번핀(아두이노)
    PB3 = 11번핀(아두이노)
    PB2 = 10번핀(아두이노)

    이다.

    DDRB은 입출력을 결정할 레지스터의 주소이다. 

    레지스터는 1바이트(8비트)로 표현된다.

    여기서 모두 LED로 쓸 것이기 때문에 OUTPUT을 의미하도록 모두 1로 설정을 한다.

    그리고 아래의 PORTB는 아두이노에서 digitalWrite와 같은 기능을 한다. 

    PORTB =     0b          0           0          0                0              0            0                  0                     0 

                                                         PB5              PB4          PB3        PB2              PB1              PB0

     

    main.c로 이동해서 LED를 하나 켜거나 끄는 예제를 작성해보자.

     

    그리고 위의 소스는 아래의 소스와 내용이 같다.

    위의 내용에서 아래의 DDRB는 0b00100000으로 PB5를 출력핀으로 사용할 것이며

    PORTB에서 ob00100000으로 PB5(13번핀)을 write를 한다.

    즉, 13번핀을 write하므로 LED가 켜진다.

    아래와 같이 16진수로 표현해도 된다.

    DDRB = 0x20; // DDRB = 0b00100000;
    PORTB = 0x20; // PORTB = 0b00100000;

     

    그리고 아두이노와 하드웨어를 연결해보자.

    입력핀은 아두이노의 13번핀에 연결한다. 아래에서 남색선이다.

    초록선은 아두이노의 GND에 연결한다. 저항은 220옴이다.

     

     

     

    하드웨어의 구성이 끝나면, 아래와 같이 Build탭의 Build First를 선택하자.

    그리고 Tools 탭의 Atmega328P를 선택하고 OK를 선택하면 아두이노에 업로드가 된다.

    그리고 main.c에서 PORTB = 0x00; 로 두고 다시 빌드를 하고 tools -> Atmega328P -> Ok하면

    LED가 꺼지는지 확인하자.

     

    이번에는 LED를 한 개 더 추가하자.

    우선 하드웨어를 구성해보자. 입력핀은 아두이노의 13번핀과 12번핀을 사용한다.

    흰색선은 점프선이다.

     

     

     

    소스는 아래와 같다.

    13번핀과 12번핀은 PB5, PB4이다.

    즉, DDRB는 ob0011 0000으로 구성해서 PB5와 PB4를 출력으로 설정하고

    PORTB에서도 ob0011 0000으로 구성해서, PB5와 PB4를 write한다.

     

    그리고 아래는 2개의 LED를 번갈아 가면서 켜고 끈다.

     

    마지막 예제이다. 세븐 세그먼트를 연결해보자.

    PB0 ~ PB5까지만 연결한다.

    아래의 a~f가 의미하는 것은 세븐 세그먼트의 led의 자리이다.

    DDRB = 0b0011 1111 // 상위 2개는 현재 쓰지 못함( 아두이노의 크리스탈의 위치라서 못씀 )
                      fe  dcba 

    PORTB = 0b0011 1111 로 두자.

    a는 PB0(아두이노 8번핀), b는 PB1(9번핀) 이다.

    아래는 16진수의 표현이다.
    DDRB = 0x3F;
    PORTB = 3F;

     

    하드웨어를 구성해보자. 아래의 세 사진은 GND의 구성에 관한 것이다.

    GND 구성에 두 개의 선을 활용한다. 저항은 220옴이며, 한쪽다리는 빵판의 (-)에 꽂는다.

     

     

    LED를 연결해보자. 연결은 기존의 아두이노 연결과 같다.

    a와 아두이노의 8번핀(PB0)에 연결하고, b는 아두이노의 9번핀(PB1)에 연결한다.

    이와 같이 연결하면,

    f는 아두이노의 13번핀(PB5)에 연결된다.

     

     

     

     

     

    아래는 소스 파일이다.

     

    댓글

Designed by Tistory.