AdcRead API 함수 분석 마이크로프로세서.

Slides:



Advertisements
Similar presentations
III. AVR 마이크로컨트롤러 용어정리 , AVR, PIC 년대 Intel 사에서 개발한 8 비트 마이크로컨트롤러 AVR 1977 년 Atmel 사에서 개발한 8 비트 RISC 마이크로컨트롤러 Advanced Virtual Risc 의.
Advertisements

마이크로콘트롤러 설계 – 4 Timer 실습 2 – T1, T3
공학설계 II TRDB_LTM 4.3 Inch Digital Touch Panel Development Kit
3. 명령어 집합 구조 순천향대학교 정보기술공학부 이상정.
                                  9장 컴퓨터 기반 데이터 수집의 기초.
제 3 장 변수와 자료형.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
AVR 실습.
4. ADC 충북인력개발원 전자과 공학박사 강원찬.
ATmega128의 A/D 컨버터 제어 Robotics_LAB 발표자 : 유 홍 선.
6 폴링과 인터럽트를 이용한 장치 인터페이스 마이크로컨트롤러 AVR ATmega128.
                                  8장 A/D 변환기 A/D Converter? A/D Converter 원리 Bit 수와 최대범위 및 해상도와의 관계.
신호조절*(Signal Conditioning)
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
제 9 장 구조체와 공용체.
아날로그 입력과 출력.
Multiplexer 설계.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
TMS320F2812의 GPIO의 이해.
Unix Project2 <test character device 생성>
어셈블리 문법 보강 4월 10일.
컴퓨터 계측 및 실습 A/D-converter
AVR - Chapter 15 황 지 연.
제3장 스택과 큐.
컴퓨터 응용과 3학년 1반 조장 김영조 조원 구본건 , 임선택
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
멀티미디어 시스템 (아날로그 이미지,신호를 디지털로 변환 방법) 이름 : 김대진 학번 :
DK-128 ADC 실습 아이티즌 기술연구소
DK-128 ADC 실습 아이티즌 기술연구소
AVR - Chapter 12 황 지 연.
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
4. LAN의 배선체계 (3장. LAN: Local Area Network)
PSW : PROGRAM STATUS WORD
프로그래밍 랩 – 7주 리스트.
ATmega128 FND 실습 휴먼네트웍스 기술연구소
ATmega128 기초와 응용 A/D 변환기.
DK-128 FND 실습 아이티즌 기술연구소 김태성 연구원
Microprocessor I/O Port & CLCD Noh Jin-Seok.
과제#4 내용 정성훈.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
DK-128 FND 실습 아이티즌 기술연구소
AMC-2300 주차장 연동 구역 설정 방법 작성일자 : 2016년 07월 25일 INTER-M C/S팀 김성배
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
클라우드 서버로 부터 값 읽어오기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
ARM Development Suite v1.2
자바 5.0 프로그래밍.
17장. 제어문과 내장 함수 제어문 내장 함수 제어문 내장 함수.
ATmega128의 특징 아이티즌 기술연구소
AVR - Chapter 3 황 지 연.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DK-128 직렬통신 실습 아이티즌 기술연구소
Ⅰ 전자기초 Ⅱ 디지털 논리회로 Ⅲ C언어 기초 Ⅳ AVR 마이크로 컨트롤러 Ⅴ 마이크로 컨트롤러 개발환경
7주차: Functions and Arrays
3. 모듈 (5장. 모듈).
논리회로 설계 및 실험 4주차.
시리얼 UART 정리 정보통신•컴퓨터 공학부 송명규
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수
ATMega128 타이머/카운터 A/D 컨버터.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
Presentation transcript:

