NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4424 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 14 از 14

موضوع: راه اندازی ADC در avrstudio5

  1. #1
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض راه اندازی ADC در avrstudio5

    سلام.من در ای وی ار تازه کار هستم.می خواستم بدونم چه جوری می تونم توی avrstudio5 ADC رو راه بندازم؟آیا کتابخانه وجود داره یا باید خودم بنویسم؟
    می خواهم اطلاعات خوانده شده از LM35 روی ال سی دی نشون بدم.(ال سی دی رو راه انداختم)

    ممنون از پاسخهاتون.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    خودتون تونستين كاري انجام بدين، به نتيجه اي رسيدين؟
    _____________________________________
    _____________________________________

  4. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  5. #3
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    سلام مهندس
    خودتون تونستين كاري انجام بدين، به نتيجه اي رسيدين؟
    سلام مهندس.نه
    می خواستم با کمک دوستان به یک نتیجه ای برسیم.
    ممنون
    ویرایش توسط perspolisa : 17-03-2012 در ساعت 16:55

  6. #4
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    خوب از كدوم ميكرو ميخوايد استفاده كنيد؟ Mega8 يا Mega16 يا Mega32 يا... ؟
    _____________________________________
    _____________________________________

  7. #5
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    خوب از كدوم ميكرو ميخوايد استفاده كنيد؟ mega8 يا mega16 يا mega32 يا... ؟
    مگا32 مهندس

  8. #6
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    کسی نیست ؟یعنی هیچکی با ای وی ار استودیو کار نکرده؟

  9. #7
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    سلام دوست عزیز
    تنها راه اینه که با رجیستر ها خودت برنامه بنویسی
    کاری هم نداره یکم وقت می خواد ولی عوضش فول میشی

  10. تشکرها از این نوشته :


  11. #8
    کاربر فعال pooriya آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    پوریا علیزاده
    نوشته ها
    316
    تشکر
    163
    تشکر شده 676 بار در 217 پست

    پیش فرض

    سلام
    دوست عزیز اینجور پروژه ها دیگه اشبا شده و می تونستین با یه سرچ کوچیک تو اینترنت فله ای پیدا کنین.این یه نمونش که دما رو به صورت فارنهایت و سلسیوس نشون میده.

    [PHP]/*
    * Digital_Thermometer.c
    *
    * Author: AVR Tutorials
    * Website: www.AVR-Tutorials.com
    *
    * Written in AVR Studio 5
    * Compiler: AVR GNU C Compiler (GCC)
    */

    #define F_CPU 4000000UL
    #include <avr/delay.h>
    #include <avr/io.h>
    #include <string.h>
    #include <avr/interrupt.h>

    /*Global Variables Declarations*/

    /*LCD function declarations */
    void LCD_send_command(unsigned char cmnd);
    void LCD_send_data(unsigned char data);
    void LCD_init();
    void LCD_goto(unsigned char y, unsigned char x);
    void LCD_print(char *string);

    /*ADC Conversion Complete Interrupt Service Routine (ISR)*/
    ISR(ADC_vect);

    #define LCD_DATA_PORT PORTB
    #define LCD_DATA_DDR DDRB
    #define LCD_DATA_PIN PINB

    #define LCD_CNTRL_PORT PORTC
    #define LCD_CNTRL_DDR DDRC
    #define LCD_CNTRL_PIN PINC

    #define LCD_RS_PIN 5
    #define LCD_RW_PIN 6
    #define LCD_ENABLE_PIN 7
    #define SET_HOUR 3
    #define SET_MINUTE 4

    int main(void)
    {
    unsigned char i;

    LCD_init();
    LCD_goto(1,2);
    LCD_print("Temperature is");


    LCD_CNTRL_PORT = (1<<SET_HOUR | 1<<SET_MINUTE);

    DDRA = 0x00; // Configure PortA as input

    ADCSRA = 0x8F; // Enable the ADC and its interrupt feature
    // and set the ACD clock pre-scalar to clk/128
    ADMUX = 0xE0; // Select internal 2.56V as Vref, left justify
    // data registers and select ADC0 as input channel

    sei(); // Enable Global Interrupts
    ADCSRA |= 1<<ADSC; // Start Conversion

    while(1);
    }

    /* This function sends a command 'cmnd' to the LCD module*/
    void LCD_send_command(unsigned char cmnd)
    {
    LCD_DATA_PORT = cmnd;
    LCD_CNTRL_PORT &= ~(1<<LCD_RW_PIN);
    LCD_CNTRL_PORT &= ~(1<<LCD_RS_PIN);

    LCD_CNTRL_PORT |= (1<<LCD_ENABLE_PIN);
    _delay_us(2);
    LCD_CNTRL_PORT &= ~(1<<LCD_ENABLE_PIN);
    _delay_us(100);
    }

    /* This function sends the data 'data' to the LCD module*/
    void LCD_send_data(unsigned char data)
    {
    LCD_DATA_PORT = data;
    LCD_CNTRL_PORT &= ~(1<<LCD_RW_PIN);
    LCD_CNTRL_PORT |= (1<<LCD_RS_PIN);

    LCD_CNTRL_PORT |= (1<<LCD_ENABLE_PIN);
    _delay_us(2);
    LCD_CNTRL_PORT &= ~(1<<LCD_ENABLE_PIN);
    _delay_us(100);
    }

    void LCD_init()
    {
    LCD_CNTRL_DDR = 0xFF;
    LCD_CNTRL_PORT = 0x00;
    LCD_DATA_DDR = 0xFF;
    LCD_DATA_PORT = 0x00;

    _delay_ms(10);
    LCD_send_command(0x38);
    LCD_send_command(0x0C);
    LCD_send_command(0x01);
    _delay_ms(10);
    LCD_send_command(0x06);
    }

    /* This function moves the cursor the line y column x on the LCD module*/
    void LCD_goto(unsigned char y, unsigned char x)
    {
    unsigned char firstAddress[] = {0x80,0xC0,0x94,0xD4};

    LCD_send_command(firstAddress[y-1] + x-1);
    _delay_ms(10);
    }

    void LCD_print(char *string)
    {
    unsigned char i=0;

    while(string[i]!=0)
    {
    LCD_send_data(string[i]);
    i++;
    }
    }

    /*ADC Conversion Complete Interrupt Service Routine (ISR)*/
    ISR(ADC_vect)
    {
    char tempC, tempF, display;
    float tempff;

    tempC = ADCH; // Output ADCH to PortD
    tempff = (float)tempC;
    tempff = (tempff*9)/5 + 32;
    tempF = tempff;

    LCD_goto(2,4);
    itoa(tempC/10,display,10);
    LCD_print(display);
    itoa(tempC%10,display,10);
    LCD_print(display);
    LCD_send_data(0xDF);
    LCD_print("C ");
    itoa(tempF/10,display,10);
    LCD_print(display);
    itoa(tempF%10,display,10);
    LCD_print(display);
    LCD_send_data(0xDF);
    LCD_print("F");
    _delay_ms(500);
    ADCSRA |= 1<<ADSC; // Start Conversion
    }[/PHP]

    اینم ادرس سایتش:
    ATMega16 Microcontroller Digital LM35 LCD Thermometer | AVR Tutorials

  12. #9
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط pooriya نمایش پست ها
    سلام
    دوست عزیز اینجور پروژه ها دیگه اشبا شده و می تونستین با یه سرچ کوچیک تو اینترنت فله ای پیدا کنین.این یه نمونش که دما رو به صورت فارنهایت و سلسیوس نشون میده.

    [php]/*
    * digital_thermometer.c
    *
    * author: Avr tutorials
    * website: Www.avr-tutorials.com
    *
    * written in avr studio 5
    * compiler: Avr gnu c compiler (gcc)
    */

    #define f_cpu 4000000ul
    #include <avr/delay.h>
    #include <avr/io.h>
    #include <string.h>
    #include <avr/interrupt.h>

    /*global variables declarations*/

    /*lcd function declarations */
    void lcd_send_command(unsigned char cmnd);
    void lcd_send_data(unsigned char data);
    void lcd_init();
    void lcd_goto(unsigned char y, unsigned char x);
    void lcd_print(char *string);

    /*adc conversion complete interrupt service routine (isr)*/
    isr(adc_vect);

    #define lcd_data_port portb
    #define lcd_data_ddr ddrb
    #define lcd_data_pin pinb

    #define lcd_cntrl_port portc
    #define lcd_cntrl_ddr ddrc
    #define lcd_cntrl_pin pinc

    #define lcd_rs_pin 5
    #define lcd_rw_pin 6
    #define lcd_enable_pin 7
    #define set_hour 3
    #define set_minute 4

    int main(void)
    {
    unsigned char i;

    lcd_init();
    lcd_goto(1,2);
    lcd_print("temperature is");


    lcd_cntrl_port = (1<<set_hour | 1<<set_minute);

    ddra = 0x00; // configure porta as input

    adcsra = 0x8f; // enable the adc and its interrupt feature
    // and set the acd clock pre-scalar to clk/128
    admux = 0xe0; // select internal 2.56v as vref, left justify
    // data registers and select adc0 as input channel

    sei(); // enable global interrupts
    adcsra |= 1<<adsc; // start conversion

    while(1);
    }

    /* this function sends a command 'cmnd' to the lcd module*/
    void lcd_send_command(unsigned char cmnd)
    {
    lcd_data_port = cmnd;
    lcd_cntrl_port &= ~(1<<lcd_rw_pin);
    lcd_cntrl_port &= ~(1<<lcd_rs_pin);

    lcd_cntrl_port |= (1<<lcd_enable_pin);
    _delay_us(2);
    lcd_cntrl_port &= ~(1<<lcd_enable_pin);
    _delay_us(100);
    }

    /* this function sends the data 'data' to the lcd module*/
    void lcd_send_data(unsigned char data)
    {
    lcd_data_port = data;
    lcd_cntrl_port &= ~(1<<lcd_rw_pin);
    lcd_cntrl_port |= (1<<lcd_rs_pin);

    lcd_cntrl_port |= (1<<lcd_enable_pin);
    _delay_us(2);
    lcd_cntrl_port &= ~(1<<lcd_enable_pin);
    _delay_us(100);
    }

    void lcd_init()
    {
    lcd_cntrl_ddr = 0xff;
    lcd_cntrl_port = 0x00;
    lcd_data_ddr = 0xff;
    lcd_data_port = 0x00;

    _delay_ms(10);
    lcd_send_command(0x38);
    lcd_send_command(0x0c);
    lcd_send_command(0x01);
    _delay_ms(10);
    lcd_send_command(0x06);
    }

    /* this function moves the cursor the line y column x on the lcd module*/
    void lcd_goto(unsigned char y, unsigned char x)
    {
    unsigned char firstaddress[] = {0x80,0xc0,0x94,0xd4};

    lcd_send_command(firstaddress[y-1] + x-1);
    _delay_ms(10);
    }

    void lcd_print(char *string)
    {
    unsigned char i=0;

    while(string[i]!=0)
    {
    lcd_send_data(string[i]);
    i++;
    }
    }

    /*adc conversion complete interrupt service routine (isr)*/
    isr(adc_vect)
    {
    char tempc, tempf, display;
    float tempff;

    tempc = adch; // output adch to portd
    tempff = (float)tempc;
    tempff = (tempff*9)/5 + 32;
    tempf = tempff;

    lcd_goto(2,4);
    itoa(tempc/10,display,10);
    lcd_print(display);
    itoa(tempc%10,display,10);
    lcd_print(display);
    lcd_send_data(0xdf);
    lcd_print("c ");
    itoa(tempf/10,display,10);
    lcd_print(display);
    itoa(tempf%10,display,10);
    lcd_print(display);
    lcd_send_data(0xdf);
    lcd_print("f");
    _delay_ms(500);
    adcsra |= 1<<adsc; // start conversion
    }[/php]

    اینم ادرس سایتش:
    atmega16 microcontroller digital lm35 lcd thermometer | avr tutorials
    سلام.ببخشید چون من تازه کارم میشه فقط قسمت adc رو توضیح بدید. در ضمن در ای وی ار استودیو 35 تا ارور داشت.
    ممنون
    ویرایش توسط perspolisa : 18-03-2012 در ساعت 14:51

  13. #10
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    این ها رو داشته باش تا بعد :
    [php]
    adcsra = 0x87; //adc enable select clk/128
    admux = 0xc0; //2.56 vref , adc0 single ended input
    adcsra | =(1<<adsc); //start conversion
    while((adcsra & (1<<adif))==0);
    az adcl bayte payeen ro migiri
    az adch byte bala ro
    tamom [/php]

  14. #11
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    [PHP]#include<avr/io.h>
    void adc_init(void) // Function to initialise the ADC feature
    {
    ADCSRA=0X00; // Clear previous ADC results and status flags
    ADMUX=0X60; // 0x40 for 10 bits
    ADCSRA=0X87; // We have set the ADSC bit to start a conversion, and the
    // ADPS bits are set so that the prescaler is 128
    ACSRA=0X80; // ADEN is set, to enable the ADC
    }




    unsigned char adc_start(unsigned char channel) // Function to perform an ADC conversion, Takes 0-8 as input
    // to select which input to convert
    {
    unsigned char i;
    ADCH=0x00; // Clear the previous result

    i=channel&0x07; // Decide which line to perform ADC conversion on
    ADMUX=i|0x60; // Enter which line to perform in the ADC control register
    ADCSRA|=1<<ADSC;

    while(ADCSRA & (1<<ADSC)); // wait for conv. to complete
    unsigned char temp=ADCH; //unsigned int temp=ADC; for 10 bits
    return temp;
    }

    int main()
    {
    /* ---------------- Sample ADC Call -----------------------*/

    unsigned char result=adc_start(0); // This performs ADC conversion on Pin A0 and stores the result
    // to variable "result"
    }
    [/PHP]دوستان این کد برای راه اندازی ADC چه طوره؟

    ولی دوستان از این خط ارور میگیره:
    کد:
    ACSRA=0X80;
    ویرایش توسط perspolisa : 18-03-2012 در ساعت 15:23

  15. #12
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    به این صورت اصلاح کن
    [PHP] ADCSRA=0x80;[/PHP]

  16. تشکرها از این نوشته :


  17. #13
    عضو جدید
    تاریخ عضویت
    Mar 2012
    نوشته ها
    7
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    ببخشید حالا این درست کار میکنه دیگه.می خواستم این کد رو به صورت کتابخانه در بیارم تا هر وقت بخواهم ازش استفاده کنم.چه جوری باید این کار رو انجام بدم؟

  18. #14
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    خوب این کاری نداره که باید از دستورات پیش پردازنده استفاده کنی : برای مثال :
    XXX هم نام فایل هدر هستش و ... هم توابع و ثابت ها رو می نویسی
    [PHP]#ifndef XXX_H
    #define XXX_H

    .
    .
    .
    .
    .
    .

    #endif[/PHP]

  19. تشکرها از این نوشته :


موضوعات مشابه

  1. ره اندازی smt160 با پورت موازی
    توسط M.ABDOLLAHI در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 27-04-2009, 21:34

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •