Adc Read API Adc Read unsigned int Adc

  • Slides: 20
Download presentation

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0 x 40 #define ADC_COMPLETE 0 x 10 unsigned char m_Adc. Resolution = ADC_10; 2

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0 x 40 #define ADC_COMPLETE 0 x 10 unsigned char m_Adc. Resolution = ADC_10; 4

Serial API 함수 – Adc. Read ADMUX = port&7; port 값의 하위 3비트만 ADMUX에

Serial API 함수 – Adc. Read ADMUX = port&7; port 값의 하위 3비트만 ADMUX에 저장 (포트 지정) port 7 6 5 4 3 2 1 0 x x x x & 7 0 0 0 1 1 1 ADMUX 0 0 0 x x x 5

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0 x 40 #define ADC_COMPLETE 0 x 10 unsigned char m_Adc. Resolution = ADC_10; 6

Serial API 함수 – Adc. Read ADCSR |= 0 x 40; ADCSR의 6번 비트를

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

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0 x 40 #define ADC_COMPLETE 0 x 10 unsigned char m_Adc. Resolution = ADC_10; 8

Serial API 함수 – Adc. Read while(!(ADCSR & 0 x 10)); ADCSR의 4번 비트가

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

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0 x 40 #define ADC_COMPLETE 0 x 10 unsigned char m_Adc. Resolution = ADC_10; 10

Serial API 함수 – Adc. Read value = ADCL; value = (ADCH<<8) | value;

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

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); return value; } #define ADC_START_CONVERSION 0 x 40 #define ADC_COMPLETE 0 x 10 unsigned char m_Adc. Resolution = ADC_10; 12

Serial API 함수 – Adc. Read if(m_Adc. Resolution == ADC_8)(value=value>>2); Adc. Resolution 값이 ADC_8과

Serial API 함수 – Adc. Read if(m_Adc. Resolution == ADC_8)(value=value>>2); Adc. Resolution 값이 ADC_8과 같으면 value 값을 나누기 4 value x x x x value 0 0 x x x x 13

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(unsigned char port) {

Adc. Read API 함수 – Adc. Read unsigned int Adc. Read(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_Adc. Resolution == ADC_8)(value=value>>2); // Adc. Resolution 값이 ADC_8과 같으면 value 값을 나누기 4 return value; } 14

Adc. Read API 함수 – ADC_Initialize void ADC_Initialize(void) { ADMUX = PORT_A 0; ADCSR

Adc. Read API 함수 – ADC_Initialize void ADC_Initialize(void) { ADMUX = PORT_A 0; ADCSR = ADC_ENABLE | ADC_PRESCALE_DIV 32; } #define ADC_ENABLE #define ADC_PRESCALE_DIV 32 0 x 80 5 ADMUX에 port를 A 0로 초기화 ADCSR 값 초기화 ADCSR 7 6 5 4 3 2 1 0 0 0 0 1 15

Adc. Read API 함수 – Lgs. Set. Type ERROR Lgs. Set. Type(unsigned char port,

Adc. Read API 함수 – Lgs. Set. Type ERROR Lgs. Set. Type(unsigned char port, unsigned char type) { if(type>MAX_LGS_TYPE)return UNKNOWN_LGS_TYPE; switch(port) { case PORT_A 6: m_Sensor. Type 1 = type; break; case PORT_A 7: m_Sensor. Type 2 = type; break; default: return UNKNOWN_LGS_PORT; break; } return ERROR_NONE; } 16

Adc. Read API 함수 – Lgs. Read unsigned int Lgs. Read(unsigned char port) {

Adc. Read API 함수 – Lgs. Read unsigned int Lgs. Read(unsigned char port) { if((port == PORT_A 6)||(port == PORT_A 7)) { return get_lego_sen(port); } else return Adc. Read(port); } 17

Adc. Read API 함수 – get_lego_sen uint 16_t get_lego_sen(uint 8_t Channel) { uint 16_t

Adc. Read API 함수 – get_lego_sen uint 16_t get_lego_sen(uint 8_t Channel) { uint 16_t ret =0; if(Channel == PORT_A 6) { Channel = 6; sbi(LEGO_SEN 0_PORT, LEGO_SEN 0_BIT); micro_delay(100); cbi(LEGO_SEN 0_PORT, LEGO_SEN 0_BIT); } else if(Channel == PORT_A 7) { Channel = 7; sbi(LEGO_SEN 0_PORT, LEGO_SEN 1_BIT); micro_delay(100); cbi(LEGO_SEN 0_PORT, LEGO_SEN 1_BIT); } else return 0; micro_delay(5); ret = Adc. Read(Channel); return ret; //PORTG, BIT_ 18

Adc. Read API 함수 – micro_delay void micro_delay(unsigned int Time) { uint 8_t time_500

Adc. Read API 함수 – micro_delay void micro_delay(unsigned int Time) { uint 8_t time_500 us = 0; char i = 0; while(Time--) { for(time_500 us=0; time_500 us<100; time_500 us++) { i = i + time_500 us; } } } 19

Adc. Read API 함수 – Lgs. Read. Type unsigned int Lgs. Read. Type(unsigned char

Adc. Read API 함수 – Lgs. Read. Type unsigned int Lgs. Read. Type(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; 20