اطلاعیه

Collapse
No announcement yet.

خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

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

    خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

    سلام دوستان
    خسته نباشید .
    من یه تازه واردم و میخواستم یه مدار رو طراحی (تو پروتیوس بعدش که نتیجه گرفتم روی سخت افزار های مورد نیازش)و برنامه نویسی کنم(تو کدوِِیژن....البته دوست دارم توی avr studio رو هم یادبگیرم و ممنون میشم برای این avr استودیو یه مرجع فارسی خوب معرفی کنید)
    دستگاه مورد نظر(مداری)که میخوام طراحی کنم و درتش کنم برای شروع اینه وقتی مقدار مقاومت متغییر رو تغییر میدیم اونو روی lcdچاپ کنه ....
    نمیدونم دقیقا مدارش رو چطوری باید طراحی کنم یعنی چیو باید کجا وصل کنم(البته برای lcdرو میدونم ..اما برای مقاومت متغییر رو نمیدونم).....یعنی منظورم اینه که از چه قطعاتی باید برای این مدار استفاده کنم یا چه کار کنم و چطوری چی رو به کجا وصل کنم؟(pot-lin,atmega16,lm032l)...
    مشکل بعدی من هم اینه که نمیدونم چطوری باید از روی مقاومت متغییر مقدارش رو توی کد وِِیژن بخونم(یعنی چون نمیدونم مدارش رو چطور باید طراحی کنم نمیدونم چطوری کدوم پین و ... رو باید بخونم).

    لطفا راهنمایی کنید
    (یه عکسی از یه مدار که قبلا طراحی شده بود دیدم که در زیر پلود کردم...میخوام بدونم اون دوتا آمپر متر و ولتمتر(اگه غلط نگفته باشم)رو برای وصل کرد و چرا اونوطری وصل کرد مخصوصا اون bat1چیه..در ضمن چرا پایه 3وم مقاومت رو به همه پین ها نصب کرد....
    در کل ممنون میشم یه طراحی توی پروتئوس از این مداری که من قصد دارم رو انجام بدم بهم بگین چکار باید بکنم....ممنون میشم)

    #2
    پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

    سلام
    شما باید از adc avr استفاده کنی نمیدونم چرا شما
    همه ی پورت A رو به هم وصل کردی ولی برای خوندن
    نیاز به یه pin هستش در ضمن نگفتین با چه زبونی بیسکام یا code vision
    دنیا آنقدر وسیع است که برای همه مخلوقات جا هست. به جای آن که جای کسی را بگیرید، تلاش کنید جای واقعی خودتان را بیابید.

    دیدگاه


      #3
      پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

      سلام
      با توجه به نام میکروت ابتدا یک پین از پورتی که ADCداره رو ورودی تعریف میکنی و ولتاز متغییر یعنی انالوگ رو به مبدل میدی ودر خروجی اون مقدار دیجیتال رو بوسیله ی میکرو میخونی و روی LCD نمایش میدی

      دیدگاه


        #4
        پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

        من اون رو طراحی نکرده بودم ..یه جا تونت پیدا کرده بودم و عکسشو اینجا هم گذاشتم ...
        با زبون سی و کامپایلر کدوِیژن کارمیکنم(البته تازه واردم )
        (البته دوس دارم با avr atmel studioکارکنم ولی هیچی از اون بلد نیستم )
        میشه بگین مدارشو چطوری باید طراحی کنم برای خوندن از مقاومت متغییر (چون برای نوشتن رو ال سی دی رو تقریبا طراحی و کد نویسیشو بلدم اما واسه خوندن مقدار مقاومت متغییر دقیقا نمیدونم چیکار باید بکنم(توی پروتئوس )و با چه دستوری توی کد ویژن بخونم مقدار) ؟(راجع به adc یه توضیح مختصر امکانش هست بدین؟)

        دیدگاه


          #5
          پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

          این برنامه ببخشید نتونستم شماتیک بزارم از رو برنامه مشخصه

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

          // Alphanumeric LCD Module functions
          #include <alcd.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
          int a;
          char buf[16];
          void main(void)
          {
          // Declare your local variables here

          // Input/Output Ports initialization
          // Port A initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTA=0x00;
          DDRA=0x00;

          // Port B initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTB=0x00;
          DDRB=0x00;

          // Port C initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTC=0x00;
          DDRC=0x00;

          // Port D initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTD=0x00;
          DDRD=0x00;

          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          // Mode: Normal top=0xFF
          // OC0 output: Disconnected
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;

          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;

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

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

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

          // USART initialization
          // USART disabled
          UCSRB=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: 125.000 kHz
          // ADC Voltage Reference: AVCC pin
          ADMUX=ADC_VREF_TYPE & 0xff;
          ADCSRA=0x86;

          // SPI initialization
          // SPI disabled
          SPCR=0x00;

          // TWI initialization
          // TWI disabled
          TWCR=0x00;

          // Alphanumeric LCD initialization
          // Connections specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 2
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);

          while (1)
          {
          lcd_clear();
          a=read_adc(0);
          sprintf(buf,"read_adc:%u",a);
          lcd_puts(buf);
          delay_ms(100);
          }
          }
          دنیا آنقدر وسیع است که برای همه مخلوقات جا هست. به جای آن که جای کسی را بگیرید، تلاش کنید جای واقعی خودتان را بیابید.

          دیدگاه


            #6
            پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

            اول دو سر پوت ر به یه ولتاژ مناسب وصل کن (مثلا" 5 ولت) بعد سر متغییر پوت ر (سر فلش دار) به یکی از پایه های (ADC0...ADC7) وصل کن بعدش برو از کد ویزارد نرم افزار کد ویژن ADC ر به صورت 10 بیتی با ولتاژ مرجع AVCC و بدون وقفه فعال کن و با دستور read_adc عدد مربوطه که بین 0 تا 1023 هست رو بخون اگه می خوای اون عدد ر به ولتاژ تبدیل کنی باید اونو به 1023 تقسیم و بر 5 ضرب کنی.

            دیدگاه


              #7
              پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

              نیلو خانوم و آقا الکترو و آقا مسعود از راهنمایی همتون ممنون ...من مطابق راهنمایی شما آقا مسعود و کد آقا الکترو پیش رفتم اما هنوز یه سری مشکل دارم...که در عکس ها مشخص هست...و سوالام اینه که آقا مسعود تو بخش adc 10 بیتی نبود ..منظورتونو خوب درک نکردم ...و و علاوه بر اون ببینید که این مداری که رسم کردم درست هست؟...این تنظیمات بخش های دیگه هم میخواستم ببینم که صحیح هستن یا نه...
              آقا الکترو میشه توضیح راجع به این تیکه کد بدین آخنه من متوجه نشدم که اینا چی هستن دقیقا...
              پیشاپیش متشکرم از همه تون






              دیدگاه


                #8
                پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                تا اینجا ر خوب پیش رفتی :applause: :applause: :applause: :applause: :applause: :applause:
                و اما جواب سوالات شما :
                ADC میکرو AVR ذاتا" 10 بیتی هستش. منظورم این بود که Use 8 Bit ر تیک نزنی.
                مدارتون هم یک ایراد بزرگ داره اینه که پایین POT ر به GND باید وصل کنی شما دو طرفش هم که به VCC وصل کردی. (یه طرف VCC یه طرفGND ) ضمنا" در عمل باید مقاومت بالاکش بین پایه ریست و VCC و نیز خازن 100nF بین AREF و GND قرار بدی که فعلا" مهم نیست
                در کد ویزارد تنظیمات مربوط به PORT ر هم انجام بدید به این صورت که پورتی که به LCD وصله ر OUT/0 و پورتی که از اون POT ر می خونید IN/T و بهتره پورت های بلا استفاده ر هم IN/P تنظیم کنید.
                حالا گزینه Generate Save and Exit ر بزنید و برنامتون ر بنویسید

                دیدگاه


                  #9
                  پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                  من این کارایی که شما گفتین رو انجام دادم اما بازم درست عمل نمیکنه یعنی اینکه همونطور ثابت میمونه...
                  چیکار باید کنم تا درست کار کنه؟

                  دیدگاه


                    #10
                    پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                    برنامه ر بنداز ببینم چی نوشتی

                    دیدگاه


                      #11
                      پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                      http://upload.ustmb.ir/do.php?filename=27_12read-potansiometr.zip
                      برنامه main2توسط ویزارد با اون تغییرات جدیدی که شما گفته بودی انجام شده...

                      دیدگاه


                        #12
                        پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                        تو نقشه پایه AVCC ر به VCC وصل کن.

                        تو برنامه MAIN.C هم این تغییرات ر بده:

                        // Declare your global variables here
                        unsigned int a;
                        float v;


                        while (1)
                        {
                        lcd_clear();
                        a=read_adc(0);
                        v=a*0.00488;
                        sprintf(buf,"read_adc:%1.1f",v);
                        lcd_puts(buf);
                        delay_ms(100);
                        }
                        }

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

                        دیدگاه


                          #13
                          پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                          دادش نمیشه این پروژه رو مشکلشو برطرف کنی بزاری بعد توضیح بدی که چی شد و چی کار کردی و مشکلش چی بود...آخه من این کاری که گفتی avccرو هم به وی سی سی وصل کردم (اما نمیدونم چجوری اون اسپرینت اف رو فلوت تنظیم کنم)در ضمن من گمون نمیکنم توی کد با اضافه کردن اون vو اون ضرب اتفاق خاصی بخواد بیوفته یعنی توی خوندنه دیتا تغییراتی ایجاد بشه ...ممنون میشم بیشتر توضیح بدی

                          دیدگاه


                            #14
                            پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                            من اون تغییرات ر رو برنامه خودت انجام دادم نتیجه گرفتم. تو هم حرف گوش کن انجام بده. :angry:
                            بعد برو تو منوی پروجکت/ گزینه کانفیقور/ بخش سی کامپایلر/ اسپرینت اف ر از نوع فلوت ویدث پرسیژن انتخاب کن.
                            دلیل ایجاد اون متغیر هم اینه که شما عددی که از ورودی می خونی در ابتدا صحیح هستش ولی وقتی ضربدر 5 و تقسیم بر 1023 یا همون 0.00488 می کنی میشه اعشاری و باید داخل متغییر اعشاری ذخیره بشه و موقع نمایش عدد اعشاری باید از f% توی تابع اسپرینت اف استفاده کنی و نیز تابع اسپرینت اف ر همونطور که گفتم تنظیم کنی.

                            دیدگاه


                              #15
                              پاسخ : خواندن مقدار مقاومت متغییر (پتانسیومتر)در avr با کد ویژن

                              داشی دمت گرم درست :
                              میشه بگی چرا پایه avcc رو به وی سی سی وصل باید میکردم(اصلا avcc به چه درد میخوره؟)
                              و اینکه یکی از بچه های رباتیک که قبلا میشناختم بهم میگفت که باید از همه ی پایه های adc استفاده کنی نه یکیش میشه بگی چه فرقی بین این روش و اون روش داره؟...
                              آها مهمتر اینکه میخوام این مدار رو به صورت فیزیکی روی سخت افزار هاش به صورت واقعی انجام بدم.میشه بگی چهقطعات و وسایلی نیاز دارم ؟

                              دیدگاه

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