اطلاعیه

Collapse
No announcement yet.

فرکانس متر با avr

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

    فرکانس متر با avr

    سلام دوستان
    من برنامه یک فرکانس متر با کانتر 1 نوشتم اما فرکانس هایی رو که نشون میده درست نیست . به نظرم برنامه درست هست چون از برنامه های همین انجمن کمک گرفتم .فکر کنم یه سری از تنظیمات مربوط به کلاک و.. رو اشتباه انجام دادم . میشه راهنمایی کنید چه نکاتی رو باید رعایت کنم با توضیحات لطفا.


    #2
    پاسخ : فرکانس متر با avr

    نوشته اصلی توسط monire63
    سلام دوستان
    من برنامه یک فرکانس متر با کانتر 1 نوشتم اما فرکانس هایی رو که نشون میده درست نیست . به نظرم برنامه درست هست چون از برنامه های همین انجمن کمک گرفتم .فکر کنم یه سری از تنظیمات مربوط به کلاک و.. رو اشتباه انجام دادم . میشه راهنمایی کنید چه نکاتی رو باید رعایت کنم با توضیحات لطفا.
    سلام.
    برای فرکانس متر به 2 تا تایمر نیاز دارین.
    یکی در حالت تایمر که زمان رو اندازه بگیره و یکی در حالت کانتر که پالس ها رو بشمره( رو لبه بالا رونده تنظیم کنید ).
    ساده هم هست.

    تایمر و کانتر همزمان روشن میشن. کانتر پالس ها رو میشمره و تایمر هم داره زمان رو اندازه میگیره.
    وقتی تایمر اورفلو شد. کانتر هم غیر فعال میشه. حالا تعداد پالس ها رو میشمرید و تقسیم بر زمان بر حسب ثانیه میکنید. مییشه فرکانس بر حسب هرتز.

    [glow=green,2,300][b]بشر ممکن الخطاست
    درخت هرچه پربار تر سر به زیر تر[/glow]

    دیدگاه


      #3
      پاسخ : فرکانس متر با avr

      برای اینکه بتونیم بهتر کمکت کنیم بهتره برنامه و شماتیک مدارتون رو بزارین
      خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
      [hr]

      دیدگاه


        #4
        پاسخ : فرکانس متر با avr

        یه سوال؟؟
        وقتی مدارت روشن میشه این پالس دایما بهش متصل هست؟؟
        اگه جواب + هستبگین تا یه راه بهتر با استفاده از یه تایمر اونم با کیفیت خوب بهتون معرفی کنم ....
        تو روشی که دوستمون گفتن وقت میکرو خیلی تو وقفه گرفته میشه ....
        (البته فرمایش دوستمون کاملا درسته ها .... من خواستم یه روش کم دردسر تر و با سرعت بهتر بگم)

        با احترام 6/23
        تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
        علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

        دیدگاه


          #5
          پاسخ : فرکانس متر با avr

          من یکی ساختم تقریبا تا 2 مگ ساپورت میکرد اونم با 1000 تا خاهش و تمنا... :biggrin: با همین روش دوتا کانتر و تایمر...
          میکرو (مگا16 یا 32 یا..)خیلی مناسب نیستن و نباید انتظار زیادی داشته باشی اگه یچیز دقیق تر میخای برو تو خانواده دیگه بگرد مثل pic بالاتر..
          البته این نظر من شاید من اشتباه میکنم میشه!!!!
          من با دانش و آکاهی ام تمام جهالت ها رو به زانو در خواهم اورد.

          دیدگاه


            #6
            پاسخ : فرکانس متر با avr

            PIC هم هم رده avr یا پایینتر است (از لحاظ سرعت)
            بله فرمایش شما هم صحیح هست
            اگر دنبال سرعت میگردیم باید سراغ XMEGA یا بالاتر باشیم ...
            هدف من بهره برداری از MEGA بود ان هم به بهینه ترین راه ممکن

            با احترام 6/23
            تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
            علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

            دیدگاه


              #7
              پاسخ : فرکانس متر با avr

              بنظر من یه سر و گردن بالاتره!!
              باشه اگه هدف استفاده از میکرو باشه شدنیه منم هر کمکی از دستم بر میاد میکنم :read:
              من با دانش و آکاهی ام تمام جهالت ها رو به زانو در خواهم اورد.

              دیدگاه


                #8
                پاسخ : فرکانس متر با avr

                دوست عزیزم آیا از دیوایدر داخلی PIC اطلاع دارید؟
                شما وقتی کریستال 20MHZبهش وصل میکنین ،میکروی شما فقط با 5MHZ کلاک میخورد !!!
                حالا 16MHZسری مگا کجا و 5MHZ PIC کجا ...........
                تازه یکی دو مدل MEGA دیدم که با 20MHZ کار میکرد ...
                جالا یه هر صورت از بحث اصلی منحرف نشیم
                اگر مشکی حل نشده اطلاع دهید تا روش را بگم.
                تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                دیدگاه


                  #9
                  پاسخ : فرکانس متر با avr

                  نوشته اصلی توسط ™AG
                  برای اینکه بتونیم بهتر کمکت کنیم بهتره برنامه و شماتیک مدارتون رو بزارین
                  تایمر 2 رو به عنوان تایمر و 0 رو به عنوان کانتر استفاده کردم.
                  تنظیمات کانتر0:
                  falling
                  تنظیمات تایمر2:
                  clock value=8MH
                  این هم کدی هست که نوشتم :
                  /************************************************** *****
                  This program was created by the
                  CodeWizardAVR V3.12 Advanced
                  Automatic Program Generator
                  © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
                  http://www.hpinfotech.com

                  Project :
                  Version :
                  Date : 9/15/2015
                  Author :
                  Company :
                  Comments:


                  Chip type : ATmega16
                  Program type : Application
                  AVR Core Clock frequency: 8.000000 MHz
                  Memory model : Small
                  External RAM size : 0
                  Data Stack size : 256
                  ************************************************** *****/

                  #include <mega16.h>
                  #include <delay.h>
                  #include <stdlib.h>
                  #include <stdio.h>

                  // Alphanumeric LCD functions
                  #include <alcd.h>

                  // Declare your global variables here

                  unsigned long int timer0_ov;
                  unsigned long int timer2_ov;
                  float freq;
                  char str1[9],str2[15];

                  // Timer 0 overflow interrupt service routine
                  interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                  {
                  // Place your code here
                  timer0_ov++;
                  }

                  // Timer2 overflow interrupt service routine
                  interrupt [TIM2_OVF] void timer2_ovf_isr(void)
                  {
                  // Place your code here
                  timer2_ov++;


                  }


                  void main(void)
                  {
                  // Declare your local variables here


                  // Input/Output Ports initialization
                  // Port A initialization
                  // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
                  DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
                  // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                  PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

                  // Port B initialization
                  // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
                  DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
                  // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                  PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

                  // Port C initialization
                  // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
                  DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
                  // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
                  PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

                  // Port D initialization
                  // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
                  DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
                  // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                  PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

                  // Timer/Counter 0 initialization
                  // Clock source: T0 pin Falling Edge
                  // Mode: Normal top=0xFF
                  // OC0 output: Disconnected
                  TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (1<<CS01) | (0<<CS00);
                  TCNT0=0x00;
                  OCR0=0x00;

                  // Timer/Counter 1 initialization
                  // Clock source: System Clock
                  // Clock value: Timer1 Stopped
                  // Mode: Normal top=0xFFFF
                  // OC1A output: Disconnected
                  // OC1B output: Disconnected
                  // 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=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
                  TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
                  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: 8000.000 kHz
                  // Mode: Normal top=0xFF
                  // OC2 output: Disconnected
                  // Timer Period: 0.032 ms
                  ASSR=0<<AS2;
                  TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (1<<CS20);
                  TCNT2=0x00;
                  OCR2=0x00;

                  // Timer(s)/Counter(s) Interrupt(s) initialization
                  TIMSK=(0<<OCIE2) | (1<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);

                  // External Interrupt(s) initialization
                  // INT0: Off
                  // INT1: Off
                  // INT2: Off
                  MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                  MCUCSR=(0<<ISC2);

                  // USART initialization
                  // USART disabled
                  UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

                  // Analog Comparator initialization
                  // Analog Comparator: Off
                  // The Analog Comparator's positive input is
                  // connected to the AIN0 pin
                  // The Analog Comparator's negative input is
                  // connected to the AIN1 pin
                  ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
                  SFIOR=(0<<ACME);

                  // ADC initialization
                  // ADC disabled
                  ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

                  // SPI initialization
                  // SPI disabled
                  SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

                  // TWI initialization
                  // TWI disabled
                  TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

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

                  // Global enable interrupts
                  #asm("sei&quot

                  while (1)
                  {
                  // Place your code here
                  TCCR0=0X06;
                  TCCR2=0X04;
                  TCNT2=0X06;
                  while(timer2_ov<=500){
                  }
                  freq=((timer0_ov*256)+TCNT0);
                  ftoa(freq,2,str1);
                  sprintf(str2,"f is %s",str1);
                  lcd_clear();
                  lcd_puts(str2);
                  TCNT0=0X00;
                  TCCR0=0X00;
                  timer0_ov=0;
                  delay_ms(1000);
                  }


                  }

                  دیدگاه


                    #10
                    پاسخ : فرکانس متر با avr

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

                    دیدگاه


                      #11
                      پاسخ : فرکانس متر با avr

                      نوشته اصلی توسط afsharizqi
                      سلام
                      من با مگا 32 و استفاده از یک وقفه به عنوان کانتر به همراه تایمر یک فلومتر ساختم که میشه از اون به عنوان فرکانس متر هم استفاده کرد.
                      اگه نیازی هست بفرمایین تا فایل هاش رو پلود کنم
                      اگه میشه لطفا بزارید ممنون میشم
                      و اینکه فلومتر چیه؟؟؟!!!!
                      اشکال برنامه خودمو متوجه نشدین چیه؟؟؟

                      دیدگاه

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