Thông báo

Collapse
No announcement yet.

quet led 7 doan

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

  • quet led 7 doan

    mình gặp vấn đề thế này.
    mình quét 6 led 7 đoạn nhưng trong lúc quét còn phải tính toán nhiều nên led bi nháy.vậy có cách nào khắc phục ko ai giúp mình với.
    mình nghĩ là dùng một timer ngắt để quét trong ngắt.chương trình chính thì để xử lí co được ko.giúp minh cho ý kiến với

  • #2
    mình dùng atmega16 thạch anh 8m

    Comment


    • #3
      Không code, không mạch ... biết bạn bị sai chỗ nào mà chỉ ????

      Bạn xem lại trong luồng AVR Led matrix của bạn nghaiha, rất rõ, rất kỹ ... sẽ học hỏi được khối chuyện ... quét ... quét...VXL

      Comment


      • #4
        sodem=DATA;//-autozero;
        a=(sodem/10000);
        b=(sodem-a*10000)/1000;
        c=(sodem-a*10000-b*1000)/100;
        d=(sodem-a*10000-b*1000-c*100)/10;
        e=(sodem-a*10000-b*1000-c*100-d*10);
        //------------------ ---------------------------------------
        cnt=a;
        giaima(cnt);
        led2=1;
        led3=1;
        led4=1;
        led5=1;
        if(a==0) led1=1;
        if(a>=1) led1=0;
        delay_ms(2);
        //-----------------------
        cnt=b;
        giaima(cnt);
        led1=1;
        led3=1;
        led4=1;
        led5=1;
        if((a==0)&&(b==0)) led2=1;
        if((a==0)&&(b>=1)) led2=0;
        if(a>=1) led2=0;
        delay_ms(2);
        PORTB.2=0;
        PORTB.1=0;
        PORTB.1=0;
        PORTB.1=0;
        delay_us(4);
        PORTB.1=1;
        while(PINB.0==0);
        HBYTE=PIND;
        PORTB.2=1;
        delay_us(1);
        LBYTE=PIND;
        DATA=LBYTE+HBYTE*256;
        //---------------------
        cnt=c;
        giaima(cnt);
        led1=1;
        led2=1;
        led4=1;
        led5=1;
        if((a==0)&&(b==0)&&(c==0)) led3=1;
        if((a==0)&&(b==0)&&(c>=1)) led3=0;
        if((a==0)&&(b>=1)) led3=0;
        if(a>=1) led3=0;;
        delay_ms(2);

        //-------------------
        cnt=d;
        giaima(cnt);
        led1=1;
        led2=1;
        led3=1;
        led5=1;
        if((a==0)&&(b==0)&&(c==0)&&(d==0)) led4=1;
        if((a==0)&&(b==0)&&(c==0)&&(d>=1)) led4=0;
        if((a==0)&&(b==0)&&(c>=1)) led4=0;
        if((a==0)&&(b>=1)) led4=0;
        if(a>=1) led4=0;
        delay_ms(2);

        //------------------
        cnt=e;
        giaima(cnt);
        led1=1;
        led2=1;
        led3=1;
        led4=1;
        led5=0;
        delay_ms(1.5);
        //------------------
        //
        for (i=0;i<(FILTER_SIZE-1);i++) sorted_samples[i]=samples[i]=samples[i+1];
        sorted_samples[FILTER_SIZE-1]=samples[FILTER_SIZE-1]=DATA;
        bubble_sort(sorted_samples,FILTER_SIZE);
        DATA=0;
        for (i=FILTER_SIZE/2 - CENTER_DEVIATION; i<=(FILTER_SIZE/2 + CENTER_DEVIATION); i++)
        DATA+=sorted_samples[i];
        DATA/=(2*CENTER_DEVIATION + 1);
        j++;
        if(j==10000) j=201;
        //------------------ ---------------------------------------
        if(j==200)
        {
        autozero=DATA-1;
        j=201;
        };
        };
        };

        Comment


        • #5
          ở doạn cuối la chương trình xu lí lam led nháy

          Comment


          • #6
            mình ko sai code mà là về thời gian quét ko đảm bảo nên led bị nháy
            nên đang tìm cách khắc phục

            Comment


            • #7
              định quét led ở ngắt timer còn việc tính toán kia ở chương trình chính có dảm bảo ko?

              Comment


              • #8
                Nguyên văn bởi thanhtung86 Xem bài viết
                định quét led ở ngắt timer còn việc tính toán kia ở chương trình chính có dảm bảo ko?
                Dùng ngắt timer quét LED rất tốt, với các điều kiện :
                1> Tần số quét đủ cao để không bị nhấp nháy.
                2> Các thanh ghi cần cho việc quét cần được lưu vào stack bằng các lệnh push ở đầu trình phục vụ ngắt (đương nhiên phải có các lệnh pop tương ứng trước khi reti)
                3> Dùng 1 thanh ghi (hoặc ô nhớ) riêng để lưu SREG ở đầu trình phục vụ ngắt, và trả lại giá trị đã lưu trước khi reti.

                Chúc thành công !
                Imagine all the people
                Living life in peace...

                Comment


                • #9
                  Nguyên văn bởi thanhtung86 Xem bài viết
                  định quét led ở ngắt timer còn việc tính toán kia ở chương trình chính có dảm bảo ko?
                  Việc quét led phải đảm bảo được tần số quét là 50Hz nhé bác. Ít hơn thì sẽ bị nháy.
                  Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
                  Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

                  Comment


                  • #10
                    Nguyên văn bởi thanhtung86 Xem bài viết
                    sodem=DATA;//-autozero;
                    a=(sodem/10000);
                    b=(sodem-a*10000)/1000;
                    c=(sodem-a*10000-b*1000)/100;
                    d=(sodem-a*10000-b*1000-c*100)/10;
                    e=(sodem-a*10000-b*1000-c*100-d*10);
                    //------------------ ---------------------------------------
                    cnt=a;
                    giaima(cnt);
                    led2=1;
                    led3=1;
                    led4=1;
                    led5=1;
                    if(a==0) led1=1;
                    if(a>=1) led1=0;
                    delay_ms(2);
                    //-----------------------
                    cnt=b;
                    giaima(cnt);
                    led1=1;
                    led3=1;
                    led4=1;
                    led5=1;
                    if((a==0)&&(b==0)) led2=1;
                    if((a==0)&&(b>=1)) led2=0;
                    if(a>=1) led2=0;
                    delay_ms(2);
                    PORTB.2=0;
                    PORTB.1=0;
                    PORTB.1=0;
                    PORTB.1=0;
                    delay_us(4);
                    PORTB.1=1;
                    while(PINB.0==0);
                    HBYTE=PIND;
                    PORTB.2=1;
                    delay_us(1);
                    LBYTE=PIND;
                    DATA=LBYTE+HBYTE*256;
                    //---------------------
                    cnt=c;
                    giaima(cnt);
                    led1=1;
                    led2=1;
                    led4=1;
                    led5=1;
                    if((a==0)&&(b==0)&&(c==0)) led3=1;
                    if((a==0)&&(b==0)&&(c>=1)) led3=0;
                    if((a==0)&&(b>=1)) led3=0;
                    if(a>=1) led3=0;;
                    delay_ms(2);

                    //-------------------
                    cnt=d;
                    giaima(cnt);
                    led1=1;
                    led2=1;
                    led3=1;
                    led5=1;
                    if((a==0)&&(b==0)&&(c==0)&&(d==0)) led4=1;
                    if((a==0)&&(b==0)&&(c==0)&&(d>=1)) led4=0;
                    if((a==0)&&(b==0)&&(c>=1)) led4=0;
                    if((a==0)&&(b>=1)) led4=0;
                    if(a>=1) led4=0;
                    delay_ms(2);

                    //------------------
                    cnt=e;
                    giaima(cnt);
                    led1=1;
                    led2=1;
                    led3=1;
                    led4=1;
                    led5=0;
                    delay_ms(1.5);
                    //------------------
                    //
                    for (i=0;i<(FILTER_SIZE-1);i++) sorted_samples[i]=samples[i]=samples[i+1];
                    sorted_samples[FILTER_SIZE-1]=samples[FILTER_SIZE-1]=DATA;
                    bubble_sort(sorted_samples,FILTER_SIZE);
                    DATA=0;
                    for (i=FILTER_SIZE/2 - CENTER_DEVIATION; i<=(FILTER_SIZE/2 + CENTER_DEVIATION); i++)
                    DATA+=sorted_samples[i];
                    DATA/=(2*CENTER_DEVIATION + 1);
                    j++;
                    if(j==10000) j=201;
                    //------------------ ---------------------------------------
                    if(j==200)
                    {
                    autozero=DATA-1;
                    j=201;
                    };
                    };
                    };
                    Chào Bác Thanhtung86 Chương trình của bác rất hay, pác có thể cho em code đếm 4 led 7 được ko ah. Em rất cần tìm hiểu nhờ pác giúp đỡ dùm ah. Em rất cám ơn. YH của em là meoden21@yahoo.com.

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X