아래 처럼 두 보드를 연결해주었습니다.. 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..
아트멜사의 모든 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개의 스위치가 존재한다. 이 스위치를 이용하여 모터의 방향..
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
잘그리지 못하지만 그려봤습니다.. Cathode 타입 Anode 타입 아래 표는 Anode의 경우를 나타낸 것입니다. 회로도에 연결시 반대로 했으면 보기 편할뻔 했네요 abcdefg2진수0LOWLOWLOWLOWLOWLOWHIGH0b010000001HIGHLOWLOWHIGHHIGHHIGHHIGH0b011110012LOWLOWHIGHLOWLOWHIGHLOW0b001001003LOWLOWLOWLOWHIGHHIGHLOW0b001100004HIGHLOWLOWHIGHHIGHLOWLOW0b000110015LOWHIGHLOWLOWHIGHLOWLOW0b000100106LOWHIGHLOWLOWLOWLOWLOW0b000000107LOWLOWLOWHIGHHIGHLOWHIGH0b010110008LOWLOWLOWLOWLOWLOW..
#include #include int main(void) { //포트D를 출력으로 설정한다. DDRD = 0xFF; while (1) { //포트D의 값을 0xFF로 한다. LED가 켜진다. PORTD = 0xFF; _delay_ms(300); //300ms 대기 //포트D의 값을 0x00으로 한다. LED가 꺼진다. PORTD = 0x00; _delay_ms(300); //300ms 대기 } return 0; }