BASIC4MCU | 질문게시판 | 답변 : 답변 : 아트메가128>LED불,소리 켜기
페이지 정보
작성자 master 작성일2019-11-20 16:13 조회19,921회 댓글3건본문
TCNT0=17(DO_DATA); TCCR0=3; // 16000000Hz/32/(256-17)=2092.050209205021Hz=0.478ms
2092.050209205021Hz / 2 = 1046.025104602511Hz
주파수가 조금 다르긴 하지만
설정만 보면 주파수 설정이 맞습니다.
다시 인터럽트 함수를 보면
ISR(TIMER0_OVF_vect){ // 2092.050209205021Hz=0.478msif(++count>=30){ count=0; // 0.478ms * 30 = 14.34ms = 69.7350069735007Hzif(state==OFF){TCNT0=DO_DATA;PORTB^=0x10;if(PORTA!=0xF0)PORTA=0xF0;state=ON;}else{TCNT0=RE_DATA;PORTB^=0x10;if(PORTA!=0x0F)PORTA=0x0F;state=OFF;}}}
if(++count>=30){ count=0; // 0.478ms * 30 = 14.34ms = 69.7350069735007Hz
이 설정으로는 절대로 도,레 주파수가 생성되지 않습니다.
volatile int count=0;//ISR(TIMER0_OVF_vect){PORTB^=0x10;if(state==OFF)TCNT0=DO_DATA;else TCNT0=RE_DATA;//if(++count>=1046){ count=0; // 0.478ms * 1046 = 499.988msif(state==OFF){if(PORTA!=0xF0)PORTA=0xF0;state=ON;}else{if(PORTA!=0x0F)PORTA=0x0F;state=OFF;}}}
이런식으로 작성해야 합니다.
댓글 3
조회수 19,921세계제일초보님의 댓글
세계제일초보 작성일
아 ㅠㅠ 소리가 나길래."도","레"인지알았습니다.. 음치라서;;;
선생님.. 질문 있습니다.
1. 위에서는 TCNT0을 먼저 선언하고 PORTB를 입력 , 도를 먼저 입력하고 버저ON하는거랑
아래꺼는 PORTB를 먼저 선언하고 TCNT0을 DA_DATA를 입력 , 버저ON하고 도를 선언 이게.. 맞는지 모르겠지만.,.,
->포트출력을 TCNT0을 출력의 뜻인거죠..?그래서 PORTB에서 도가 작동 ,제가PORTB를 빼고 프로그램을 시작하니깐 소리가 나지 않는 상태로 LED만 움직이여서 질문 드립니다.
2. if(++count>=1046){ count=0; // 0.478ms * 1046 = 499.988ms
if(++count>=30){ count=0; // 0.478ms * 30 = 14.34ms = 69.7350069735007Hz
++count30 하면 주파수가 69.73Hz가 나와서... 도의 소리가 않나는 의미인가요..?
1046을 하면 주파수가 약2000Hz가 나오는데.. 그래서 제가 1046을 2000으로 해도 ..도레 소리는 나는거 같습니다
대신 소리랑 LED의 움직임이 조금더 느려지는건데.. 시간과..Hz를 적어 주신거에 대해서.. 궁금합니다..!!
p.s 선생님..지금은 선생님이 알려주신 내용을 반복숙달 이해를 할려고 꾸준히 않보면서 프로그램을 이해 할려고 노력하고 있습니다.. 기초만이라도 어느정도 다지고 싶은데.. 추천하는 방법이나 서점 있으면 알려주세요 ㅠㅠ
master님의 댓글
master 작성일
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo6&wr_id=63
LED 1개 켜는 것부터 차근차근 공부하세요
기초가 잘 닦여있으면 남에게 물어보지 않고도 진도를 나갈 수 있습니다.
세계제일초보님의 댓글
세계제일초보 작성일네 선생님꼐서 링크걸어 놓은거 부터 쪽팔린다고(?)생각 않하고 다시 해보겠습니다!!!