SPI통신 > DTM300 온도센서 - 128 SPI - 하이퍼터미널

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

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


BASIC4MCU | SPI통신 | DTM300 온도센서 - 128 SPI - 하이퍼터미널

페이지 정보

작성자 키트 작성일2017-09-01 10:29 조회283회 댓글0건

본문

	

//DTM 300 온도센서
//
//pin1 = vcc, supply
//pin2 = INT,  Output => PB0 & PD0  //128 입력, 외부인터럽트0
//pin3 = sck   Output => PB1  sck  //128 입력
//pin4 = SI     input => PB3  MISO //128 출력
//pin5 = SO    Output => PB2  MOSI //128 입력
//pin6 = GND  Ground
//

//
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
//
//
bit OK_flag=0;
unsigned char cnt=0, data[5];
char str[50];
int Target_temp, Ambient_temp;
//
void TX0_CH(char ch){ while(!(UCSR0A&0x20)); UDR0=ch; }  // 송신함수
//
interrupt [SPI_STC] void spi_isr(void){ // SPI 인터럽트를 사용하여, 데이터 수신하고 있습니다.
    unsigned char ch;
//  while(!(SPSR&0x80));
    ch=SPDR;
    data[cnt++]=ch;
    if(cnt==5){
        if(data[0]==0xA1){
            Target_temp =((unsigned int)data[1]<<8) | data[2];

            Ambient_temp=((unsigned int)data[3]<<8) | data[4];
        }

        cnt=0;
        OK_flag=1; // 5바이트 모두 받으면 플래그 set
    }
}
//

interrupt [EXT_INT0] void ext_int0_isr(void){ // 외부인터럽트0
    cnt=0;

} 

//
void main(void){
    int i;
    DDRB=8;            // PB3(SO)=output, PB2(SI)=input, PB1(SCK)=input, PB0(SS)=input 
    SPCR=0xEF; SPSR=0; // 7=interrupt-on,  6=dis-able,  5=LSB부터 전송,  4=slave모드, mode3   2,1=(sck)128kHz  
    UCSR0B=8; UBRR0H=0; UBRR0L=103;
    EICRA=0xaa; EIMSK=1;            // falling edge, int0
    #asm("sei")
    while(1){ 
        if(OK_flag){ OK_flag=0;
            sprintf(str,"Target Temp=%d  Ambient temp=%d\r\n",Target_temp, Ambient_temp);
            i=0; while(str[i])TX0_CH(str[i++]);
        } 
    }
}

댓글 0

조회수 283

등록된 댓글이 없습니다.

SPI통신HOME > 통신 > SPI통신 목록

게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기