اطلاعیه

Collapse
No announcement yet.

ایجاد دو پالس با دیوتی سایکل و فرکانس ورودی متغیر و معکوس همدیگر

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ایجاد دو پالس با دیوتی سایکل و فرکانس ورودی متغیر و معکوس همدیگر

    با سلام خدمت شما دوستان محترم.من دو تا مشکل کوچیک داشتم تو این برنامم که یکی این که چجوری فرکانس ورودیم از 1k-400khz تغییر کنه و دوم این که خروجی دومم مکمل اولی باشه با همون فرکانس ورودی و دیوتی سایکل.اینم برنامه :
    #include <mega16.h>
    #include <delay.h>
    #asm
    .equ __lcd_port=0x1B ;// PORTA
    #endasm
    9
    #include <lcd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #define c1 PINC.4
    #define c2 PINC.5
    #define c3 PINC.6
    #define c4 PINC.7
    flash char row[]={0xfe,0xfd,0xfb,0xf7};
    flash char data_key[]={
    '1','2','3','A& #039;,
    '4','5','6','B& #039;,
    '7','8','9','C& #039;,
    '*','0','#','D& #039;};
    unsigned char ac,table;
    unsigned int r;
    unsigned char DutyCycle1[]="00";
    unsigned char freq1[]="00000";
    unsigned char fn1,dn1,control=1;
    unsigned int DC1,F1,bottom1;
    float helper=0.0;
    //__________________________________________________ ___
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    TCCR0=0x00;
    TCNT0=bottom1;
    TCCR0=0x6B;
    }
    //__________________________________________________ ___
    void keypad(void)
    {
    char lcd_buffer[32];
    lcd_clear();
    _lcd_ready();
    _lcd_write_data(0x0f);
    lcd_gotoxy(2,1);
    lcd_putsf("F1="
    lcd_puts(freq1);
    lcd_putsf("HZ"
    lcd_gotoxy(0,0);
    lcd_putsf("freq1="
    while (1)
    {
    for (r=0;r<4;r++)
    {
    ac=4;
    PORTC=row[r];
    delay_ms(1);
    if (c1==0) ac=0;
    if (c2==0) ac=1;
    if (c3==0) ac=2;
    if (c4==0) ac=3;
    if (!(ac==4)){
    table=data_key[(r*4)+ac];
    //------------------------------------
    if(table>='0' && table<='9&#039
    {
    10
    if(control==1 && fn1<5)
    {
    freq1[fn1++]=table;
    freq1[fn1++]='\0';
    fn1--;
    lcd_putchar(table);
    }
    if(control==2 && dn1<2)
    {
    DutyCycle1[dn1++]=table;
    DutyCycle1[dn1++]='\0';
    dn1--;
    lcd_putchar(table);
    }
    }
    //-----------------------------------
    if(table=='#&#039
    {
    if(++control==3) control=1;
    lcd_clear();
    _lcd_ready();
    _lcd_write_data(0x0f);
    switch(control){
    case 1 :
    lcd_gotoxy(2,1);
    lcd_putsf("F1="
    lcd_puts(freq1);
    lcd_putsf("HZ"
    lcd_gotoxy(0,0);
    lcd_putsf("freq1="
    break;
    case 2 :
    lcd_gotoxy(4,1);
    lcd_putsf("D.C1=%"
    lcd_puts(DutyCycle1);
    lcd_gotoxy(0,0);
    lcd_putsf("DutyCycle1=%"
    break;
    }
    fn1=0;
    dn1=0;
    }
    //-----------------------------------------
    if(table=='*&#039
    {
    F1=atoi(freq1);
    DC1=atoi(DutyCycle1);
    helper=(256.0)-((8000000.0)/(64.0*F1));
    bottom1=helper;
    TCNT0=bottom1;
    helper=((DC1/100.0)*(256.0-bottom1))+bottom1;
    OCR0=helper;
    TCCR0=0x6B;
    goto exit;
    }
    //---------------------------------------
    11
    while (c1==0){}
    while (c2==0){}
    while (c3==0){}
    while (c4==0){}
    delay_ms(50);
    }
    }
    }
    exit:
    PORTC=0xF7;
    control=1;
    fn1=0;
    dn1=0;
    sprintf(lcd_buffer,"F=%uHZ DC=%%%u ",F1,DC1);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts(lcd_buffer);
    }
    //__________________________________________________ _______
    void main(void)
    {
    PORTC=0xF7;
    DDRC=0x0f;
    PORTB.3=0;
    DDRB.3=1; //OC0 output
    TIMSK=0x01;
    lcd_init(16);
    lcd_gotoxy(0,0);
    lcd_putsf("press ~Enter"
    #asm("sei&quot
    while(1)
    {
    if(c4==0)
    { //if Key <Enter> press of Keypad
    delay_ms(100);
    if(c4==0)
    {
    while(c4==0); //for key to be set free
    keypad(); //Call Function Scan Keypad
    }
    }
    };
    }
    با تشکر از شما دوستان :smile:

    #2
    پاسخ : ایجاد دو پالس با دیوتی سایکل و فرکانس ورودی متغیر و معکوس همدیگر

    با توجه به این که این موضوع بارها در انجمن مطرح شده و یا جهت ساماندهی انجمن AVR موضوع قفل میشود

    دیدگاه

    لطفا صبر کنید...
    X