[당근보드] 온도센서인 TCN75의 값을 읽어 LCD에 표시하기.

글 내용

당근보드엔 온도센서 TCN75가 달려있지요...
시계IC인 DS1307도 있는데 이건 왜인지 작동이 안됩니다....; 그래서 온도센서만 해봅니다..

온도센서는 I2C (아이스퀘어씨) 통신방식을 사용해 데이터를 전송합니다. AVR에서는 TWI 라고 써있더군요..

별거 없고 어디서 주워온 소스에 제 입맛대로 바꿔서 썼습니다.ㅎㅎ 소스 보시죠~
[CODE]#include #include #include "delay.h" #include "clcd4.h" unsigned char str[16], str1[20]; void tcn75_write(unsigned char address, unsigned char byte) { TWCR= 0xA4; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x08); TWDR= 0xD0; TWCR= 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x18); TWDR= address; TWCR= 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x28); TWDR= byte; TWCR= 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x28); TWCR = 0x94; } unsigned int tcn75_read(unsigned char address) { unsigned int high_byte, low_byte, result; TWCR = 0xA4; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x08); TWDR = 0x90; TWCR = 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x18); TWDR = address; TWCR = 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x28); TWCR = 0xA4; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x10); TWDR = 0x91; TWCR = 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x40); TWCR = 0xC4; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x50); high_byte = TWDR; TWCR = 0x84; while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x58); low_byte = TWDR; TWCR = 0x94; result = high_byte << 1; result |= (low_byte >> 7); return result; } int main() { unsigned int temp; DDRD = 0xC3; TWBR = 72; TWSR = 0x00; TWCR = 0x04; LCD_init(); delay_ms(200); COMMAND(0x01); LCD_str(LINE1, " NG&PARI "); LCD_str(LINE2, " Heo Kwang Seon "); while(1) { temp=tcn75_read(0x00); if((temp & 0x0100)==0x0000){ if ((temp & 0x0001)==0x0001) sprintf(str,"Temperature : %d.5'C",temp>>1); else if ((temp & 0x0001)==0x0000) sprintf(str,"Temperature : %d.0'C",temp>>1); } else { temp &= 0x00FF; if ((temp & 0x0001)==0x0001) sprintf(str,"Temperature : -%d.5'C",temp>>1); else if ((temp & 0x0001)==0x0000) sprintf(str,"Temperature : -%d.0'C",temp>>1); } LCD_str(0xD4,str); delay_ms(200); } } [/CODE]
사용자 삽입 이미지Digimax S500 / Kenox S500 / Digimax Cyber 530 | Normal program | Pattern | 1/15sec | Off Compulsory | 2009:08:26 03:39:10

당근보드가 좀 커졌죠?? 만능기판에 이것저것 부가기능(10P 박스헤더, JTAG포트, ISP포트, USB전원포트, 포트B의 LED, 전면 20X4 CLCD 등..)을 붙이느라 커졌습니다..ㅎㅎ
LCD엔 우리 동아리 이름과 제 이름, 그리고 온도가 나옵니다...
동아리방에 온도계가 3개가 있는데 알콜 온도계는 30.5도, 제쪽 연필꽂이 온도계는 28.3도, 옆 친구 연필꽂이 온도계는 26.1도,  그리고 당근보드의 현재 온도는 31.5도 입니다... 제 자리가 좀 뜨겁나 봅니다;;;;

티스토리 툴바