اطلاعیه

Collapse
No announcement yet.

اشکال در راه اندازی touch با avr

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

    اشکال در راه اندازی touch با avr

    سلام خسته نباشید.
    من یک touch چهار سیمه را با adc میکرو atmega8 راه اندازی کردم و هنگامی که مدار را تست می کنم روی lcd برای xوy مقادیر ثابتی مشاهده نمی کنم و دائما اعداد روی lcd با اختلاف زیاد تغییر می کنند. مشکل کار کجاست؟
    تشکر.

    #2
    پاسخ : اشکال در راه اندازی touch با avr

    سلام


    من قبلا یک تابع نوشتم ، این درست جواب میداد!

    کد:
    void get_xy()
    {
     int a,b,x,y;
     x_cur=-1;
     y_cur=-1;
     start: 
     
      
    PORTA=0x01;
    DDRA=0x05;
    PORTA.3=0;
    x=read_adc(1);
    
    
    PORTA=0x02;
    DDRA=0x0A;
    PORTA.0=0;
    y=read_adc(2);
    
    
       if (x>100 | y>100)
        {
         a=x-160;
         a=a/8.3;
         b=y-90;
         b=b/5.7;
         if (a<0 | b<0) goto start;
         x_cur=a;
         y_cur=b;   
        }
    }
    متغییر های x_cur,y_cur به صورت عمومی تعریف شدند و مقدار x,y در اونها قرار میگیره

    البته این بگم که هر 4 پایه رو با مقاومت 10 کیلو پول پ کرده بودم (البته دقیق یادم نیست که پول پ بود یا دون :redface

    موفق باشید

    دیدگاه


      #3
      پاسخ : اشکال در راه اندازی touch با avr

      نوشته اصلی توسط alirezatkh2
      سلام خسته نباشید.
      من یک touch چهار سیمه را با adc میکرو atmega8 راه اندازی کردم و هنگامی که مدار را تست می کنم روی lcd برای xوy مقادیر ثابتی مشاهده نمی کنم و دائما اعداد روی lcd با اختلاف زیاد تغییر می کنند. مشکل کار کجاست؟
      تشکر.
      باید پایه B,C رو پول دان کنید با مقاومت 10 کیلو.ضمنا از مدار نویز گیر برای A/D میکرو استفاده کنید. مهمتر از همه اینکه سرعت نمونه گیری رو کم کنید.یه چیز دیگم اینکه X رو تقسیم بر 4 و Y و تقسیم بر 8 کنی عداد معنی دار تر میشه.موفق باشی
      دکتر شريعتي : «کلاس پنجم که بودم پسر درشت هيکلي در ته کلاس ما مي نشست که براي من مظهر تمام چيزهاي چندش آور بود ،آن هم به سه دليل ؛ اول آنکه کچل بود، دوم اينکه سيگار مي کشيد و سوم - که از همه تهوع آور بود- اينکه در آن سن و سال، زن داشت. !... چند سالي گذشت يک روز که با همسرم از خيابان مي گذشتيم ،آن پسر قوي هيکل ته کلاس را ديدم در حاليکه خودم زن داشتم ،سيگار مي کشيدم و کچل شده بودم

      دیدگاه


        #4
        پاسخ : اشکال در راه اندازی touch با avr

        نوشته اصلی توسط SEPN
        باید پایه B,C رو پول دان کنید با مقاومت 10 کیلو.ضمنا از مدار نویز گیر برای A/D میکرو استفاده کنید. مهمتر از همه اینکه سرعت نمونه گیری رو کم کنید.یه چیز دیگم اینکه X رو تقسیم بر 4 و Y و تقسیم بر 8 کنی عداد معنی دار تر میشه.موفق باشی
        منظورت از مدار نویز گیر چیه ؟ لطفا بیشتر توضیح بده.
        منظورت از پول دان اینه که با مقاومت 10 کیلو به گراند وصل کنم؟
        تشکر.

        دیدگاه


          #5
          پاسخ : اشکال در راه اندازی touch با avr

          نوشته اصلی توسط alirezatkh2
          منظورت از مدار نویز گیر چیه ؟ لطفا بیشتر توضیح بده.
          تشکر.
          یک خازن 104 بزارید بین پایه های AVCC,GND و پایه ی AVCC رو با یک سلف 10uH به VCC وصل کنید

          دیدگاه


            #6
            پاسخ : اشکال در راه اندازی touch با avr

            نوشته اصلی توسط alirezatkh2
            منظورت از مدار نویز گیر چیه ؟ لطفا بیشتر توضیح بده.
            تشکر.
            سلام
            یک سلف 1 هانری برای پایه refrence بزار و اگر می خواهید نمونه گیری بدون نویز باشد از مد sleep استفاده کنید.
            موفق باشید

            دیدگاه


              #7
              پاسخ : اشکال در راه اندازی touch با avr

              نوشته اصلی توسط مهدی مهری
              یک خازن 104 بزارید بین پایه های AVCC,GND و پایه ی AVCC رو با یک سلف 10uH به VCC وصل کنید
              منظورت پایه های AVCC,GND برای میکرو است یاADC .
              تشکر.

              دیدگاه


                #8
                پاسخ : اشکال در راه اندازی touch با avr

                نوشته اصلی توسط alirezatkh2
                منظورت پایه های AVCC,GND برای میکرو است یاADC .
                تشکر.
                پایه های میکرو که مربوط به ADC می شوند

                دیدگاه


                  #9
                  پاسخ : اشکال در راه اندازی touch با avr

                  من وقتی پایه های B یا C را پول اپ می کنم روی LCD اعداد 1022 یا 1023 یا 1024 نمایش داده می شود و
                  وقتی پول دان می کنم اعداد تک رقمی نمایش داده می شود یعنی نه می توانم پول اپ کنم نه پول دان .
                  افرادی که می گویند پول اپ کن یا پول دان چگونه این کار را انجام دهم وقتی این مشکل وجود دارد ؟
                  مشکل کار کجاست ؟ آیا LCD خراب است یا مشکل جای دیگری است؟ لطفا مرا راهنمایی کنید.
                  تشکر.

                  دیدگاه


                    #10
                    پاسخ : اشکال در راه اندازی touch با avr

                    با چه مقاومتی مگه pull down میکنید که اینقدر تغییر میکنه؟
                    با 47 کیلو یا 100 کیلو پایه های B وC رو pull down کن باید جواب بده. :agree:
                    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                    دیدگاه


                      #11
                      پاسخ : اشکال در راه اندازی touch با avr

                      پایه های Touch را به شکل زیر وصل کرده ام.
                      [
                      من مدارم را به شکل زیر بستم.

                      ولتاژ مرجع من در Code Vision گزینه ی AVCC است.
                      و برنامه من به صورت زیر است.
                      کد:
                      /*****************************************************
                      This program was produced by the
                      CodeWizardAVR V2.04.4a Advanced
                      Automatic Program Generator
                      © Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
                      http://www.hpinfotech.com
                      
                      Project : 
                      Version : 
                      Date  : 9/12/2010
                      Author : NeVaDa
                      Company : atak
                      Comments: 
                      
                      
                      Chip type        : ATmega8
                      Program type      : Application
                      AVR Core Clock frequency: 1.000000 MHz
                      Memory model      : Small
                      External RAM size    : 0
                      Data Stack size     : 256
                      *****************************************************/
                      
                      #include <mega8.h>
                      
                      #include <delay.h>
                      #include <stdlib.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;
                      }
                      
                      int x_cur, y_cur;
                      char *strx, *stry, *stradc1, *stradc2;
                      
                      void get_xy()
                      {
                        int a,b,x,y;
                        x_cur=-1;
                        y_cur=-1;
                        start:
                        PORTC=0x04;
                        DDRC=0x05;
                        PORTC.3=0;
                        x=read_adc(1);
                        lcd_clear();
                        lcd_gotoxy(10,0);
                        itoa(x,stradc1);
                        lcd_puts(stradc1);
                        PORTC=0x02;
                        DDRC=0x0a;
                        PORTC.0=0;
                        y=read_adc(2);
                        lcd_gotoxy(10,1);
                        itoa(x,stradc2);
                        lcd_puts(stradc2);
                        if (x>100 | y>100)    
                        {
                          a=x-160;  
                          a=a/8.3;     
                          b=y-90;     
                          b=b/5.7;     
                          if (a<0 | b<0) goto start;
                          x_cur=a;     
                          y_cur=b;
                        }
                      }
                      // Declare your global variables here
                      
                      void main(void)
                      {
                      // Declare your local variables here
                      
                      // Input/Output Ports initialization
                      // 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
                      // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // 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
                      TCCR0=0x00;
                      TCNT0=0x00;
                      
                      // Timer/Counter 1 initialization
                      // Clock source: System Clock
                      // Clock value: Timer1 Stopped
                      // Mode: Normal top=FFFFh
                      // 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=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: 62.500 kHz
                      // ADC Voltage Reference: AVCC pin
                      ADMUX=ADC_VREF_TYPE & 0xff;
                      ADCSRA=0x84;
                      
                      // LCD module initialization
                      lcd_init(20);
                      
                      while (1)
                         {
                         // Place your code here
                           get_xy();
                           lcd_gotoxy(0,0);
                           itoa(x_cur,strx);
                           lcd_puts(strx);
                           lcd_gotoxy(0,1);
                           itoa(y_cur,stry);
                           lcd_puts(stry);
                           delay_ms(300);
                         };
                      }
                      حا
                      ل اگر کسی مشکلی در کار من می بیند تذکر دهد چون یه جای کار من مشکل دارد و دائماا عداد روی LCD تغییر می کنند
                      لطفا مرا راهنمایی کنید
                      تشکر

                      دیدگاه


                        #12
                        پاسخ : اشکال در راه اندازی touch با avr

                        پایه ref باید با خازن به vcc وصل بشه.شما زمینش کردی.یه لینک از شماتیک و برنامه می زارم برات شاید بدردت بخوره
                        http://www.4shared.com/photo/oY5llWv9/Scan10001.html
                        دکتر شريعتي : «کلاس پنجم که بودم پسر درشت هيکلي در ته کلاس ما مي نشست که براي من مظهر تمام چيزهاي چندش آور بود ،آن هم به سه دليل ؛ اول آنکه کچل بود، دوم اينکه سيگار مي کشيد و سوم - که از همه تهوع آور بود- اينکه در آن سن و سال، زن داشت. !... چند سالي گذشت يک روز که با همسرم از خيابان مي گذشتيم ،آن پسر قوي هيکل ته کلاس را ديدم در حاليکه خودم زن داشتم ،سيگار مي کشيدم و کچل شده بودم

                        دیدگاه


                          #13
                          پاسخ : اشکال در راه اندازی touch با avr

                          نوشته اصلی توسط SEPN
                          پایه ref باید با خازن به vcc وصل بشه.شما زمینش کردی.یه لینک از شماتیک و برنامه می زارم برات شاید بدردت بخوره
                          http://www.4shared.com/photo/oY5llWv9/Scan10001.html
                          بخاطر عکس خیلی ممنونم ولی من پایه Ref را هم باخازن به VCC وصل کردم ولی تغییر محسوسی نکرد و کدی که شما فرستادی به زبان Basic است ولی من با C کار می کنم و کد شما به من کمکی نمی تواند بکند.
                          لطفا کد با زبان C بگذارید.
                          تشکر.

                          دیدگاه


                            #14
                            پاسخ : اشکال در راه اندازی touch با avr

                            نوشته اصلی توسط مهدی مهری
                            سلام


                            من قبلا یک تابع نوشتم ، این درست جواب میداد!

                            کد:
                            void get_xy()
                            {
                             int a,b,x,y;
                             x_cur=-1;
                             y_cur=-1;
                             start: 
                             
                              
                            PORTA=0x01;
                            DDRA=0x05;
                            PORTA.3=0;
                            x=read_adc(1);
                            
                            
                            PORTA=0x02;
                            DDRA=0x0A;
                            PORTA.0=0;
                            y=read_adc(2);
                            
                            
                               if (x>100 | y>100)
                                {
                                 a=x-160;
                                 a=a/8.3;
                                 b=y-90;
                                 b=b/5.7;
                                 if (a<0 | b<0) goto start;
                                 x_cur=a;
                                 y_cur=b;   
                                }
                            }
                            متغییر های x_cur,y_cur به صورت عمومی تعریف شدند و مقدار x,y در اونها قرار میگیره

                            البته این بگم که هر 4 پایه رو با مقاومت 10 کیلو پول پ کرده بودم (البته دقیق یادم نیست که پول پ بود یا دون :redface

                            موفق باشید
                            کد شما را هم اجرا کردم ولی جواب نداد و در ضمن باید فقط پایه های B و C را با 10 کیلو پول دان کنید.

                            تشکر.

                            دیدگاه


                              #15
                              پاسخ : اشکال در راه اندازی touch با avr

                              لطفا ناامید نشوید و به من کمک کنید.
                              اگه کسی از بچه های تهران واقعا یک Touch راه اندازی کرده در صورت تمایل یک آدرس به ایمیل من ارسال کند تا من حضوری مشکل را با او در میان بگذارم.
                              تشکر.

                              دیدگاه

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