Atmega128의 SPI에 대해 간단히 설명하고 포스트 끝에 마스터와 슬레이브 예제를 제공합니다. 2016. 6. 29 최초작성 2021. 7. 18 최종작성 SPI (Serial Peripheral Interface)를 사용하면 AVR과 주변 장치 간 또는 여러 AVR 장치간에 고속 동기 데이터 전송이 가능합니다. 두 개의 장치가 SPI 통신을 하는 경우 한대는 마스터 장치가 되며 다른 한대는 슬레이브 장치가 됩니다. 하나의 마스터 장치가 여러 대의 슬레이브 장치와 통신이 가능하지만 동시에는 일대일 통신만 가능합니다. 두 대 이상의 마스터 장치가 슬레이브 장치와 연결될 수 도 있지만 이때 주의점은 동시에 두 대 이상의 마스터 장치가 SPI 통신을 시작하지 않도록해야 합니다. 센서 같은 주변 장치의 경..
Atmega128의 시리얼 통신(USART)에 대해 다룹니다. 2016. 6. 25 최초작성 1. Baud rate (in bits per second, bps)와 시스템 클록을 정의한다. #define 9600 #define F_CPU 16000000UL 2. 시스템 클록과 원하는 baud rate를 이용하여 USART Baud Rate Register(UBRR)을 계산한다. BAUD Baud rate (in bits per second, bps) fOSC System Oscillator clock frequency UBRR Contents of the UBRRH and UBRRL Registers, (0 - 4095) UBRR_VALUE = (((F_CPU / (9600 * 16UL))) - 1); ..
Atmega128의 ADC에 대해 다룹니다. 2016. 6. 24 최초작성 센서들은 보통 아날로그 출력 값들을 내놓기 때문에 ADC(Analog to Digital Converter)를 거쳐 마이크로컨트롤러에 연결하는 것이 필요하다. 이를 위해 Atmega128에는 다음과 같이 포트 F에 8개의 핀을 제공하고 있다. Atmega 128의 ADC는 연속 근사(successive approximation) 방식을 이용하여 아날로그 입력 전압을 10비트 디지털 값으로 변환한다. 아날로그 입력 채널과 Gain은 ADMUX 레지스터의 MUX 비트들을 설정함으로써 선택된다. Atmega128에는 8개의 ADC 채널(PF0~PF7)이 있다. 이 중 어떤 것을 사용할지 정할 때 다음 비트들을 사용한다. 기준 전압을 선..
실수를 시리얼 포트를 통해 출력하려면 프로젝트를 생성하고 다음 두 가지를 변경해주어야 합니다. 제가 사용한 버전은 Atmel Studio 7.0이지만 다른 버전에서도 비슷한 방법으로 변경하면 가능합니다. 메뉴에서 프로젝트 – 속성을 선택한 후. Toolchain에 아래 항목에 libprintf_flt를 추가해줍니다. 그리고 General에서 다음 부분을 체크해줍니다. /* * atmega128-adc-example.c * * Created: 2015-12-15 오후 1:37:05 * Author : webnautes */ #define F_CPU 16000000UL //1. baud rate를 선택 #define USART_BAUDRATE 9600 //2.시스템 클록과 원하는 baud rate를 이용하여..
아래 처럼 두 보드를 연결해주었습니다.. raspberry pi 2/3 Atmega128 (MOSI) 19 ------ PB2(MOSI)(MISO) 21 ------ PB3(MISO)(SCK) 23 ------ PB1(SCK) (CS0) 24 ------ PB0 GND 6 ------ GND 라즈베리파이에서 SPI를 활성화 시키기 위해서는 다음 포스팅을 참고하세요..[임베디드/Raspberry Pi] - Raspberry Pi 2/3에서 SPI 사용하기 라즈베리파이에서 데이터를 보내면... AVR과 연결된 피시의 시리얼 터미널에서 데이터가 들어온 것을 볼 수 있습니다.. 다음은 각각 Atmega128을 위한 슬레이브 SPI 코드 및 라즈베리파이에서의 SPI 코드입니다..1234567891011121314..
용어 정의BOTTOM - 카운터가 0이 되었을 때를 의미. MAX – 카운터가 0xFF(=255)에 도달했을 때를 의미 TOP TOP값은 0xFF(MAX) 또는 OCR0 레지스터에 저장된 값으로 지정할 수 있다.카운터가 TOP값과 똑같거나 더 커진 경우를 의미한다. Phase Correct PWM 모드Phase Correct Pulse Width Modulation(Phase Correct PWM) 모드는 TCCR0 레지스터의 WGM01비트는 0으로, WGM00비트는 1로 설정된 경우이다. 카운터값(TCNT0)는 BOTTOM에서 MAX로 증가하다가 다시 MAX에서 BOTTOM으로 감소하는 것을 반복한다. PWM 해상도는 8비트로 고정된다. noninverting Compare Output 모드에서는 TC..
용어 정의BOTTOM - 카운터가 0이 되었을 때를 의미. MAX – 카운터가 0xFF(=255)에 도달했을 때를 의미 TOP TOP값은 0xFF(MAX) 또는 OCR0 레지스터에 저장된 값으로 지정할 수 있다.카운터가 TOP값과 똑같거나 더 커진 경우를 의미한다. Fast PWM 모드fast Pulse Width Modulation(fast PWM) 모드는 TCCR0 레지스터의 WGM01과 WGM00비트가 1로 설정된 경우이다. 카운터값(TCNT0)는 BOTTOM으로부터 MAX까지 값이 증가하고 MAX에 도달하면 다시 BOTTOM부터 증가를 시작한다. non-inverting Compare Output 모드에서는 TCNT0와 OCR0가 일치하는 경우 output compare (OC0)가 0으로 클리어..
용어 정의BOTTOM - 카운터가 0이 되었을 때를 의미.MAX – 카운터가 0xFF(=255)에 도달했을 때를 의미TOP TOP값은 0xFF(MAX) 또는 OCR0 레지스터에 저장된 값으로 지정할 수 있다.카운터가 TOP값과 똑같거나 더 커진 경우를 의미한다. Clear Timer on Compare Match (CTC) 모드 TCCR0 레지스터의 WGM00 비트가 0이고 WGM01 비트가 1로 설정된 경우이다. TCNT0 레지스터는 카운터에서 값을 직접 읽거나 쓸 수 있게 해주는 레지스터이다. OCR0 레지스터에는 카운터 값인 TCNT0 레지스터와 비교할 때 사용되어 지는 8비트 값이 포함되어 있다. OCR0 레지스터의 값과 TCNT0 레지스터의 값이 일치하면 Output Compare Interru..
용어 정의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)와..