본문 바로가기

Hardware/ATmega128

14. 단방향 양방향 통신 더보기
13. PC기반 직렬 통신 기초 가상 직렬 포트 생성 가상 직렬 포트 생성 통신 가능 포트 확인 통신 가능 포트 확인 통신 가능 포트 확인 가상 직렬포트 생성 방법 통신 가능 포트 확인 가상 포트 열기 포트 설정 하이퍼터미널을 통한 통신 단방향 직렬통신 프로그램 실행 더보기
12. EEPROM제어 와 128io.h 헤더파일 만들기 EEPROM 1. EECR(Control Register) 2. EEAR(Address Register) 3. EEDR(Data Register) 4. 한바이트 쓰기/읽기 절차 5. EEPROM관련 함수 예제>>1번 키 누르면 EEPROM에 데이터 기록, 8번 키 누르면 clear하는 프로그램 먼저 헤더파일을 만들었습니다 spec p362~363 register summary 와 p21 EEPROM을 참고하였습니다 #define KEY_IN PINC #define LED_DDR DDRE #define LED_OUT PORTE #define DDRE *((volatile unsigned char*)0x22) #define PORTE *((volatile unsigned char*)0x23) #define .. 더보기
11. 두더지게임(ATmega128) 조건>> 1. 랜덤하게 불이 켜지고 꺼지는 동작을 20회 반복한다 2. 불이 켜진 LED 아래에 스위치를 눌리면 점수 +5점 추가 3. 100점이되면 수회깜빡이며 다시 초기화 4. 5~1까지 카운터후 시작 #include #include #include #include #define CPU_CLOCK 16000000 #define TICKS_PER_SEC 1000 #define PRESCALER 64 volatile unsigned int g_elapsed_time; void initLED(); void initFND(); void setTCCR0(); void initTCNT0(); void setTIMSK(); void sleep(unsigned int elapsed_time); void sleep2.. 더보기
10. Timer/Counter 비교매치 인터럽트 CTC모드 - 비교매치 인터럽트 - 세팅하기 1)TCNT0의 초기화를 하지 않기 때문에 삭제하고TCNT0자리에 OCR0를 넣는다 OCR0(비교매치 인터럽트)추가한다 2)initOCR0 = 250(초기값을 6으로 줄 필요가 없다) -250까지 카운터하게되면 OCR이 비교하여 다시 0부터 카운터 한다 TCNT0와 OCR0의 값을 비교한다 -TCNT0의 값이 OCR0의 값과 같아지면 초기화된다 3)TCCR0 = CTC모드, 프리스케일러64 = 1 더보기
9. Timer/Counter 출력 DK -128선 연결 사용 헤더파일 및 환경설정값 1. TCCR0(T/C Control Register) 2. TCNT0(Timer Counter Register) 3. TIMSK(Interrupt Mask Register) 4. 1초마다 깜빡이는 LED구현 5. 실습예제 1/2 5.실습예제 2/2 1초마다 FND값을 증가시키다가 60초가 되는 순간 LED를 하나씩 ON 하시오. FND는 0으로 초기화된 후 다시 증가합니다. #include #include #include #define DDR_FND DDRF #define PORT_FND PORTF #define DDR_LED DDRE #define PORT_LED PORTE #define CPU_CLOCK 16000000 #define TICKS_PE.. 더보기
8. 적외선 센서 출력 LED제어로 사용할 레지스터 적외선제어로 사용할 레지스터 실습예제 1. 적외선 센서로부터 감지 신호를 받으면 LED를 전체 껐다가 감지 신호가 없으면 켜기 #include #define DDR_LED DDRF #define PORT_LED PORTF #define DDR_SENSOR DDRD #define PIN_SENSOR PIND void initLED(void); int main(void) { volatile unsigned char a = 0; DDR_SENSOR = 0x00; initLED(); for(;;) { a = PIN_SENSOR; a = a>>7; if(a != 0) { PORT_LED = 0x00; } else if(a != 1) { PORT_LED = 0xFF; } } return.. 더보기
7. FND 출력 KEY제어로 사용할 레지스터 FND제어로 사용할 레지스터 //1에서 8까지 출력하여 보자 #include int main(void) { DDRC = 0xFF; DDRE = 0xFF; PORTE = 0xFF; volatile unsigned char i = 0; volatile unsigned chat a = 0; for(;;) { asm("NOP"); i = 0; a = ~PINC; while(a >= 1) { a /= 2; i++; } PORTE = i; } return 1; } 실습문제 //1. 0~99까지 순차적으로 숫자를 1씩 증가시키다가 버튼을 누르면 0부터 다시 시작하기 #include //IO제어 헤더파일 void delay(unsigned int); //delay 함수 선언 int main.. 더보기
6. LED 실습문제 실습문제1) 255에서부터 0까지 감소하는 숫자를 LED로 표시하기 #include int main(void) { volatile unsigned int i ; volatile unsigned int b ; DDRF = 0xFF; PORTF = 0xFF; for(i=0; i 더보기
5. ATmega128 자료형의 크기 C포트(35~42)를 이용하여 LED연결 DDRC = 0xFF (출력) PORTC = ~sizeof(char); //1111 1110 ~not = 1bytes 1111 1100 = 3bytes(=0000 0011 not) ~을 쓰는 이유 쉽게 말해서 PORT는 00일때 led가 들어옵니다 하지만 char의 값이 0000 0001이기 때문에 한개를 제외한 나머지가 불이 들어오게 됩니다 그래서 ~(not)을 해서 컨버팅을 해주면 원하는 값인 1111 1110을 얻게 됩니다 #include int main(void) { DDRC = 0xFF; PORTC = 0xFF; for(;;) { PORTC = ~sizeof(자료형 int char 삽입); } return 0 } 결과 led에 불이 들어오게 되는 자료형에.. 더보기