회원가입 ID/PW 찾기
AA
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h> 
#include <util/delay.h>
#define ENABLE  (PORTA |=  0x04)  // LCD ENable 또는 PORTA_Bit2=1;
#define DISABLE (PORTA &= 0xFB)   // LCD DIsable 또는 PORTA_Bit2=0;


volatile unsigned int count=0; //count는 1cm마다 증가하는 변수. 즉, count 값이 곧 물체와의 거리이다.
volatile unsigned int length; //거리를 저장 할 변수


void init_PORTA(void)
{
DDRA = 0xFF;    // PORTA 출력
PORTA=0xFF;     // 초기 값
}
void delay(int dly)
{
        while(dly--){
        int i,n;
        for(i=0;i<50;i++){
                n=600;
                while(n--);
                }
        }
}

void wait_busy_flag(void)
{
unsigned int i;
for(i=0;i<10000;i++);

  
void m_delay(unsigned int m) //딜레이 루틴
{
    cli();
unsigned int i, j;
 
for(i=0;i<m;i++)
  for(j=0;j<2650;j++);  //16MHz : 1msec
sei();
}

void ddelay(unsigned int p)
{
unsigned int i;

for(i=0;i<p;i++);
}

void instruction_out(unsigned char b)//명령어 쓰기 함수
{
PORTA=b&0xF0;                    //상위 4BIT 출력 

ENABLE;                          //ENABLE
DISABLE;                         //DISABLE
PORTA=(b<<4)&0xF0;               //하위 4BIT 출력
ENABLE;                          //ENABLE
DISABLE;                         //DISABLE
//명령어 수행이 완료될때까지 지연
_delay_ms(2);

}


void char_out(unsigned char b)  //LCD에 한문자 출력 함수
{
   
PORTA=(b&0xF0)|0x01;        //상위 4BIT 출력
ENABLE;                     //ENABLE
DISABLE;                    //DISABLE 
PORTA=((b<<4)&0xF0)|0x01;   //하위 4BIT 출력
ENABLE;                     //ENABLE
DISABLE;                    //DISABLE

   //명령어 수행이 완료될때까지 지연
    _delay_ms(2);
}


void string_out(unsigned char b, unsigned char *str) //문자열 출력 함수
{
unsigned int i=0;
instruction_out(b);   //LCD 위치 지정
do{
   char_out(str[i]);
  }while(str[++i]!='\0');   // NULL 문자를 만날 때 까지
}


void init_LCD(void)                //LCD초기화 루틴
{   
init_PORTA();    // LCD를 연결한 포트 초기화

  _delay_ms(15);                         
           
ddelay(600);  
instruction_out(0x28);   //LCD FUNCTION SET(16X2 LINE, 4 BIT, 5X8 DOT)            
    _delay_ms(2); 
    instruction_out(0x28);   //LCD FUNCTION SET(16X2 LINE, 4 BIT, 5X8 DOT)    
_delay_ms(2); 
instruction_out(0x0C);   //LCD DISPLAY ON, CURSOR OFF, BLINK OFF 
instruction_out(0x06);   //LCD ENTRY MODE SET
instruction_out(0x02);   //RETURN HOME
instruction_out(0x01);   //LCD CLEAR
instruction_out(0x01);   //LCD CLEAR 
}
void init_SERIAL(void)   // 시리얼 함수 초기화
{

     DDRE=0xFE;     // PE1(TXD) 출력(1), PE0(RXD) 입력(0)

     UCSR0A=0x00;
     UCSR0B=0x98;   // Receive enable, Transmitte enable
     UCSR0C=0x06;   // 비동기 방식, No parity bit, 1 stop bit   

     UBRR0H=0;
     UBRR0L=0x08;   // 16MHz에서 9600 bps  (10진수 103)
}

void lcd_decimal(unsigned int hex) //lcd  10진수 표기
{
     unsigned int h;
     //instruction_out(b); //lcd lotate
     h=(hex/10000);              //5자리수에서 첫째 자리 분리.
     if (h!=0) char_out(h+0x30);
     else char_out(0x30);
     h=((hex%10000)/1000);       //4
     if (h!=0) char_out(h+0x30);
     else char_out(0x30);
     h=(((hex%10000)%1000)/100);    //3
     if (h!=0) char_out(h+0x30);
     else char_out(0x30);
     h=((((hex%10000)%1000)%100)/10);  //2
     if (h!=0) char_out(h+0x30);
     else char_out(0x30);
     h=((((hex%10000)%1000)%100)%10);  //1
     if (h!=0) char_out(h+0x30);
     else char_out(0x30);
     }
// 시리얼 포트로 한문자를 송신한다. 
char getch(void)
{
unsigned char data;
while(!(UCSR0A & 0x80));
data=UDR0;
UCSR0A |=0x80;
return(data);
}
void putch(unsigned char data)
{
while(!(UCSR0A & 0x20));
UDR0=data;
    
UCSR0A |= 0x20;         // 클리어 UDRE0
}
SIGNAL(SIG_OVERFLOW0)//타이머 0번 인터럽트 함수부분.
{
     
    TCNT0 = 0x8b; //138; //(1/16us)*8분주*(256-138) =59us 마다 인터럽트를 발생 0x8a
    count++;  //cm 단위    srf04의 경우 59us가 1cm 이다 타이머 카운터0 레지스터 (읽기 쓰기가 가능)   // 이곳도 잘되고있는지 궁금해요..
}
SIGNAL(SIG_INTERRUPT1) //에코신호가 들어오면...
{
    SREG = 0x80; 
    DDRB= 0xff; //led입력

    TIMSK = 0x01;    // 타이머 정지
    length = count; //지금까지 잰 거리를 length변수에 넣음.
    EIMSK = 0;   // 외부 인터럽트1 정지
    if(length > 10){
       
PORTB =0x80;                    //  이곳이 작동이 안됨.
  
    }else {
PORTB = 0x11;  //물체가 그 사이에 없으면 led oFF
}
instruction_out(0xC1);
lcd_decimal(length);
    count = 0;  
cli();
}
int main(void)
{
    unsigned char data;
   
    DDRD = 0x02; //INT1(인터럽트)에 echo연결
    DDRD= 0x01; //trigger연결
     init_SERIAL();  //LCD 초기화
    init_LCD();
    instruction_out(0x01);     // LCD clear
    string_out(0x81,"USART0");
 
    

    while(1){

     EICRA = 0x02;    // 외부 인터럽트 제어 레지스터 하강에지설정 ok
     TCCR0 = 0x02; //8(8분주)   -> 타이머 카운터 0 제어 레지스터 ok

        SREG = 0x80; //set global interrupt enable 전역 인터럽트 인에이블 비트셋

        PORTD= 0x01; //트리거 신호를 10us만큼 보낸다.

        delay(1);
        PORTD= 0x00;
        //TCNT0 = 0x8b;
       //(1/16us)*8분주*(256-138) =59us 마다 인터럽트를 발생

        TIMSK = 0x01; //타이머 카운트 활성화 -> 이 때 부터 시간을 잰다.
        EIMSK = 0b00000001;  //오버플로우 인터럽트
        EIMSK = 0b00000010;    // 외부 인터럽트1 인에이블설정  
        delay(5);
 
    }
}

 

 
제가 지금 하는 초음파모듈 거리 값 받아오는 건데요 아무리 해봐도 도저히 안되네요
방법좀 알려주세요
led 도 안켜지구요 ㅠㅠ
댓글 1
  • No Profile

    초음파거리측정 인테넷에 자료는 많아도 다 거기서 거기죠 소스와 설명이....... 저도 애를먹었죠 아무것도 없는 상태에서 하려다가 ㅎㅎ

     

     

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
4204 중고장터 HOTLED Matrix(전광판) 개발 Kit 팝니다. (Full 소스제공) - 파격 할인 Golilla20 10116 2011.06.27
4203 마이크로프로세서 HOT바코드를 AVR에 입력에 관한 질문입니다.1 절연이45 2181 2011.06.27
4202 PADS HOTArtwork Routing 진행시 배선 순서는?1 파도^^; 2153 2011.06.25
4201 전기전자 아무거나 HOT그래픽 LCD 관련 질문드립니다! 랜시스 1493 2011.06.24
4200 PADS HOTPads 9.0.2 설치시 라이센스문제 문의드립니다.1 dito 3667 2011.06.24
4199 마이크로프로세서 HOTADC 에 관한 질문2 고고고씽 1872 2011.06.22
4198 마이크로프로세서 HOTATmega128 Board 에 연결한 Bluetooth 의 페어링 문제 nrwnqsr 3106 2011.06.22
4197 PADS HOTPADS 9.3 win7 64bit 에서 License.dat 설치문제.. 돌겠습니다.1 PDP70 4238 2011.06.22
4196 자유주제 HOTDC-DC IC 관련 입니다. 무적쫑 15223 2011.06.22
4195 펌웨어 & 코딩언어 HOTAtmega128에서 Reset 하는 방법 중 궁금한 점이 있습니다!!!4 공돌이의꿈 3166 2011.06.21
4194 Sensor 설계 HOT콘덴서 인덕터 코일 단위와 관련한 질문입니다.1 windjick 2961 2011.06.21
4193 마이크로프로세서 HOT89c51, L293B 사용해서 라인트레이서 제작중인데 소스 좀 수정부탁드려요.. 짜룡e 2244 2011.06.19
4192 자유주제 HOT고소왕ㅋ5 데이비스깽 3234 2011.06.18
4191 자유주제 HOT블루투스 모듈에 관해서1 데이비스깽 17152 2011.06.18
4190 마이크로프로세서 HOTAVR to MFC 시리얼통신 Gentlewolf 4469 2011.06.18
마이크로프로세서 HOT초음파 연동 uart led1 혼합쥬스 2008 2011.06.15
4188 마이크로프로세서 HOT[Keil Uvision] 크랙버전이나 정품버전있으신분 보내주시면 감사하겟습니당1 developer 3779 2011.06.15
4187 개발용역 HOT개발의뢰합니다.(파트타임,알바,기간제)3 아크로팰리스 7680 2011.06.14
4186 PADS HOT인스톨 깔고,,,mentorKG.exe 실행하는데.... 부탁드립니다.1 하경철 3337 2011.06.14
4185 Software & IDEs HOT펌웨어 하다가 막히는 부분이 있어서 질문 드립니다. 마모루 1563 2011.06.13
Prev 1 ... 80 81 82 83 84 85 86 87 88 89 ... 295 Next
  • 자신이 하는 일을 재미없어 하는 사람치고 성공하는 사람 못 봤다.
    - 데일 카네기
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.