질문게시판 > ATmega128을 이용한 간단한 설계

TODAY406 TOTAL2,171,605
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | ATmega128을 이용한 간단한 설계

페이지 정보

작성자 Taebro94 작성일2018-12-05 15:37 조회12,378회 댓글5건

본문

	
안녕하세요!  대학을 다니는 전자공학도 입니다!
마이크로 프로세서 강의를 수강하면서 Atmega128로 간단한 설계를 진행중입니다.
코딩은 거의 배운적없어서 처음 시작했는데 혼자 설계하고 코딩할려니 맘처럼 되지않아 도움을 요청합니다 ㅠㅠ..

우선 전체 코드는 다음과 같습니다. 

#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/delay.h>
#include<stdio.h>

unsigned int result = 0xFFFF, th = 0x0100; 
volatile unsigned int Touch, Distance;


#define CONTROL PORTA
#define DATA PORTB
#define F_CPU 16000000UL
#define CTRL_DDR DDRA
#define DATA_DDR DDRF
#define ON  1
#define OFF 0






//LCD 작동을 위한 코드



void LCD_RS(int onoff){ // 레지스터 선택 
if(onoff == ON) CONTROL = CONTROL | 0x01; 
else CONTROL = CONTROL & 0xFE; 
}
void LCD_RW(int onoff){ // 읽기, 쓰기선택 
if(onoff == ON) CONTROL = CONTROL | 0x02; 
else CONTROL = CONTROL & 0xFD; 
}
void LCD_E(int onoff){ // enabling 신호 
if(onoff == ON) CONTROL = CONTROL | 0x04; 
else CONTROL = CONTROL & 0xFB; 
}

void init_port(void){ // LCD Data Direction
PORTA  = 0x00;
DDRA   = 0XFF;
PORTF  = 0x00;
DDRF   = 0xFF;
}

void ctrl_lcd(unsigned char c) {  // C 입력 했을때 출력해내는 코드
LCD_RS(OFF); 
_delay_ms(100);
LCD_RW(OFF); 
_delay_ms(100); 
LCD_E(ON); 
_delay_ms(100);
DATA = c; 
_delay_ms(100);
LCD_E(OFF); 
_delay_ms(100);
}

void write_char(char s){ 
LCD_RS(ON);  _delay_ms(100);
LCD_RW(OFF); _delay_ms(100);
LCD_E(ON); _delay_ms(100); DATA = s; 
_delay_ms(100); LCD_E(OFF); _delay_ms(100);
}


void locate_text(char x, char y){ // LCD 문자 배열
LCD_RS(OFF); 
_delay_ms(100);
LCD_RW(OFF); 
_delay_ms(100); 
LCD_E(ON); 
_delay_ms(100); 
if(y==0) DATA = x + 0x80; 
else DATA = x + 0xC0;
_delay_ms(100); 
LCD_E(OFF); 
_delay_ms(100);
}

void write_text(int x, int y, char*ch){ // LCD 문자 입력
locate_text(x,y);
while(*ch){
write_char(*ch++);
}
}

void init_lcd(void){ 
ctrl_lcd(0X3C); 
ctrl_lcd(0X01); 
ctrl_lcd(0X02); 
ctrl_lcd(0X0F); 
}


// 서보모터 작동을 위한 코드
int Timer_init(void) // 서보모터 동작 설정
{
TCCR1A = (1<<COM1A1) | (1<<WGM11);
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS11) | (1<<CS10);
ICR1 = 5000;
OCR1A = 375;
TCNT1 = 0X00;
}




void get_ADC_data() { //센서 동작 코드
Touch = Distance = 0; 
ADMUX = 0x06; 
ADCSRA = 0xA7; // ADC enabling, ADC free running mode 선택, // prescalingfactor 결정 
ADCSRA |= 0x08; // ADC interrupt enabling 
ADCSRA |= 0x40; // ADC start conversion

while((ADCSRA & 0x10) != 0x10); 
Touch = ADCL & 0xFF; // low data 읽음 
Touch |= (ADCH << 8); // high data 읽음


ADMUX = 0x04; 
ADCSRA = 0xA7; // ADC enabling, ADC free running mode 선택, // prescalingfactor 결정 
ADCSRA |= 0x08; // ADC interrupt enabling 
ADCSRA |= 0x40; // ADC start conversion

while((ADCSRA & 0x10) != 0x10); 
Distance = ADCL & 0xFF; // low data 읽음 
Distance |= (ADCH << 8); // high data 읽음
}


int main(void){
DDRF = 0b10101111; // ADC2(PF2 pin) 입력
DDRB = 0xFF;
DDRD = 0XFF;
PORTD = 0b10101010;

char str1[40] = {"Security Mode ON..."};
char str2[40] = {"     clear"};
char str3[40] = {"Intruder Occurrence"};
init_port();
init_lcd();
Timer_init();
write_text(0,0,str1);
write_text(0,1,str2);

while(1) {
get_ADC_data();
if (Distance < th){
if (Touch > th){
while(Touch > th)
init_port();
init_lcd(); 
Timer_init();
write_text(0,1,str1);
write_text(0,1,str3);
PORTD = 0b10101100;
_delay_ms(100);
PORTD = 0x00;
OCR1A = 600;
}
else {
PORTD = 0b11110000;
_delay_ms(5000);
}
return 0;
}
}
}


