Thông báo

Collapse
No announcement yet.

Cần sự chỉ đạo của các anh có kinh nghiệm

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

  • Cần sự chỉ đạo của các anh có kinh nghiệm

    machtest.DSN
    Đây là mạch test
    em đang lập trình AVR quét ADC 8 kênh để dò dường sao nó chạy chậm quá
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.03.4 Standard
    Automatic Program Generator
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 1/1/2007
    Author :
    Company :
    Comments:


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

    #include <mega16.h>

    #include <delay.h>
    int TAM[8]={0,0,0,0,0,0,0,0};
    eeprom int luu_ADC[8]={100,100,100,100,100,100,100,100};
    int ADC[8]={100,100,100,100,100,100,100,100};
    int L[8] ={0,0,0,0,0,0,0,0};
    int w[8] ={1,2,4,8,16,32,64,128};
    int sensor = 0B00000000;

    #define FIRST_ADC_INPUT 0
    #define LAST_ADC_INPUT 7
    unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
    #define ADC_VREF_TYPE 0x20

    // ADC interrupt service routine
    // with auto input scanning
    interrupt [ADC_INT] void adc_isr(void)
    {
    static unsigned char input_index=0;
    adc_data[input_index]=ADCH;
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
    input_index=0;
    ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
    delay_us(10);
    ADCSRA|=0x40;
    }
    void doc_c_bien()
    {
    L[0]=adc_data[0];
    L[1]=adc_data[1];
    L[2]=adc_data[2];
    L[3]=adc_data[3];
    L[4]=adc_data[4];
    L[5]=adc_data[5];
    L[6]=adc_data[6];
    L[7]=adc_data[7];
    }

    void TB_ADC(int so_lan)
    {
    int i=0,j=0,n=0;
    int max_cb[8]={0,0,0,0,0,0,0,0};
    int min_cb[8]={255,255,255,255,255,255,255,255};
    int MAX[8] ={0,0,0,0,0,0,0,0};
    int KQ_MAX[8]={0,0,0,0,0,0,0,0};
    for(n=0;n<so_lan;n++)
    {
    for(j=0;j<100;j++)
    {
    doc_c_bien();
    for(i=0;i<8;i++)
    {
    if(max_cb[0]<L[0])
    {max_cb[0]=L[0];}
    if(min_cb[0]>L[0])
    {min_cb[0]=L[0];}
    if(max_cb[1]<L[1])
    {max_cb[1]=L[1];}
    if(min_cb[1]>L[1])
    {min_cb[1]=L[1];}
    if(max_cb[2]<L[2])
    {max_cb[2]=L[2];}
    if(min_cb[2]>L[2])
    {min_cb[2]=L[2];}
    if(max_cb[3]<L[3])
    {max_cb[3]=L[3];}
    if(min_cb[3]>L[3])
    {min_cb[3]=L[3];}
    if(max_cb[4]<L[4])
    {max_cb[4]=L[4];}
    if(min_cb[4]>L[4])
    {min_cb[4]=L[4];}
    if(max_cb[5]<L[5])
    {max_cb[5]=L[5];}
    if(min_cb[5]>L[5])
    {min_cb[5]=L[5];}
    if(max_cb[6]<L[6])
    {max_cb[6]=L[6];}
    if(min_cb[6]>L[6])
    {min_cb[6]=L[6];}
    if(max_cb[7]<L[7])
    {max_cb[7]=L[7];}
    if(min_cb[7]>L[7])
    {min_cb[7]=L[7];}
    }

    }
    MAX[0] = max_cb[0]+ MAX[0];
    MAX[1] = max_cb[1]+ MAX[1];
    MAX[2] = max_cb[2]+ MAX[2];
    MAX[3] = max_cb[3]+ MAX[3];
    MAX[4] = max_cb[4]+ MAX[4];
    MAX[5] = max_cb[5]+ MAX[5];
    MAX[6] = max_cb[6]+ MAX[6];
    MAX[7] = max_cb[7]+ MAX[7];

    }
    for(i=0;i<8;i++)
    {
    KQ_MAX[i] = MAX[i]/n;
    MAX[i]=0;
    }
    for(i=0;i<8;i++)
    {
    TAM[i]=(KQ_MAX[i] + min_cb[i])/2; //Approximation ADC
    }
    }
    void cam_bien()// Thoi gian de doc duoc ham nay la 276us
    {
    sensor=0B00000000;
    L[0]=adc_data[0];
    L[1]=adc_data[1];
    L[2]=adc_data[2];
    L[3]=adc_data[3];
    L[4]=adc_data[4];
    L[5]=adc_data[5];
    L[6]=adc_data[6];
    L[7]=adc_data[7];


    if(L[0]<=luu_ADC[0])
    {
    PORTC.0 = 1 ;
    }
    else PORTC.0 = 0;
    if(L[1]<=luu_ADC[1])
    {
    PORTC.1 = 1 ;
    }
    else PORTC.1 = 0;
    if(L[2]<=luu_ADC[2])
    {
    PORTC.2 = 1 ;
    }
    else PORTC.2 = 0;
    if(L[3]<=luu_ADC[3])
    {
    PORTC.3 = 1 ;
    }
    else PORTC.3 = 0;
    if(L[4]<=luu_ADC[4])
    {
    PORTC.4 = 1 ;
    }
    else PORTC.4 = 0;
    if(L[5]<=luu_ADC[5])
    {
    PORTC.5 = 1 ;
    }
    else PORTC.5 = 0;
    if(L[7]<=luu_ADC[7])
    {
    PORTC.7 = 1 ;
    }
    else PORTC.7 = 0;
    if(L[6]<=luu_ADC[0])
    {
    PORTC.6 = 1 ;
    }
    else PORTC.6 = 0;
    }
    void luu_CB()
    {
    int i=0;
    for(i=0;i<8;i++)
    {
    luu_ADC[i]=ADC[i];
    }
    }
    void main(void)
    {
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0xff;
    DDRC=0xFF;
    PORTD=0x00;
    DDRD=0x00;
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    MCUCR=0x00;
    MCUCSR=0x00;
    TIMSK=0x00;
    ACSR=0x80;
    SFIOR=0x00;
    ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
    ADCSRA=0xCA;
    luu_CB();
    // Global enable interrupts
    #asm("sei")

    while (1)
    {

    TB_ADC(10);
    doc_c_bien();
    cam_bien();

    };
    }
    em dùng codevisionAVR
    Last edited by conghuu196; 06-01-2012, 23:54.
    Khói nhựa thông che lấp đời trai trẻ.Dây thiếc hàn quấn chặt tuổi thanh xuân

  • #2
    Bạn kích kép vào con Atmega 16 và thay đổi tần số thạch anh lên 8Mhz là nó nhanh hơn đó, mình đã thử cái của bạn rồi, mạch của bạn đang dùng thạch anh 1 Mhz thì nó chậm là đúng rồi, mà bạn chú ý khi khai báo tần số hoạt động ở Codevision thì khai báo tần số cao lên 1 chút thì nó sẽ xử lý nhanh hơn.
    Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
    Liên hệ sđt: 0902.808.371

    Comment


    • #3
      thank bạn nhiều mình đã xử lí xong hóa ra không phải tại code mà bằng tại mạch mô phỏng. khổ thân làm mất cả đêm nghiên cứu
      Khói nhựa thông che lấp đời trai trẻ.Dây thiếc hàn quấn chặt tuổi thanh xuân

      Comment


      • #4
        là do thạch anh thấp quá đúng ko?
        Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
        Liên hệ sđt: 0902.808.371

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        • nguyendinhvan
          Trả lời cho Vấn đề về tốc độ quay
          bởi nguyendinhvan
          Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
          Hôm qua, 19:50
        • Andrea14
          Vấn đề về tốc độ quay
          bởi Andrea14
          Chào mọi người,

          Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
          12-12-2025, 12:42
        • bqviet
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi bqviet
          Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
          06-12-2025, 17:17
        • nguyendinhvan
          Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
          bởi nguyendinhvan
          Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
          05-12-2025, 19:59
        Đang tải...
        X