회원가입 ID/PW 찾기
AA

#pragma interrupt_handler timer0_comp_isr:16
void timer0_comp_isr(void)
{
 ir_pulse_count++; // 1us초당 Count
 if(ir_pulse_count<=10) // 10us초동안 Port A High
 {
 PORTA=0xff;
 }
 else if(ir_pulse_count<=240) // 240us초동안 Port A Low
 {
 ADMUX = 0x20; //해당 ADC 채널 설정
 ADCSRA = 0xCF; //최초의 ADC설정,컨버팅 시작.
 PORTA=0x00;
 }
 else // 240us 이후 Counter 초기화
 {
 ir_pulse_count=0;
 }
}

 

void main(void)
{
 delay_ms(100);
 DDRF=0x00; //수광포트 입력
 DDRA=0XFF; //발광포트 출력
 PORTA=0X00;
 
 LCD_init();
 Command(HOME);
 LCD_String("ADC TEST");  // 첫 번째 라인에 출력
 
 TCNT0 = 0x00; //set count
 TCCR0 = 0x62; // 8분주비 pc pwm 0.5us
 OCR0 = 2; 
 TIMSK = 0X02;
 SEI();
 
 while (1)
    {          
    sprintf(str,"%d",value);
 Command(LINE2);
 LCD_String(str);
 delay_ms(1000);
    }
}

책을 보니 pc pwm이 발생하는 주파수가 16000000/분주비*512 라고 공식이 있더군요 그래서

위의 공식대로 해서 분주비를 8로 해서 3906.25 주파수가 나오고

비교 매치에서 OCR0에서 2를줘서 1us당 비교매치가 걸리도록 해서

위의 인터럽트 루틴처럼 온하고 다시 오프 하고 반복인데

뭐가 잘못된걸까요?

 

카메라로 보니 불이 계속 들어 오더라구요 펄스로 되는건지는 모르겠구요

