저는 졸업논문으로 리모컨을 만들려구합니다. 수신부와 발신부 전부 다요ㅋㅋㅋ 근데 문제는 몇개월째 매달려잇네요;;
암튼.. 제가 펄스를 ir led를 통해서 전송 시킬려구 pwm을 건들려구 합니다
근데 맘대로 안되네요
일단 눈으로 확인 할 수 있도록 주기를 2초로 주고 싶어서 코딩을 해봤습니다.
계속 LED가 켜져잇네요;;좀 꺼주고 싶은데..
주기 계산법이 잘 못 되있는거같은데..전 잘 모르겟어요;;
그리구 적외선 통신할때 PWM을 굳이 써야하나요??좀 더 간단한 방법은 없을까요??
아!! 그리구 timer0를 가지고 만들고 싶어요;;; pwm 파형을요;;
또!! ir 리모컨 좀더 쉽게 만들수 있는 방법은 없을까요??
#include <mega128.h>
#include <delay.h> unsigned int led=0; interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 인터럽트 벡터
{
TCNT0=131; //주기를 2초로 하고 싶어서;; f=16Mhz / { 8*256 *15625 (=125*125) }=0.5hz
led++;
if(led>=125) // 1초 동안 led on
PORTB.4=1;
else if(led==250) // 1초후에 led off
{
PORTB.4=0;
led=0;
}
} void timer0_init() // timer0 초기화
{
TCCR0=0x6a; // 분주비 8 , fast pwm , top에서 set
OCR0=128; // duty 비 50:50
TCNT0=131;
TIMSK=3;
} void init(); void main(void)
{
init();
timer0_init();
while (1)
{
}
}
void init()
{
PORTB=0x00;
DDRB=0xff; // Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x49;
TCNT0=0x00;
OCR0=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ETIMSK=0x00; // Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00; // Global enable interrupts
#asm("sei")
}
암튼.. 제가 펄스를 ir led를 통해서 전송 시킬려구 pwm을 건들려구 합니다
근데 맘대로 안되네요
일단 눈으로 확인 할 수 있도록 주기를 2초로 주고 싶어서 코딩을 해봤습니다.
계속 LED가 켜져잇네요;;좀 꺼주고 싶은데..
주기 계산법이 잘 못 되있는거같은데..전 잘 모르겟어요;;
그리구 적외선 통신할때 PWM을 굳이 써야하나요??좀 더 간단한 방법은 없을까요??
아!! 그리구 timer0를 가지고 만들고 싶어요;;; pwm 파형을요;;
또!! ir 리모컨 좀더 쉽게 만들수 있는 방법은 없을까요??
#include <mega128.h>
#include <delay.h> unsigned int led=0; interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 인터럽트 벡터
{
TCNT0=131; //주기를 2초로 하고 싶어서;; f=16Mhz / { 8*256 *15625 (=125*125) }=0.5hz
led++;
if(led>=125) // 1초 동안 led on
PORTB.4=1;
else if(led==250) // 1초후에 led off
{
PORTB.4=0;
led=0;
}
} void timer0_init() // timer0 초기화
{
TCCR0=0x6a; // 분주비 8 , fast pwm , top에서 set
OCR0=128; // duty 비 50:50
TCNT0=131;
TIMSK=3;
} void init(); void main(void)
{
init();
timer0_init();
while (1)
{
}
}
void init()
{
PORTB=0x00;
DDRB=0xff; // Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x49;
TCNT0=0x00;
OCR0=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ETIMSK=0x00; // Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00; // Global enable interrupts
#asm("sei")
}
그리고 주기 계산 틀렷구요
atmega128 데이터 시트에 나옵니다만
그리고 레지스터 설정 부분인데요
처음 초기 설정값과는 다르게 init 함수에 레지스터를 설정하셨네요 ..
pwm 같은데 타이머가 동작 할까요?
좀 더 고민하시고 공부하셔서 질문하시는게.....
자동적으로 설정된거라서 그냥 놔둔건데 이것도 바꾸어야하나요??
avr 지식이 많이 없다보니 자꾸 짧은 질문만 하게 됩니다;;
그리구 댓글 감사합니다^^
ppm도 해볼께요 ㅎㅎ얼른 avr을 능수능란하게 쓰는 날이 왓음 좋겟군요ㅠㅠ