용어 정의BOTTOM - 카운터가 0이 되었을 때를 의미. MAX – 카운터가 0xFF(=255)에 도달했을 때를 의미 TOP TOP값은 0xFF(MAX) 또는 OCR0 레지스터에 저장된 값으로 지정할 수 있다.카운터가 TOP값과 똑같거나 더 커진 경우를 의미한다. 일반 모드TCCR0 레지스터의 WGM00 비트와 WGM01 비트가 0으로 설정된 경우이다. TCNT0 레지스터는 카운터에서 값을 직접 읽거나 쓸 수 있게 해주는 레지스터이다. 일반 모드에서 카운팅은 항상 증가하는 방향으로 이루어 진다. 8비트로 표현할 수 있는 최대값인 0xFF(=255)를 초과하면 다시 bottom(=0)부터 카운팅을 시작한다. TCNT0가 0이 되는 순간 TIFR 레지스터의 TOV0 비트가 1로 설정된다. 타이머/카운터 오..
외부 인터럽트는 INT7:0핀에 입력되는 트리거 신호에 의해서 발생한다. 트리거 신호는 폴링 에지, 라이징 에지, 로우 레벨 3가지가 될 수 있다. 어떤 신호 입력을 기다릴지 미리 설정해놓고 기다리다가 해당 신호가 입력되는 순간 인터럽트가 발생하는 것이다. Atmega 128에서 외부 인터럽트용 핀은 아래 그림처럼 8개가 있다. INT7:0 핀을 출력으로 설정해 놓고 인터럽트 핀을 소프트웨어적으로 조작하더라도 인터럽트가 발생한다. 예를들어 falling edge때 인터럽트가 발생하게 해놓고 해당 핀의 출력이 1에서 0으로 떨어지는 것처럼 값을 1과 0 값을 순서대로 출력해도 인터럽트가 발생한다. 어떤 트리거 신호가 입력될 때 인터럽트를 발생시킬지는 외부 인터럽트 제어 레지스터 EICRA (INT3:0)와..
아트멜사의 모든 AVR 마이크로컨트롤러의 포트들은 범용 디지털 입출력 포트로 사용되어질 때 Read-Modify-Write 기능이 있다. 이 기능은 다른 핀들의 값을 수정하지 않고 포트의 특정 핀만 수정할 수 있도록 한다. 다른 핀들의 방향에 영향을 주지 않고 한 포트 핀의 방향을 바꿀 수 있다. 핀이 출력으로 설정되었다면 다른 핀들에 영향을 주지 않고 출력 값을 HIGH/LOW로 변경할 수 있으며, 핀이 입력으로 설정되었다면 다른 핀들에 영향을 주지 않고 풀업 레지스터를 활성화/비활성화 할 수 있다. 각 출력 버퍼는 싱크와 소스가 대칭적인 드라이브 특성을 갖는다. 싱크와 소스 전류 모두 40mA로 대칭적이다. 양쪽 다 흐르는 전류는 LED를 켤 수 있을 정도로 충분하다. 아래 회로에서 PD0핀에 Low..
예전에 만들었던 Atmega328 보드에 시리얼 관련 부품을 추가하려 알아보다가.. [임베디드/Avr] - Atmega328 보드 만들기 - 회로 및 부품 확인 [임베디드/Avr] - Atmega328 보드 만들기 - 회로도 그려보기 [임베디드/Avr] - Atmega328 보드 만들기 - 보드 납땜 및 태스트.. 예전에 사용했던 USB to TTL 컨버터가 생각나서 재구입하려고 가격을 다시 알아봤습니다... 여기저기 알아보다가 옥션에서 개당 2200원에 판매하는 곳이 있더군요.. 바로 주문했던 것이 오늘 왔는데 요렇게 생겼습니다.. pl2303hx 칩을 사용하고 있습니다. 우선 Atmega328 보드에 시리얼 통신 예전에 작성했던 코드를 업로드하고.. http://webnautes.tistory.com..
L293D를 이용하여 DC 모터의 방향 제어하기 DC 모터의 방향제어는 간단하다. 단지 극성을 반대로 하기만 하면 된다. 모든 DC 모터는 2개의 터미널로 전원을 공급받기 때문이다. +와 –를 모터에 연결하면 한쪽 방향으로 모터가 돈다. 그런데 극성을 반대로 연결하게 되면 DC모터는 반대로 돌게 된다. http://www.electroons.com/electroons/dc_motor_control.html 마이크로컨트롤러에서 5V와 0V 값을 변경함으로써 모터의 극성을 바꾸는 것도 가능할거 같지만 마이크로컨트롤러는 모터가 요구하는 5V보다 큰 전원을 입력하면 고장날 염려가 있다. 그래서 필요한 것이 H Bridge이다. H Bridge 회로에는 4개의 스위치가 존재한다. 이 스위치를 이용하여 모터의 방향..
2015.10.30아래 퓨즈를 체크해제 안해줘서 딜레이함수가 오동작하는 바람에 한참해멨네요... CKDIV8 : 시스템 내부적으로 클럭을 8분주 한다. 외부 Resonator/Crystal 등을 사용할 경우 체크하지 않는다. 2015.10.29.. [임베디드/Avr] - Atmega328 보드 만들기 - 회로 및 부품 확인 [임베디드/Avr] - Atmega328 보드 만들기 - 회로도 그려보기 미루고 미루다가 결국 오늘 날잡아서 납땜질을 했습니다.. 익숙치 않아서 2시간 넘게 걸린거 같아요.. 간단히 끝날줄 알았는데 생각보다 힘드네요.. 그리고 5v로 입력되는 USB 전원을 그대로 쓰기로 해서 전원부 부분은 싹 뺴버렸네요.. pcb 공간이 남으면 추가로 3.3v 전원 공급이라든가 모터구동 회로도 추가할..
지난번에 글을 올리고 나서 가장 중요한걸 빼먹었다는 생각이 들더군요.. [임베디드/Avr] - Atmega328 보드 만들기 - 회로 및 부품 확인 이회로도 저회로도 찾아보며 괜찮은 부분들을 하나로 끼여맞추어 하다보니.. PCB 크기를 갸늠하기가 힘들고 나중에 납땜할때 헷갈릴 염려도 있을 듯해서.. Fritzing라는 프로그램을 이용해서 회로도를 한장에 다시 그려보았습니다. 대충 배치가 이렇게 되겠구나 생각이 들려면 PCB 배치까지 해봐야 할거 같은데 아직은 무리인거 같은 생각이 들어서 고민이네요... ISP에도 5V 연결을 해서 타겟보드에 전원공급을 안해도 ISP에서 공급해주는 전원으로 사용할 수 있도록 했는데...괜찮을련지 모르겠네요..
Atmega 보드를 하나 만들어 보고 싶어서 자료를 찾았습니다.. 가장 간단한걸 찾았다 싶었는데...http://avrprogrammers.com/atmega/atmegaxx8 전원부가 안보이네요.. 이렇게 그냥 연결해도 되나 싶어서 좀 더 찾아봤습니다.. 전원부는 아래 회로를 참고해서 붙여보기로 했습니다.http://hackaday.com/2010/10/25/avr-programming-02-the-hardware/LM7805를 붙이면 최대 35V까지 입력으로 사용할 수 있군요... 이젠 전원을 어떻게 공급하느냐가 문제인데요...결국 마이크로 usb를 이용하기로 했습니다...가격이 제일 비쌈 ㅜㅜ 장바구니에 하나씩 담아보니 12000원 정도 됩니다..좀더 가격을 줄이고 싶은데..고민좀 해봐야 겠어요..
AVR에는 두가지 타입의 타이머가 있다. 2^8=256까지 카운터가 가능한 8비트 그리고 2^16=65535까지 카운터가 가능한 16비트 타이머.. 카운터가 MAX값인 255에 도달하면 오버플로우가 발생하여 다시 값은 0이되는 것을 아래 그림에서 보여주고 있다. Arduino Uno에서 사용하는 Atmega328p 마이크로 컨트롤러에는 3개의 타이머가 있다. timer 0와 timer 2는 8비트 타이머이고 Timer1은 16 비트 타이머이다. Prescaler 사용중인 크리스탈의 값 F_CPU = 4Mhz라고 가정하자. 그리고 16비트 타이머(최대값 65535)를 사용한다고 가정하면 최대 만들 수 있는 delay의 값 16.384ms이다. 계산 과정은 아래와 같다. 주기 = 1/주파수 = 1/40000..
/* * ADC.c * * Created: 2015-03-03 오전 12:37:57 * Author: webnautes */ #define F_CPU 16000000UL //1. baud rate를 선택 #define USART_BAUDRATE 9600 //2.시스템 클록과 원하는 baud rate를 이용하여 UBRR 값을 계산한다. #define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #include #include void adcInit(void) //ADC 초기화 함수 { ADCSRA |= ((1