ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





  1. #1
    تاریخ عضویت
    2012/01/30
    19
    1

    درست کار نکردن تایمر ATMEGA32

    با سلام خدمت شما دوستان عزیز
    من میخام ی زمان روشن بودن یک سیگنال رو اندازه گیری کنم
    از تایمر یک در مد CTC استفاده می کنم، بدین صورت زمانی که اینتراپت 0 من که حساس به لبه بالا رونده است تحریک شد، تایمر شروع به شمارش می کند و زمانی که اینتراپت 1 من که حساس به لبه پایین رونده هست تایمر متوقف می شود.
    در زمان های حدود 1.5 تا 7 میلی ثانیه درست کار نمیکنه:(
    برنامم رو میزارم هر کی تونست کمک کمنه ممنون میشم.
    کد:
    
    /*******************************************************
    This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator
    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
    [URL]http://www.hpinfotech.com[/URL]
    
    Project : 
    Version : 
    Date    : 2017-08-11
    Author  : 
    Company : 
    Comments: 
    
    
    Chip type               : ATmega32A
    Program type            : Application
    AVR Core Clock frequency: 16.000000 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 512
    *******************************************************/
    
    [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <mega32a.h>
    [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "stdlib.h"
    [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  "stdio.h"
    
    // Alphanumeric LCD functions
    [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <alcd.h>
    
    // Declare your global variables here
    unsigned long int a=0,b;
    float d,d1,d2;
    unsigned char h[];
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(1<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0xFF;
    OCR1AL=0xFF;
    OCR1BH=0x00;
    OCR1BL=0x00;d=0;
    }
    
    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
    
    d=((float)((TCNT1*.016)+((a)*.0041943)));
            ftoa(d,3,h);
            lcd_clear();
            lcd_puts(h);
    }
    
    // Timer1 output compare A interrupt service routine
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    {
    a++;
    }
    
    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=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
    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: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: CTC top=OCR1A
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 4.1943 s
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: On
    // 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) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);
    //TCNT1H=0x00;
    //TCNT1L=0x00;
    //ICR1H=0x00;
    //ICR1L=0x00;
    //OCR1AH=0xFF;
    //OCR1AL=0xFF;
    //OCR1BH=0x00;
    //OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (1<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
    
    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: On
    // INT1 Mode: Falling Edge
    // INT2: Off
    GICR|=(1<<INT1) | (1<<INT0) | (0<<INT2);
    MCUCR=(1<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
    MCUCSR=(0<<ISC2);
    GIFR=(1<<INTF1) | (1<<INTF0) | (0<<INTF2);
    
    // 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 - PORTA Bit 0
    // RD - PORTA Bit 1
    // EN - PORTA Bit 2
    // D4 - PORTA Bit 4
    // D5 - PORTA Bit 5
    // D6 - PORTA Bit 6
    // D7 - PORTA Bit 7
    // Characters/line: 16
    lcd_init(16);
    
    // Global enable interrupts
    [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=asm"]#asm[/URL] ("sei")
    
    while (1)
          { 
          
    ;
          }
    }
    ویرایش توسط اشکان غفارزاده : 2017/08/11 در ساعت 15:12
    • تبلیغات
      .

  2. #2
    تاریخ عضویت
    2009/10/18
    تبریز
    2,228
    823

    پاسخ : درست کار نکردن تایمر ATMEGA32

    شما تایمرت سرریز میشه باید ی متغیر بزاری ک تعداد سرریز شدن تایمرو بشماره
    تو timer 1 overflo intrupt (یچی تو این مایه ها) ی متغییر بزار ک هر بار ک تایمر سرریز شد یک واحد بهش اضافه شه
    کدایی ک تو تاپیک محاسبه عرض پالس گذاشتمو ی نگاه بنداز

    و ب جای اینکه از دوتا اینتراپت استفاده کنی از یکی استفاده کن و حساسیت لبه رو توش تغییر بده
    عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
    مخترع برتر شمال غرب سال 96
    مدیر سابق منابع تغذیه انجمن ECA

نمایش نتایج: از 1 به 2 از 2

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

  1. درست عمل نکردن رله مدار
    توسط amanc.eng در انجمن میکروکنترلرهای AVR
    پاسخ: 22
    آخرين نوشته: 2022/08/22, 19:27
  2. کار نکردن واحد ADC با تنظیم تریگر توسط تایمر در ATmega32 ؟
    توسط ajapyy در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2015/09/30, 08:55
  3. درست کار نکردن میکرو
    توسط farshad1195 در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2015/05/29, 11:18
  4. درست کار نکردن atmega8
    توسط yoshig2 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2015/02/06, 00:38
  5. درست کار نکردن adc
    توسط aliaghaey در انجمن NXP
    پاسخ: 0
    آخرين نوشته: 2014/10/22, 08:18

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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