quet led 7 doan

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thanhtung86
    Thành viên chính thức
    • Jan 2008
    • 73

    #1

    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
  • thanhtung86
    Thành viên chính thức
    • Jan 2008
    • 73

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

    Comment

    • core T
      Thành viên tích cực
      • Jul 2008
      • 185

      #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

      • thanhtung86
        Thành viên chính thức
        • Jan 2008
        • 73

        #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

        • thanhtung86
          Thành viên chính thức
          • Jan 2008
          • 73

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

          Comment

          • thanhtung86
            Thành viên chính thức
            • Jan 2008
            • 73

            #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

            • thanhtung86
              Thành viên chính thức
              • Jan 2008
              • 73

              #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

              • toymaker
                Thành viên tích cực
                • Feb 2006
                • 351

                #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

                • nghaiha
                  Thành viên tích cực
                  • Jul 2006
                  • 744

                  #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

                  • kitty511
                    Thành viên chính thức
                    • Sep 2007
                    • 76

                    #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...