댓글 15
  • No Profile
    ir_pulse_count 일단 초기화를 좀 시켜주시져-_- 쓰레기값 들어가 있을텐데요//

    레지스터는 직접보세요(데이터 쉬트 보기 귀찮아서 지송, 술먹으로 가기전이라서요..ㅋㅋ)


    그리고



    ir_pulse_count++; // 1us초당 Count
     if(ir_pulse_count<=10) // 10us초동안 Port A High
     {
     PORTA=0xff;
     }
     else if(ir_pulse_count<=240) // 240us초동안 Port A Low
     {
     ADMUX = 0x20; //해당 ADC 채널 설정
     ADCSRA = 0xCF; //최초의 ADC설정,컨버팅 시작.
     PORTA=0x00;
     }



    이런식으로 하면 10초동안 high가 아니라 240초 동안 하이지요

    센서 키고 240us 후에 꺼질테니까요^^;;

    반대로 해야됩니다.(0x00-> 0xff, 0xff -> 0x00)

    240키고 10us 끄면 잔류때문에 계속 켜진걸로 보일꺼에요


  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0

    아 펄스는 저렇게 계산해서 하는게 맞나요? 이게 헷갈리는게
    주파수는 시간의 역수 니깐 4khz를 뿌리려면 4ms주기로 해야하는것 같은데
    책에서는
    pc pwm,고속pwm,ctc 모드 마다 주파수 공식이 있더라구요
    둘중에 아무방식이나 해도 상관없는건지..

  • No Profile
    펄스만드는 기본은 다 똑같은데요

    단지 하이가 얼마냐 로우가 얼마냐 그 차이입니다.

    비교매치냐 오버플로어 매치냐 개념에 따라서 약간 설정이 다른데 기본 컨셉은 다 똑같아요..
    아흑

    양주를 너무 마니 먹어서 아른아른해서 깊히 설명드리기 곤란하네요 죄송하네요-_-;;


    술깨고 다시 해드릴께요
  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0
    초기화는 전역변수 선언할때 했구요
    불키는거는 0XFF가 맞아요 이게 풀업 저항이 아니라
    풀다운 저항이거든요 센서라서 한번에 많은 전류를 주려고...
  • No Profile

    풀업하고 풀다운하고 0xff, 0x00하고 관계가 있나요?


    센서구동방식이 소스냐 싱크냐에 따라서 달라지는걸로 알고 있습니다.

    제 회로도도 그렇게 만들어졌는데요.

    어떤 말씀인지 저는 잘 이해가안되네요.

  • sinpk 님이 말한것이 아마도 이것같습니다

    풀업저항이 없으면 LED를 연결할경우 GND로 가야 불이 켜지고
    풀업저항이 있으면 LED를 연결할경우 VCC로 가야 불이 켜진다.

    이말씀 아닌가용?

  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0
    넹 뺘송님 말하신거처럼 그뜻인데요 발광센서에 그냥 일반 led랑은 반대로 0xff해야지 불이 오더라구요..
    소스냐 싱크냐에 따라 달라진거는거는 무슨말인가요?
  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0
    아 그리고 센서2 예제 코드비전용인것같아서 코드비전에서 컴파일해봤는데 에러 나더라구요...
    버전이 달라서 그런가요?

    실제 동작되는지 보려고햇는데

  • 올리신 소스를 그대로 컴파일 하셨나요?

  • No Profile

    코드비젼 1.253버젼부터인가 좀 이상하더군요. 어셈블링하면서 에러가 자주 나더군요 그래서 저는

    1.252버젼을 사용합니다. 저 소스는 1.246에서 작성한 소스이지만 1.252에서 해도 잘 작동합니다..

    소스방식과 싱크방식에 대해서는 전원을 어느쪽에 인가하는 방법에 따라 다른데요//

    이 부분은 아마 빠숑님이 자료로 해서 올려주실꺼에요..ㅋ

  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0

    새로 설정해서 컴파일후 다운로더하니 동작은 하던데
    첫부분에 LCD 포트 설정이랑 발광센서 포트 다른거 수정해서
    전 D포트를 LCD로 발광을 A포트로 사용하거든요 그리고 메인문에서
    DDRA포트 출력으로 잡았구요
    그런데 LCD에서 다른거 다 잘나오는데..

    ADC값이 0로 나오네요...
    카메라로 봤을때는 그냥 불이 꺼진상태구요

                                        포트F
                                            |
    수광부 회로는 VCC-수광-콘덴서-4.7K-GND
                                            |
                                          470-GND
    이런식으로 구성했구요
    470옴을 어레이저항으로 햇구요
    점달린곳에다가 그라운드 물리고 옆에 칸에 콘덴서에서 나오는 선이랑 연결했어요

  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0
    ADC가 안되는게 따로 파워서플라이를 사용안해서 그런가요?

    보드가 PCB로 떠서 전원부가 달린 보드인데 USB-ISP에서 5V 끌어올수 있는 기능이 있길래
    파워연결없이 그냥 USB로만 해서 ADC테스트했는데..

    LCD랑 LED키고 제어하는거는 문제없이 되어서리..
  • No Profile
    usb 전원은 가급적이면 사용하지 않는ㄱ ㅔ 좋습니다.

    메인보드가 usb 쇼트 차단 기능이 있어  쇼트가 나면 차단해주지만 오래된 모델은 그 기능도 허접합니다.

    또한 제대로 동작하더라도 usb포트가 고장날 가능성이 굉장히 높습니다(두대 해먹음)


    그리고 usb는 500ma가 최대 허용전류입니다.

    lcd에 센서 키면 전류가 모자랄꺼 같은데요


    오실로 스코프 있으면 f포트 단자를 좀 찍어보면 좋을듯하네요..


       포트F
                                            |
    수광부 회로는 VCC-수광-콘덴서-4.7K-GND
                                            |
                                          470-GND

    이거 참 이해하기 힘든---;;
  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0

    글로 설명하려니 ㅎㅎ
    라인트레이서 수광부 그대로 한개만 테스트 목적으로 했구요

    소스코드를 수정해서 ADC값이 안나온다면

    전류가 부족해서라고 생각해야하나요?

    아니면 회로인가요? ㅜㅜ

  • No Profile
    글쓴이 sinpk 07.09.08 19:47 댓글 좋아요 0 싫어요 0
                                                       포트F
                                                          |
    수광부 회로는 VCC---수광---콘덴서-----4.7K---GND
                                           |
                                         470---GND

    점선을 와이어라고 생각하시고 라인트레이서 회로도 참고하시면 이해가 되실거에요 ...

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

search
번호 분류 제목 글쓴이 조회 수 날짜
7 자유주제 HOT아 시험 망쳤다 -0-6 뺘쑝 30641 2007.04.24
6 자유주제 HOT무심코 후원하기를 눌렀다가20 나야소달ㅋ 30189 2007.04.22
5 자유주제 HOT홈페이지 업데이트가 거의 끝났네요..2 아크마 35560 2007.04.20
4 자유주제 HOT홈페이지 로고입니다. 투표해주세요 ㅋ14 보해소주 39766 2007.04.16
3 자유주제 HOT컴박스의 무궁한 발전이 있으시길..18 서주형 44570 2007.04.13
2 자유주제 HOT안녕하세요~9 화언 30351 2007.04.11
1 자유주제 HOT안녕하세요8 아크마 59697 2007.04.10
  • 마음이 있지 않으면 보아도 보이지 않고, 들어도 들리지 않고, 먹어도 그 맛을 모른다.
    - 대학
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.