본문 바로가기
728x90
반응형
SMALL

Embedded System/AVR24

[AVR] CTC 비교매치 모드 인터럽트 CTC 비교매치 모드 인터럽트 코드비젼 (CVAVR)은 인터럽트용 헤더파일이 별도로 필요하지 않지만 AVRstudio는 #include 인터럽트 헤더파일을 추가 해야 한다. OCR0로 설정하고 인터럽트는 오버플로우 인터럽트를 사용해도 된다. 특히, 긴 주기를 얻기 위해서 Phase Correct PWM Mode를 사용하는 경우에 TCNT0의 증가와 감소에서 OCR0=TCNT0가 2번 만나게 되는데 이렇게 되면 두번 OCF0가 발생 하므로 긴 주기를 얻지 못한다 (OCR0=0xFF와 OCR0=0x00은 1번). 오버플로우 인터럽트는 BOTTOM에서 한 번만 발생하므로 오버플로우 인터럽트를 사용하면 된다. TCNT0를 Reload 하지 않아서 (Auto Reload) 누적오차가 없으므로 시계 등의 정확한 시.. 2022. 6. 9.
[AVR] JMOD-128-1 JMOD-128-1 JMOD-128-1은 ATmega128 MCU를 이용하여 다양한 기능을 구현하거나 시험해 볼 수 있도록 모듈 형태로 개발된 마이크로콘트롤러 모듈이다. 개발자의 편의를 위하여 소형 모듈에서 프로그램 (ISP) 다운로더 기능을 내장하고 있으며, USB 커넥터 하나로 전원 공급과 ISP 수행, UART (RS232C) 인터페이스를 동시에 처리할 수 있는 기능도 제공한다. ATmega128의 53개 GPIO 전체가 외부 핀으로 연결되어 있으며, 외부공급전원 (VEXT)을 모듈의 공급전원으로 사용할 수도 있도록 하여 3.3V 등, 5V 이하의 입출력 신호 인터페이스도 가능하도록 하였다. 또한, 총 58핀의 인터페이스는 핀 간격이 모두 2.54mm로 되어 있어 일반 브레드보드나 외부 시스템에 쉽.. 2022. 6. 9.
[AVR] 타이머 (Timer) 타이머 (Timer) 타이머 (Timer) / 카운터 (Counter)는 마이크로컨트롤러 응용에서 중요한 자원이다. 타이머는 말 그대로 시간을 재는 기구이다. delay 함수를 사용하여 1/100초 단위의 시간을 잴 수 있다. 반면, 타이머는 좀 더 정확하게 시간을 재기 위하여 마이크로컨트롤러가 사용하는 클락 (JKIT-128-1의 경우 16Mhz)을 기반으로 그 클락 펄스의 개수를 세는 것이라 할 수 있다. 카운터 (counter)는 우리말로 계수기라고 하는데, 한 마디로 개수를 세는 것을 말한다. 어떤 이벤트의 개수, 입장객 수, 걸음 수 등등 마이크로컨트롤러에서 보면 외부에서 어떤 사건 (이벤트)이 발생하는 것의 개수를 세는 형태로 사용된다. ATmega128의 내부에는 4개의 타이머가 있는데 이들.. 2022. 6. 2.
[AVR] MAX7219로 알파벳 표시 MAX7219로 알파벳 표시 #include #define F_CPU 16000000UL // 16 MHz #include #define U08 unsigned char #define CS_1 PORTC|=4 // PC2=1 #define CS_0 PORTC&=~4 // PC2=0 #define DIN_1 PORTC|=2 // PC1=1 #define DIN_0 PORTC&=~2 // PC1=0 #define CLK_1 PORTC|=1 // PC0=1 #define CLK_0 PORTC&=~1 // PC0=0 U08 Alphabet[156]={ 0x7f,0x88,0x88,0x88,0x88,0x7f, // A 0x6e,0x91,0x91,0x91,0x91,0xff, // B 0x42,0x81,0x81,0x8.. 2022. 6. 2.
[AVR] Timing Diagram Timing Diagram 타이밍 다이어그램이란 각 신호들이 시간별로 처리되는 과정을 그림으로 나타낸 것이다. 클락 (clk)은 주기적으로 움직이고 클락에 맞춰서 데이터 (D) 파형이 바뀜으로써 데이터를 읽거나 쓰는 동작이 가능해진다. 여기서 중요한 개념은 파형의 높낮이 (High / Low)와 시간값이 정해진 바대로 움직여야 유효한 데이터가 나온다. 실제 파형의 움직임은 위 그림처럼 직각으로 떨어지지 않는다. 전기 신호가 물리적으로 변동되는데 시간이 걸리므로 실제 타이밍 다이어그램은 위 그림과 다르다. 파형이 High Low로 이동하는 시간값은 해당기기와 통신라인에 따라 다르고, 정확한 값들은 기기의 데이터시트에 정의되어 있다. MAX7219의 통신은 LOAD 데이터를 Low로 주면 시작된다. 이것은 .. 2022. 5. 25.
[AVR] MAX7219 MAX7219 MAX7219는 여러 개의 7-segment를 제어하기 위해서 만들어졌다. 한 가지 색상을 사용할 수 있는 8x8 도트매트릭스에는 64개의 발광 다이오드가 존재한다. 이 64개의 발광 다이오드를 제어하려면 스태틱 (Static) 구동 방법과 다이나믹 (Dynamic) 구동 방법 중에 하나를 택해야 한다. 스태틱 구동 방법은 이 64개의 발광 다이오드를 모두 한 번에 제어하는것을 말하고 (한 번에 제어하는 만큼 많은 포트를 요구), 다이나믹 구동 방법은 한번에 64개를 제어하지 않고 8x8 도트 매트릭스의 행 단위로 순차적으로 제어를 하는데 빠른 속도로 제어하여 잔상 효과로 인해 모두 켜져 있는것 처럼 착시 효과가 생겨 모두 보이게 되는 방식이다. 대부분의 도트 매트릭스는 다이나믹 구동 방법.. 2022. 5. 25.
[AVR] LED LED (Light-Emitting Diode) - 발광다이오드라 칭하며, 칼륨, 인, 비소 등을 재료로 한 다이오드 (diode)로 순방향으로 전류를 흘리면 빛을 발한다. - 빛의 색깔은 크리스털 도핑의 양과 종류에 따라 빨강, 노랑, 녹색, 파랑의 색을 나타낸다. - 일반 전구나 네온램프 등 다른 발광 소자와 비교하여 전기 빛의 변환 효율이 높으며, 열이 나지 않고, 소형 경량이기 때 문에 수명이 길다. - 각종 숫자·문자표시기, 카메라의 자동초점용 광원, 광통신용, 광고판, TV 등에 사용되며 응용범위가 넓다. - 보통 10~20mA 전류에 1.5V~2.5V 전압 강하 volatile 선언 - 컴파일러는 volatile로 선언된 변수나 포인터와 관련된 코드를 임의로 최적화하지 말라는 의미이다. -.. 2022. 5. 24.
[AVR] Simple AVR code: MAX7219 7-segment display driver Simple AVR code: MAX7219 7-segment display driver /* MAX7219 Interaction Code * --------------------------- * For more information see * http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays * * 668 bytes - ATmega168 - 16MHz */ // 16MHz clock #define F_CPU 16000000UL // Outputs, pin definitions #define PIN_SCK PORTB5 #define PIN_MOSI PORTB3 #define PIN_SS PORTB2 #define ON 1 #define OFF.. 2022. 5. 24.
[AVR] GPIO (General Purpose Input Output) GPIO (General Purpose Input Output) - 범용으로 사용되는 입출력 포트로 설계자가 입력과 출력을 마음대로 선택할 수 있다. - 출력으로 사용시, 0과 1의 출력 신호를 임의로 만들어줄 수 있는 구조를 가진다. - 입력으로 사용할 때는 외부 인터럽트를 처리할 수 있도록 하는 기능이 있는 경우가 있다. - 관련 레지스터는 크게 입출력 방향 전환 레지스터, 출력용 레지스터, 입력용 데이터 레지스터의 3가지가 필요하다. - 내부적으로 pull-up 저항을 가지고 있는 경우가 많다. - 마이크로컨트롤러에서는 대부분의 핀들을 GPIO로 설정하는 경우가 많고, 보통 다른 신호와 중복 (multiplexing)하여 사용한다. ATmega128 입출력 포트 - 6개의 8비트 I/O포트 (PA,.. 2022. 5. 24.
[AVR] 실습 키트 연결 실습 키트 연결 1. [New Project] 2. [Build] ➟ [Build Solution] 3. [Tools] ➟ [Add Target] int main(void) { *(char *)0x3A = 0xff; *(char *)0x3B = 0xff; } 2022. 5. 24.
728x90
반응형
LIST