ArduinoUno(Atmega328P), LM35(온도센서)를 이용해 LCD에 Text 나타내기
조건)
1. 온도 센서를 이용하여 값을 읽어온다.
2. 읽어온 값을 ADC(Analog to Digital Converter)를 사용해 준다.
3. 변환된 값을 이용하여 온도와 변환된 값을 LCD에 출력해 준다.
➤ 실제 제품에 올리기 전 시뮬레이션으로 점검하기
실제 Atmega328P에 올리기 전 AVR studio 4 와 Proteus에서 먼저 실행하여 이상이 없는지 확인을 했다.
ADCSRA |= 1<<ADEN | 1<<ADIE | 1<<ADATE | 6;
→ADCSRA에서 설정해 주며 ADC를 사용하는데 세부 설정을 해준다.
ADEN(ADC Enable), ADSC(ADC Start Conversion)(뒤에 main 부분에 따로 설정해 두었다.), ADATE(ADC Auto Trigger Enable), 6(ADPSn 과 연관되어 있으며 6(0b110) 으로 설정해 64분주로 설정했다.)
ADMUX |= 1<<REFS0;
→ADMUX에서 8번째와 7번째 비트인 REFS1, REFS0을 [01]로 설정하여 Vcc를 사용하고 Vref에는 캐패시터를 연결하여 기준 전압을 설정해 주었다.
또한, 나머지 비트는 0으로 셋팅되어 있기에 따로 설정할 필요 없이 ADC0를 사용하면 된다.
(main 부분 코딩)
spirintf() : LCD에 올릴 문자를 작성해 주었다.
LCD_str_write() : LCD에 문자열을 작성하는 부분이며 첫 번째는 몇 번째 행인지 두 번째는 몇 번째 열인지 마지막은 어떤 문자열을 올릴지 나타낸다.
(컴파일 하여 시뮬레이션 결과 문제 없이 작동하는 모습)
➤ 실제 Atmega328P에 업로드
실제 Atmega 328P에 업로딩시에는 Atmel Studio 7.0을 사용하였다.
AVR studio에서 작성한 코드를 그대로 가져왔기에 달라진 부분은 없다.
AVR studio에서 작성 시 LCD에 실수를 표현하기 위해서 옵션에서 따로 링커를 설정해 주었다.
Custom Option에서 [Linker Options]를 클릭한뒤
-Wl,-u,vfprintf -lprintf_flt
를 작성 후 추가해 주면 된다.
Atmel에서는 다른 방법으로 추가를 해주어야 한다.
2가지 방법이 있는데
1.
이곳으로 들어가
Link statically, Use vprintf library를 체크하고
libprintf_flt를 체크하여 라이브러리를 추가해주는 첫 번째 방법과
2.
똑같이 라이브러리를 추가하고
이곳에서 -Wl,-u,vfprintf -lprintf_flt를 입력하여 주면
마지막 줄에 입력한게 추가된 것을 볼 수 있다.
그 후에 전에 올려둔 포스팅에 적어 두었듯 외부 upload를 사용하여 아두이노에 올려주면 된다.
업로드가 완료되면 위의 사진을 참고하여 LCD와 아두이노의 핀을 각각 알맞은 곳에 연결해 주면 된다.
정상 작동하는 것을 확인할 수 있다.
1. 온도 센서를 이용하여 값을 읽어온다.
2. 읽어온 값을 ADC(Analog to Digital Converter)를 사용해 준다.
3. 변환된 값을 이용하여 온도와 변환된 값을 LCD에 출력해 준다.
➤ 실제 제품에 올리기 전 시뮬레이션으로 점검하기
실제 Atmega328P에 올리기 전 AVR studio 4 와 Proteus에서 먼저 실행하여 이상이 없는지 확인을 했다.
ADCSRA |= 1<<ADEN | 1<<ADIE | 1<<ADATE | 6;
→ADCSRA에서 설정해 주며 ADC를 사용하는데 세부 설정을 해준다.
ADEN(ADC Enable), ADSC(ADC Start Conversion)(뒤에 main 부분에 따로 설정해 두었다.), ADATE(ADC Auto Trigger Enable), 6(ADPSn 과 연관되어 있으며 6(0b110) 으로 설정해 64분주로 설정했다.)
ADMUX |= 1<<REFS0;
→ADMUX에서 8번째와 7번째 비트인 REFS1, REFS0을 [01]로 설정하여 Vcc를 사용하고 Vref에는 캐패시터를 연결하여 기준 전압을 설정해 주었다.
또한, 나머지 비트는 0으로 셋팅되어 있기에 따로 설정할 필요 없이 ADC0를 사용하면 된다.
(main 부분 코딩)
spirintf() : LCD에 올릴 문자를 작성해 주었다.
LCD_str_write() : LCD에 문자열을 작성하는 부분이며 첫 번째는 몇 번째 행인지 두 번째는 몇 번째 열인지 마지막은 어떤 문자열을 올릴지 나타낸다.
(컴파일 하여 시뮬레이션 결과 문제 없이 작동하는 모습)
➤ 실제 Atmega328P에 업로드
실제 Atmega 328P에 업로딩시에는 Atmel Studio 7.0을 사용하였다.
AVR studio에서 작성한 코드를 그대로 가져왔기에 달라진 부분은 없다.
AVR studio에서 작성 시 LCD에 실수를 표현하기 위해서 옵션에서 따로 링커를 설정해 주었다.
Custom Option에서 [Linker Options]를 클릭한뒤
-Wl,-u,vfprintf -lprintf_flt
를 작성 후 추가해 주면 된다.
Atmel에서는 다른 방법으로 추가를 해주어야 한다.
2가지 방법이 있는데
1.
이곳으로 들어가
Link statically, Use vprintf library를 체크하고
libprintf_flt를 체크하여 라이브러리를 추가해주는 첫 번째 방법과
2.
똑같이 라이브러리를 추가하고
이곳에서 -Wl,-u,vfprintf -lprintf_flt를 입력하여 주면
마지막 줄에 입력한게 추가된 것을 볼 수 있다.
그 후에 전에 올려둔 포스팅에 적어 두었듯 외부 upload를 사용하여 아두이노에 올려주면 된다.
업로드가 완료되면 위의 사진을 참고하여 LCD와 아두이노의 핀을 각각 알맞은 곳에 연결해 주면 된다.
정상 작동하는 것을 확인할 수 있다.
댓글
댓글 쓰기