1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

VĐK GIỮA KỲ- Điều khiển tốc độ động cơ bằng biến trở hiển thi led 7 đoạn

Thảo luận trong 'Báo cáo giửa kỳ' bắt đầu bởi phithien1202, 15 Tháng một 2010.

  1. phithien1202 New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 0
    Họ và tên: Nguyễn Bá Lực
    MSSV: 05111060
    Lớp: 051111A

    Ý tưởng đề tài: Dùng ADC và PWM trong Atmega8 để điều khiển tốc độ động cơ bằng biến trở sau đó cho hiển thị tốc độ ra led 7 đoạn.

    Mô hình thực tế:
    [IMG]


    Sơ đồ nguyên lý:
    [IMG]

    Những vấn đề đã giải quyết được:đã điều khiển thành công tốc độ của động cơ bằng biến trở.
    Những vấn đề chưa giải quyết được:chưa hiển thị được một cách chính xác tốc độ của động cơ.sẽ giải quyết trong thời gian tới
    Sơ đồ nguyên lý và bài báo cáo: http://www.mediafire.com/?dyoi1ntn1lo
  2. hongphilong0511 New Member

    Số bài viết: 26
    Đã được thích: 0
    Điểm thành tích: 0
  3. lucnguyen New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
  4. hungcdt05 New Member

    Số bài viết: 7
    Đã được thích: 0
    Điểm thành tích: 0
    Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V1.24.8d Professional
    Automatic Program Generator
    © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 1/9/2010
    Author : F4CG
    Company : F4CG
    Comments:


    Chip type : ATmega8
    Program type : Application
    Clock frequency : 12.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 256
    *****************************************************/

    #include <mega8.h>
    #include <delay.h>
    void layma(unsigned char x)
    {
    switch(x)
    {
    case 0:

    PORTD.1=PORTD.0=PORTD.6=PORTD.5=PORTD.3=PORTD.2=0;
    PORTC.5=PORTD.7=1;
    break;

    case 1:

    PORTC.5=PORTD.7=PORTD.6=PORTD.5=PORTD.3=PORTD.0=1;
    PORTD.2=PORTD.1=0;
    break;

    case 2:

    PORTC.5=PORTD.6=PORTD.2=1;
    PORTD.1=PORTD.0=PORTD.5=PORTD.3=PORTD.7=0;
    break;

    case 3: // So 0

    PORTD.7=PORTD.3=PORTD.2=PORTD.1=PORTD.0=0;
    PORTC.5=PORTD.6=PORTD.5=1;
    break;

    case 4: // So 0

    PORTC.5=PORTD.5=PORTD.3=PORTD.0=1;
    PORTD.7=PORTD.6=0;
    PORTD.1=PORTD.2=0;
    break;

    case 5: // So 0

    PORTD.0=PORTD.7=PORTD.6=PORTD.3=PORTD.2=0;
    PORTD.1=PORTC.5=PORTD.5=1;
    break;

    case 6: // So 0

    PORTD.0=PORTD.7=PORTD.6=PORTD.3=PORTD.2=PORTD.5=0;
    PORTD.1=PORTC.5=1;
    break;

    case 7: // So 0

    PORTC.5=PORTD.7=PORTD.6=PORTD.3=PORTD.5=1;
    PORTD.1=PORTD.0=PORTD.2=0;
    break;

    case 8: // So 0

    PORTD.7=PORTD.6=PORTD.5=PORTD.3=PORTD.2=PORTD.1=PORTD.0=0;
    PORTC.5=1;
    break;

    case 9: // So 0

    PORTD.0=PORTD.7=PORTD.6=PORTD.1=PORTD.3=PORTD.2=0;
    PORTC.5=PORTD.5=1;
    break;

    }
    }
    void hienthi(int n)
    {
    int a,b,c,d; // Lay cac so cac hang
    a= n/1000; // lay hang nghin
    b=(n-a*1000)/100; // lay hang tram
    c=(n-a*1000-b*100)/10; // lay hang chuc
    d=(n-a*1000-b*100-c*10);// lay hang don vi
    // Quet led
    PORTC.1=0;
    PORTC.2=PORTC.3=PORTC.4=1;
    layma(d); // lay ma hang don vi
    delay_us(50); // tre
    PORTD.0=PORTD.7=PORTD.6=PORTD.1=PORTD.3=PORTD.2=PORTC.5=PORTD.5=1; // tat toan bo led
    PORTC.2=0;
    PORTC.1=PORTC.3=PORTC.4=1; // led thu hai
    layma(c); // lay ma hang chuc
    delay_us(50); // tre
    PORTD.0=PORTD.7=PORTD.6=PORTD.1=PORTD.3=PORTD.2=PORTC.5=PORTD.5=1; // tat toan bo led
    PORTC.3=0;
    PORTC.2=PORTC.1=PORTC.4=1; // led thu ba
    layma(b); // lay ma hang tram
    delay_us(50); // tre
    PORTD.0=PORTD.7=PORTD.6=PORTD.1=PORTD.3=PORTD.2=PORTC.5=PORTD.5=1; // tat toan bo led
    PORTC.4=0;
    PORTC.2=PORTC.3=PORTC.1=1; // led thu tu
    layma(a); // lay ma hang nghin
    delay_us(50); // tre
    PORTD.0=PORTD.7=PORTD.6=PORTD.1=PORTD.3=PORTD.2=PORTC.5=PORTD.5=1; // tat toan bo led
    }

    #define FIRST_ADC_INPUT 0
    #define LAST_ADC_INPUT 0
    unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
    #define ADC_VREF_TYPE 0x00

    // ADC interrupt service routine
    // with auto input scanning
    interrupt [ADC_INT] void adc_isr(void)
    {
    register static unsigned char input_index=0;
    // Read the AD conversion result
    adc_data[input_index]=ADCW;
    // Select next ADC input
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
    input_index=0;
    ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
    // Start the AD conversion
    ADCSRA|=0x40;
    }

    // Declare your global variables here
    void main(void)
    {
    // Declare your local variables here
    int i;
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T
    PORTB=0x00;
    DDRB=0x02;

    // 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=0xff;
    DDRC=0x3e;

    // 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=0xef;

    // 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: 12000.000 kHz
    // Mode: Ph. correct PWM top=03FFh
    // OC1A output: Non-Inv.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x83;
    TCCR1B=0x01;
    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: Timer 2 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: 187.500 kHz
    // ADC Voltage Reference: AREF pin
    ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
    ADCSRA=0xCE;

    // Global enable interrupts
    #asm("sei")

    while (1)
    {
    // Place your code here
    OCR1A=adc_data[0];
    while (i<1000) //cho hien thi lien tuc de ko bi tat
    {
    hienthi(OCR1A);
    i++;
    }

    };
    }
  5. Bboy New Member

    Số bài viết: 11
    Đã được thích: 0
    Điểm thành tích: 0
    Code có nhiều đoạn thừa quá.
    Anh nên xóa đi các đoạn code thừa
    Em thấy ý tưởng này hay nhưng nếu xuất lên LCD thì sẽ đẹp và nhiều thông tin hơn
  6. lethanhtungtdh31 New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
    anh có thể cho biết là chương trình của atmega16 và atmega8 co giống nhau không?
    nếu khác thi xin anh cho e xin chương trình và sơ đồ nguyên lý
    cảm ơn nhiều
  7. duclinh1311 New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 0

Chia sẻ trang này