اطلاعیه

Collapse
No announcement yet.

ADC آی سی مگا8 ؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ADC آی سی مگا8 ؟

    با سلام من هرکاری می کنمADC آی سی مگا 8 روشن نمیشه و کار خودشو انجام نمیده یه نمونه برنامه گذاشتم هر تغییری هم که در برنامه ایجاد می کنم باز کار نمیکنه ! برنامه زیر یک برنامه ولتمتر می باشد ........ خواهشا دوستان چک کن ببینیم عیبش از کجاست ؟ ممنون


    #include <mega8.h>
    #include <stdio.h>
    #include <delay.h>

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x12 ;PORTD
    #endasm
    #include <lcd.h>

    #define ADC_VREF_TYPE 0x40

    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    // Declare your global variables here

    void main(void)
    {
    float adc_in;
    float vsen;
    char lcd_buff[10];
    DDRC.0=0;
    PORTC.0=0;


    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC Clock frequency: 15.625 kHz
    // ADC Voltage Reference: Int., cap. on AREF
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;

    // LCD module initialization
    lcd_init(16);

    while (1)
    {
    adc_in=read_adc(0);
    vsen=(adc_in*100)/1023;
    sprintf(lcd_buff,"v=%5.1f v",vsen);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts(lcd_buff);
    delay_ms(100);


    };
    }

    #2
    پاسخ : ADC آی سی مگا8 ؟

    سلام
    پایه های avcc و aref رو به کجا متصل کردی؟
    گفت که دیوانه نهی لایق این خانه نهی

    دیدگاه


      #3
      پاسخ : ADC آی سی مگا8 ؟

      سلام دوست عزیز
      شما در خط
      vsen=(adc_in*100)/1023
      چرا ضربدر 100 کردی؟ باید ضربدر ولتاژ مرجع کنی ، ولتاژ مرجعت رو هم در توضیحات کدویژن نوشته که 2.56 داخلی قرار دادی و باید طبق دیتاشیت خازن رو به پایه Vref وصل کنید ، پس به این صورت اصلاح کنید
      vsen=(adc_in*2.56)/1023
      و همچنین برای دستور Sprintf چون متغیر شما float هست تو صفحه اصلی کدویژن از مسیر
      project >>configure>>C Compiler >>
      پایین صفحه سمت چپ در توضیحات دستور sprintf ، گزینه ای که float داره رو انتخاب کنید
      با این کارا باید درست بشه اما بخاطر فلوت کردن حجم برنامه اتون دوبرابر میشه ، متاسفانه
      میتونید دستور lcd_clear رو بعد از sprintf پاک کنید چون لزومی نداره و به کنترلر السیدی فرمان بیخود میده
      موفق باشی

      دیدگاه

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