코드에 대한 설명으로는 
실행 하면 
char str1[40] = {"Security Mode ON..."};
char str2[40] = {"     clear"};
를 실행시키고 B포트 LED 짝수번호가 켜집니다.
그리고
센서 키트 적외선 센서의 거리가 일정 이하(Distance < th)
, 그리고 터치센서 값이 일정 이상(Touch > th) 이 되면
LCD에 불이 다 켜지게 코딩했습니다.
둘중 하나만 만족하면 LED 5초간 켜졌다가 처음으로 다시 돌아가게 설계했습니다.

코딩공부를 시작한지 얼마 되지않아 많이 조잡하게 짯더니
오류는 없지만 원하는 대로 동작을 안합니다...

혹시 문제점이 무엇인지 알수 있을까요?
수정방안에 대한 길을 좀 잡아주시면 감사하겠습니다..

부가설명
F핀,ADMUX 4번 = 적외선센서 수광부, 6번 = 터치센서
D포트 - LED 입니다.

그리고 혹시 저코드에서 터치센서와 적외선센서가 다시 처음 값 (범위에 포함 안됬을때)이 되었을때
while처음으로 안돌아가던데 가능하다면 그거에 대한 설명도 부탁드리겠습니다.. ㅠ


  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 5

조회수 12,378

Taebro94님의 댓글

Taebro94 작성일

왜 제글에는 댓글이 안달릴까요..ㅠㅠ

master님의 댓글

master 댓글의 댓글 작성일

글을 보지 못했습니다.^^

master님의 댓글

master 작성일

ADC도 안될테고
LCD도 안될테고
서보모터는 동작할까요?
메인함수 무한 루프에서 return을 넣은 것을 보면 c언어 기초도 없으신 것 같고
ADC입력핀을 출력으로 설정한 것을보면 AVR도 처음인 것 같고
기초가 너무 없는 것 같아서 설명해드려도 이해를 하지 못할 것 같은데 설명해야 할 내용은 너무 많아서 어차피 설명은 불가능하겠습니다.

하나씩 공부해서 이해를 한 후에 합쳐서 기능을 구현하세요

master님의 댓글

master 작성일

링크를 걸어드릴테니 문제가 되는 것을 하나씩만 적어보세요
//
한 개의 글에 여러가지를 적지말고
여러개의 글을 적어도 되니까 한 가지씩 적으세요

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9684
공지 사이트 이용 안내댓글[24] master 17-10-29 29789
질문 atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데.. 새글 aasdw 06:28 7
질문 Atmega128 블루투스 오류 질문 새글 yhj2644 01:35 19
질문 아두이노 간단한 프로그램 새글 행복지수업 22-05-25 20
질문 atmega128 타이머 작성시 키패트 입력으로 인터럽트 사용에 대하여 질문이 있습니다. 이미지새글 마프하나 22-05-25 26
질문 로드셀 무게 센서 질문드립니다.댓글[2] 새글 제비고기 22-05-25 27
질문 adc, uart dma댓글[3] 새글첨부파일 hiㅡO3O 22-05-25 23
질문 ADC,uart DMA댓글[1] 이미지새글첨부파일 hiㅡO3O 22-05-25 20
질문 아두이노 스텝모터 리미트 문의드립니다.댓글[2] 이미지새글첨부파일 스트렌져 22-05-24 27
질문 진동센서와 서보모터 연결 코드 질문입니다!댓글[1] 새글 제리 22-05-24 23
질문 atmega128 GPS,블루투스 질문드립니다.댓글[1] 새글 코딩초보1 22-05-24 31
질문 서보모터 제어에 관하여 궁금합니다댓글[3] 이미지첨부파일 오소로롯 22-05-24 46
질문 atmega 128 타이머 작성 중 질문 드립니다.댓글[8] 이미지 마프하나 22-05-23 59
질문 아두이노와 휴대폰을 HC-06으로 연결시켜서 블루투스연결이 끊기면 부저에서 소리가 나게 할려하는데 어떻게 해…댓글[1] 졸작부수다 22-05-23 183
답변 답변글 답변 : 아두이노와 휴대폰을 HC-06으로 연결시켜서 블루투스연결이 끊기면 부저에서 소리가 나게 할려하는데 … 새글 master 22-05-24 26
질문 보드레이트 질문댓글[1] 죠르디 22-05-23 31
질문 atmega 128 블루투스 질문 입니다댓글[1] yhj2644 22-05-23 48
질문 아트메가 공부중에 질문있습니다..댓글[1] suid82 22-05-23 37
질문 Atmega128 UART통신 echo 반복 질문댓글[2] ming2ming 22-05-23 51
질문 아두이노의 지속 시간에 대해 질문합니다. merry 22-05-23 47
답변 답변글 답변 : 아두이노의 지속 시간에 대해 질문합니다. master 22-05-23 34
질문 초음파+스텝모터 도꺼비 22-05-22 35
답변 답변글 답변 : 초음파+스텝모터 master 22-05-23 36
질문 아두이노 인터럽트 질문있습니다.댓글[1] 띵꽁 22-05-22 47
답변 답변글 답변 : 아두이노 인터럽트 질문있습니다.댓글[3] master 22-05-22 45
질문 atmega128 스톱워치 작성 중 외부 인터럽트 관련 질문 드립니다.댓글[4] 이미지 마프하나 22-05-22 66
답변 답변글 답변 : atmega128 스톱워치 작성 중 외부 인터럽트 관련 질문 드립니다.댓글[1] 이미지 master 22-05-23 47
질문 서보모터제어 해당코드에서 어떤걸 추가해야할까요댓글[3] 이미지첨부파일 오소로롯 22-05-22 46
질문 Atmega128 UART통신에서 ECHO 관련 질문드립니다. dsfdfsa 22-05-22 52
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기