AdcRead API 함수 분석 마이크로프로세서

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; ADCSR |= ADC_START_CONVERSION; while(!(ADCSR & ADC_COMPLETE)); value = ADCL; value = (ADCH<<8) | value; if(m_AdcResolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0x40 #define ADC_COMPLETE 0x10 unsigned char m_AdcResolution = ADC_10;

AdcRead API 함수 – AdcRead - A/D 컨버터 : 센서와 같은 소자에서 들어오는 아날로그 값을 디지털 값으로 변경 - Atmega128의 경우 10비트 축차 근사형의 A/D 컨버터를 8개 내장. (실질적으로 A/D 컨버터는 한개, 채널을 바꿔가며 아날로그 신호를 입력받음) - ADMUX : 아날로그 디지털 멀티플렉서 선택 레지스터 ADCSR : 아날로그 디지털 컨버터 제어 상태 레지스터 ADMUX는 A/D 신호를 입력 받을 채널을 0에서 7까지 선택. - 변환 채널이 선택되면 ADCSR을 설정하여 컨버전 프리스케일러 설정, 컨버터 완료 인터럽트를 설정. - 모든 설정이 끝나면 전역 인터럽트 플래그를 '셋'하여 인터럽트를 활성화. 아날로그 디지털 변환 완료 인터럽트 처리 루틴을 구성한 후, ADCSR의 6번 비트를 셋시켜 A/D 변환을 시작. - 변환이 시작한 후 변환 완료 플래그를 주기적으로 점검하거나 아날로그 디지털 변환 완료 인터럽트를 이용하여 A/D 컨버전 이후의 데이터 처리 루틴을 구성할 수 있음.

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; ADCSR |= ADC_START_CONVERSION; while(!(ADCSR & ADC_COMPLETE)); value = ADCL; value = (ADCH<<8) | value; if(m_AdcResolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0x40 #define ADC_COMPLETE 0x10 unsigned char m_AdcResolution = ADC_10;

Serial API 함수 – AdcRead x 1 x port & 7 ADMUX ADMUX = port&7; 6 5 4 3 2 1 x port & 1 7 x ADMUX

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; ADCSR |= ADC_START_CONVERSION; while(!(ADCSR & ADC_COMPLETE)); value = ADCL; value = (ADCH<<8) | value; if(m_AdcResolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0x40 #define ADC_COMPLETE 0x10 unsigned char m_AdcResolution = ADC_10;

Serial API 함수 – AdcRead x 1 x 1 ADCSR or 0x40 ADCSR ADCSR |= 0x40; ADCSR의 6번 비트를 1로 set (A/D변환 시작) 7 6 5 4 3 2 1 x ADCSR or 1 0x40 x 1 ADCSR

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; ADCSR |= ADC_START_CONVERSION; while(!(ADCSR & ADC_COMPLETE)); value = ADCL; value = (ADCH<<8) | value; if(m_AdcResolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0x40 #define ADC_COMPLETE 0x10 unsigned char m_AdcResolution = ADC_10;

Serial API 함수 – AdcRead x 1 x ADCSR & 0x10 ADCSR while(!(ADCSR & 0x10)); ADCSR의 4번 비트가 1이 될 때까지 대기 (A/D변환 완료 대기) 7 6 5 4 3 2 1 x ADCSR & 1 0x10 x ADCSR

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; ADCSR |= ADC_START_CONVERSION; while(!(ADCSR & ADC_COMPLETE)); value = ADCL; value = (ADCH<<8) | value; if(m_AdcResolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0x40 #define ADC_COMPLETE 0x10 unsigned char m_AdcResolution = ADC_10;

Serial API 함수 – AdcRead x x x ADCH ADCL value value = ADCL; value = (ADCH<<8) | value; ADCL과 ADCH 값을 결합 (value는 0~1023) ADCH ADCL x x x value

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; ADCSR |= ADC_START_CONVERSION; while(!(ADCSR & ADC_COMPLETE)); value = ADCL; value = (ADCH<<8) | value; if(m_AdcResolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0x40 #define ADC_COMPLETE 0x10 unsigned char m_AdcResolution = ADC_10;

Serial API 함수 – AdcRead x x value value if(m_AdcResolution == ADC_8)(value=value>>2); AdcResolution 값이 ADC_8과 같으면 value 값을 나누기 4 x value x value

AdcRead API 함수 – AdcRead unsigned int AdcRead(unsigned char port) { unsigned int value = 0; ADMUX = port&7; // port 값의 하위 3비트만 ADMUX에 저장 (포트 지정) ADCSR |= ADC_START_CONVERSION; // ADCSR의 6번 비트를 1로 set (A/D변환 시작) while(!(ADCSR & ADC_COMPLETE)); // ADCSR의 4번 비트가 1이 될 때까지 대기 (A/D 변환 완료 대기) value = ADCL; value = (ADCH<<8) | value; // ADCL과 ADCH 값을 결합 if(m_AdcResolution == ADC_8)(value=value>>2); // AdcResolution 값이 ADC_8과 같으면 value 값을 나누기 4 return value; }

AdcRead API 함수 – ADC_Initialize void ADC_Initialize(void) { ADMUX = PORT_A0; ADCSR = ADC_ENABLE | ADC_PRESCALE_DIV32; } #define ADC_ENABLE 0x80 #define ADC_PRESCALE_DIV32 5 ADMUX에 port를 A0로 초기화 ADCSR 값 초기화 7 6 5 4 3 2 1 1 ADCSR

AdcRead API 함수 – LgsSetType ERROR LgsSetType(unsigned char port, unsigned char type) { if(type>MAX_LGS_TYPE)return UNKNOWN_LGS_TYPE; switch(port) case PORT_A6: m_SensorType1 = type; break; case PORT_A7: m_SensorType2 = type; default: return UNKNOWN_LGS_PORT; } return ERROR_NONE;

AdcRead API 함수 – LgsRead unsigned int LgsRead(unsigned char port) { if((port == PORT_A6)||(port == PORT_A7)) return get_lego_sen(port); } else return AdcRead(port);

AdcRead API 함수 – get_lego_sen uint16_t get_lego_sen(uint8_t Channel) { uint16_t ret =0; if(Channel == PORT_A6) Channel = 6; sbi(LEGO_SEN0_PORT, LEGO_SEN0_BIT); //PORTG, BIT_NUM0 micro_delay(100); cbi(LEGO_SEN0_PORT, LEGO_SEN0_BIT); } else if(Channel == PORT_A7) Channel = 7; sbi(LEGO_SEN0_PORT, LEGO_SEN1_BIT); //PORTG, BIT_NUM1 cbi(LEGO_SEN0_PORT, LEGO_SEN1_BIT); else return 0; micro_delay(5); ret = AdcRead(Channel); return ret;

AdcRead API 함수 – micro_delay void micro_delay(unsigned int Time) { uint8_t time_500us = 0; char i = 0; while(Time--) for(time_500us=0;time_500us<100;time_500us++) i = i + time_500us; }

AdcRead API 함수 – LgsReadType unsigned int LgsReadType(unsigned char port, unsigned char type) { unsigned int value = get_lego_sen(port); switch(type) case LGS_TYPE_LIGHT: value = 120 - value/10; break; case LGS_TYPE_TOUCH: if(value > 100) value = FALSE; else value = TRUE; } return value;