Thông báo

Collapse
No announcement yet.

Lập trình đếm xung động cơ Encoder bằng Codevision AVR

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lập trình đếm xung động cơ Encoder bằng Codevision AVR

    Xin chào tất cả mọi người,
    Em là sinh viên khoa ô tô đang làm đồ án về đo quãng đường đi để nhắc nhở thay dầu. Yêu cầu của đồ án là sử dụng Proteus và Codevision AVR, trong đó phải có màn hình LCD 16x2 và ATmega16
    Hiện tại em đang dùng động cơ Encorder để mô phỏng việc đếm xung thay cho đếm số vòng quay bánh xe. Và em cũng đã tham khảo được từ trên mạng một bộ mạch và code của 2 phần mềm trên về đo tốc độ động cơ.
    Nhưng bây giờ em đang gặp khó khăn là code em tham khảo là đang đo tốc độ động cơ và hiển thị nó lên LCD. Em rất cần sự trợ giúp từ mọi người giúp em sửa code thành đếm số xung hiển thị lên LCD và đến một số xung nào đó (ví dụ: 5000 xung) thì nó sẽ thông báo "Oil change" lên màn hình LCD.
    Em sẽ gửi link file phía dưới ạ

    Cám ơn mọi người đã đọc và mong mọi người giúp đỡ e!!!

    CODE:

    #include <mega16.h>

    // Alphanumeric LCD functions
    #asm
    .equ __lcd_port=0x15 ;PORTC
    #endasm
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>

    //
    unsigned int num=0; // Bien dem so xung vao chan INT0
    float VT;
    //
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
    num++;

    }


    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here

    }

    // Hien thi
    void HIEN_THI()
    {
    unsigned char a,b,c,d,e,f,g;
    a=VT/1000;
    // lay fan tram
    b=(VT-1000*a)/100;
    // lay fan chuc
    c=(VT-1000*a-100*b)/10;
    //
    d=VT-1000*a-100*b-10*c ;
    //
    e=(VT-1000*a-100*b-10*c-d)*10;
    f=(VT-1000*a-100*b-10*c-d)*100-e*10;
    g=(VT-1000*a-100*b-10*c-d)*1000-e*100-f*10;
    // lay hang don vi
    lcd_gotoxy(0,1);
    // ve vi tri x,y
    lcd_putchar(a+48);
    // day ra hang tram, ma ascii
    lcd_gotoxy(1,1);
    lcd_putchar(b+48);
    // day ra hang chuc, ma ascii
    lcd_gotoxy(2,1);
    lcd_putchar(c+48);
    // d
    lcd_gotoxy(3,1);
    lcd_putchar(d+48);
    // sau dau thap phan
    lcd_gotoxy(5,1);
    lcd_putchar(e+48);
    // sau so thap phan
    lcd_gotoxy(6,1);
    lcd_putchar(f+48);
    // so sau dau thap phan
    lcd_gotoxy(7,1);
    lcd_putchar(g+48);
    //num=0;
    // day ra hang don vi, ma ascii
    }


    // Declare your global variable
    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
    PIND=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=0x04;
    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: On
    // INT0 Mode: Low level
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x03;
    MCUCSR=0x00;
    GIFR=0x40;

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

    // 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 disabled
    ADCSRA=0x00;

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

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

    // 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")

    while (1)
    {
    // Place your code here
    // Place your code here
    if(TCNT1==31250) // Timer1 dem 1s ICNT1 0->31250, voi CLK/256 (TCCR1B=0x04
    {
    VT=num/24.0;
    lcd_gotoxy(0,0);// Dua con tro ve goc, cot 0, dong 0
    lcd_putsf("TOC DONG CO: ");// Hien thi dong chu1
    HIEN_THI(); // Hien thi gia tri toc do dong co
    lcd_gotoxy(4,1);
    lcd_putsf(".");
    lcd_gotoxy(10,1);// Dua con tro ve goc, cot 0, dong 0
    lcd_putsf("(V/s)");// Hien thi dong chu
    TCNT1=0;
    num=0;
    }
    }
    }

Về tác giả

Collapse

khiem4c Tìm hiểu thêm về khiem4c

Bài viết mới nhất

Collapse

Đang tải...
X