اطلاعیه

Collapse
No announcement yet.

خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

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

    #16
    پاسخ : خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

    سلام مجدد
    کدی که من نوشتم
    کد:
    [CENTER][LEFT]Chip type               : ATmega16A
    Program type            : Application
    AVR Core Clock frequency: 8/000000 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 256
    *******************************************************/
    #include <mega16a.h>
    #include <delay.h>
    #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))   /* ????? ?? ???? adc ?? ???? ??? ?????? ?? ???????? adc ?? ?? 7 ?? 16 ??????? ????? ?? */
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | ADC_VREF_TYPE;
    delay_us(10);
    ADCSRA|=(1<<ADSC);
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA|=(1<<ADIF);
    return ADCW;
    }
     
    void main(void)
    {
     float i , volt ; 
     
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
    //DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
     
    ADMUX=ADC_VREF_TYPE;              /* ?? ?? ???? ?? ??????? ?? ?? ???? ???????? ????? ?? ???? adc ?? ?? 28 ?? 30 ????????? ????? ?? */
    ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
    SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
    
    
     
    while (1)
          {
          i=read_adc(0);                // i ?????? ???? ??? 0 ?? 1023 ?? ???? ????? ????? ????? ?????? ??? ?? ??? ????? ??? ? ????? ?? ?? ????? //
          volt=(i*5)/1023 ;             // ????? ????? ??? ?????? ??? ??? 0 ?? 1023 ?? ?? ???? ? 0 ?? 5 ????? ?? ??? //       
          if (volt<0.9){
           PORTC.0=1 ;
          }
         }[/LEFT]
    
    [FONT=Yekan]}[/FONT][/CENTER][FONT=Yekan][/FONT]

    [حالا نمیدونم درست دراومده یا نه ولی موقع کامپایل بهم ارور میدخ که نتونسته فایلی رو ار atmel باز کنه
    ممنون



    جدیدترین ویرایش توسط javadsob; ۲۰:۲۰ ۱۳۹۹/۰۴/۰۵.

    دیدگاه


      #17
      پاسخ : خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

      نوشته اصلی توسط javadsob نمایش پست ها
      سلام مجدد
      کدی که من نوشتم
      کد:
      [CENTER][LEFT]Chip type               : ATmega16A
      Program type            : Application
      AVR Core Clock frequency: 8/000000 MHz
      Memory model            : Small
      External RAM size       : 0
      Data Stack size         : 256
      *******************************************************/
      #include <mega16a.h>
      #include <delay.h>
      #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))   /* ????? ?? ???? adc ?? ???? ??? ?????? ?? ???????? adc ?? ?? 7 ?? 16 ??????? ????? ?? */
      unsigned int read_adc(unsigned char adc_input)
      {
      ADMUX=adc_input | ADC_VREF_TYPE;
      delay_us(10);
      ADCSRA|=(1<<ADSC);
      while ((ADCSRA & (1<<ADIF))==0);
      ADCSRA|=(1<<ADIF);
      return ADCW;
      }
       
      void main(void)
      {
       float i , volt ; 
       
      DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
      PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
      //DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
      PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
       
      ADMUX=ADC_VREF_TYPE;              /* ?? ?? ???? ?? ??????? ?? ?? ???? ???????? ????? ?? ???? adc ?? ?? 28 ?? 30 ????????? ????? ?? */
      ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
      SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
      
      
       
      while (1)
            {
            i=read_adc(0);                // i ?????? ???? ??? 0 ?? 1023 ?? ???? ????? ????? ????? ?????? ??? ?? ??? ????? ??? ? ????? ?? ?? ????? //
            volt=(i*5)/1023 ;             // ????? ????? ??? ?????? ??? ??? 0 ?? 1023 ?? ?? ???? ? 0 ?? 5 ????? ?? ??? //       
            if (volt<0.9){
             PORTC.0=1 ;
            }
           }[/LEFT]
      
      [FONT=Yekan]}[/FONT][/CENTER]
      [حالا نمیدونم درست دراومده یا نه ولی موقع کامپایل بهم ارور میدخ که نتونسته فایلی رو ار atmel باز کنه
      ممنون



      متن ارور چیه؟

      دیدگاه


        #18
        پاسخ : خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

        سلام اگه ا زورژن های جدید codevision استفاده میکنی بجای دستور
        #include <mega16a.h>
        بنویس
        #include <io.h>
        توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
        همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
        https://www.youtube.com/@aKaReZa75​

        دیدگاه


          #19
          پاسخ : خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

          نوشته اصلی توسط akaReza نمایش پست ها
          سلام اگه ا زورژن های جدید codevision استفاده میکنی بجای دستور
          #include <mega16a.h>
          بنویس
          #include <io.h>
          این کدویژن واقعا چیز کثیفیه!
          به نظر من اصلا سمتش نرید. عطای کتابخونه ها و ویزاردشو به لقاش ببخشید و برید سمت اتمل استدیو که با GCC کار میکنه. کدویژن هم هزارجور ایراد و داستان داره، هم هر روز یک سری تغییرات مسخره میده.

          دیدگاه


            #20
            پاسخ : خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

            من خودم به شخصه برای همین کدویژن استفاده میکنم، چون واقعا کارهارو سرعت میبخشه و خطا رو کم میکنه.
            اما دوستمون انگاری کد رو از یه ورژن قدیمی تو ورژن جدید کپی کرده که اینطوری شده.
            توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
            همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
            https://www.youtube.com/@aKaReZa75​

            دیدگاه


              #21
              پاسخ : خواندن سطح ولتاژ با مبدل آنالوگ به دیجیتال میکرو

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

              دیدگاه

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