تایمر

19 بازدید
سوال شده دسامبر 16, 2016 در AVR توسط ناجی
سلام

من میخوام چندین پالس pwm رو توی خروجی به ترتیب داشته باشم و هر کدوم 3 ثانیه تکرار بشه

وقتی با حلقه این کار رو می کنم فرکانس خروجی خیلی میاد پایین

#include <mega8.h>
#define xtal 8000000
 long int a=0,b=0;

void delay_1s(){
 TCCR1A=0x00;
 TCCR1B=0x03;
 TCNT1H=0x0B;
 TCNT1L=0xDC;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;
 while(!(TIFR & 0x04)){//wait for 1s
//other program with out delay
 };
 TCCR1B=0x00; //timer0 off    
 TIFR|=0x04; //default flag timer1 ==> change to 1
}

void delay1()
{
TCNT2=0xe8;
TCCR2=0B00000001; // Timer Clock = CLK/8
while(!TIFR&0x01); // Wait Until Overflow
TIFR=TIFR|0B00000001; // Clear TOV0
TCCR2=0x00; // Stop Timer0
}
void delay2()
{
TCNT2=0x58;
TCCR2=0B00000001; // Timer Clock = CLK/8
while(!TIFR&0x01); // Wait Until Overflow
TIFR=TIFR|0B00000001; // Clear TOV0
TCCR2=0x00; // Stop Timer0
}
void main()
{
DDRB=0xFF;
PORTB=0x00;
TCCR2=0x00;
TCNT2=0x00;
while(1){
{
PORTB.3=1;
delay1();
PORTB.3=0;
delay1();

}
a=0;
while(b<60000)
{
PORTB.3=1;
delay2();
PORTB.3=0;
delay2();
b++;
}
}
}

اگه ی راهنمایی بکنبن که چه جور میشه هر پالس با فرکانس مشخص رو 3 ثانیه توی خروجی داشت ممنون میشم

3 پاسخ

پاسخ داده شده دسامبر 16, 2016 توسط mahdedamarchilu
سلام

تو Eca یکی از بچه ها کتابخونه تبدیل تمام پایه ها به pwm رو نوشته - در ضمن از delay استفاده نکن و از تایمر استفاده کن و مورد بعد این که فرکانس میکرو رو بزار رو 16 میگ و نه 8 میگ
دارای دیدگاه دسامبر 16, 2016 توسط ناجی
از تایمر چه جوری استفاده کنم؟؟؟؟

#include <mega8.h>
#define xtal 8000000

 

void main()
{
TCCR1A=0x00;
 TCCR1B=0x01;
 TCNT1H=0x0D;
 TCNT1L=0xDE;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;
 while(!(TIFR & 0x04))
 {
  DDRB=0xFF;
PORTB=0x00;
TCNT2=0x00;
OCR2=0x63; //OCR0=99
TCCR2=0B00011010; //toggle OC0 on compare match
 
 };
 TCCR0=0X00;
 TCCR1B=0x00; //timer0 off    
 TIFR|=0x04; //default flag timer1 ==> change to 1
 
 TCCR1A=0x00;
 TCCR1B=0x04;
 TCNT1H=0x0E;
 TCNT1L=0xDE;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;
 while(!(TIFR & 0x04))
 {
  DDRB=0xFF;
PORTB=0x00;
TCNT2=0x00;
OCR2=0x01; //OCR0=99
TCCR2=0B00011010; //toggle OC0 on compare match
 
 };
 TCCR0=0X00;
 TCCR1B=0x00; //timer0 off    
 TIFR|=0x04; //default flag timer1 ==> change to 1
 
 
 
 
}

 

این جوری هم جواب نمیده آخه!!!
پاسخ داده شده دسامبر 16, 2016 توسط ناجی
شما نمیتونین کد این که ی pwm رو 3 ثانیه توی خروجی داشته باشیم رو بنویسین تا من خودم بتونم با اون هر چند تا پالس رو خواستم تعمیم بدم؟؟
دارای دیدگاه دسامبر 16, 2016 توسط mahdedamarchilu
وقتش رو ندارم.
دارای دیدگاه دسامبر 16, 2016 توسط بی نام
نمی تونین ی کاریش بکنبن

دو هفته اس درگیرشم

هر کار می کنم نمیشه

ممنون میشم دست نویسم شده ی چیز بنویسین برام
پاسخ داده شده دسامبر 16, 2016 توسط ناجی
کسی نمیتونه کمکی بکنه
برای پرسش سوال نیازی به عضویت تو سایت نیست.
...