Thông báo

Collapse
No announcement yet.

Giúp em sửa code AMS quét Led Matrix 8x24 !

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

  • Giúp em sửa code AMS quét Led Matrix 8x24 !

    Em đang tập quét Led matrix (mô phỏng bằng phần mềm Proteus v7.8). Về phần cứng em dùng Transistor để kích Led và kết nối như hình dưới:

    Click image for larger version

Name:	Matrix.jpg
Views:	1
Size:	82.1 KB
ID:	1413571

    Em chỉ làm đơn giản là cho hiện số 2012 đứng yên trên ma trận 8x24 theo phương pháp quét hàng. Khi mô phỏng thì Led nháy loạn. Em nghĩ là do code chưa đúng. Anh chị nào trên diễn đàn giúp em sửa code với:
    Code:
    ; P1 - Quet hang, tich cuc muc 1
    ; P3,P2,P0 - Xuat du lieu, tich cuc muc 0
    ;-------------------------------------
        org    0h
        sjmp    main
    so_2012:    ;         P3              P2               P0
        db    11111111b, 11111111b, 11111111b
        db    11000111b, 00011110b, 11110001b
        db    10111010b, 11101100b, 11101110b
        db    11111010b, 11001010b, 11111110b
        db    11110110b, 10101110b, 11111101b
        db    11101110b, 01101110b, 11111011b
        db    11011110b, 11101110b, 11110111b
        db    10000011b, 00011000b, 00100000b
    ;-------------------------------------
    main:
        call    tat_mt
        clr    a            ; xoa Acc
        mov    dptr, #so_2012        ; dat con tro tai bang ma
    ;-------------------------------------
    ;-------------------------------------
        call    tiep
        sjmp    main
    ;-------------------------------------
    tiep:    mov    a, #00000001b        ; khoi tao xung quet cho hang 1
    display:    mov    p1, a            ; xuat xung quet
        rl    a            ; chuan bi xung quet cho hang tiep theo
        call    outp            ; xuat du lieu
        cjne    a, #00000001, display    ; chua quet du 8 hang: tiep tuc hien thi
        ret                ; quet du 8 hang: tro ve
    ;-------------------------------------
    outp:
        push    acc            ; cat thanh chua vao stack
        clr    a            ; xoa Acc
        movc    a, @a+dptr        ; nap du lieu vao Acc
        mov    p3, a            ; xuat ra p3
        inc    dptr            ; tang con tro den du lieu ke tiep
        clr    a            ; xoa Acc
    ;
        movc    a, @a+dptr        ; nap du lieu tiep theo vao Acc
        mov    p2, a            ; xuat ra p2
        inc    dptr            ; tang con tro den du lieu ke tiep
        clr    a            ; xoa Acc
    ;
        movc    a, @a+dptr        ; nap du lieu tiep theo vao Acc
        mov    p0, a            ; xuat ra p0
        inc    dptr            ; tang con tro de lay du lieu cho hang ke tiep
        clr    a            ; xoa Acc
    ;
        call    delay            ; goi thoi gian lam tre
        mov    p1, #0h            ; xoa xung quet
        call    tat_mt
    ;    call    delay
        pop    acc            ; nap lai thanh chua tu stack va
    ret                    ; tro ve
    ;-------------------------------------
    tat_mt:
        mov    p3, #0ffh            ; tat ma tran
        mov    p2, #0ffh            ;
        mov    p0, #0ffh            ;
    ret
    ;-------------------------------------
    ;-------------------------------------
    delay:
        push    00
        push    01
        MOV    R0, #20
        MOV    R1, #248
        DJNZ    R1, $
        DJNZ    R0, $-4
        POP    01
        POP    00
    ret
    ;-------------------------------------
        end
    Last edited by Ck33spkt; 18-07-2012, 22:52.

  • #2
    Mình nghĩ bạn nên để cái khai báo 2012 xuống cuối cùng thì sẽ đỡ hơn đó.

    Comment


    • #3
      Nguyên văn bởi jimmyli Xem bài viết
      Mình nghĩ bạn nên để cái khai báo 2012 xuống cuối cùng thì sẽ đỡ hơn đó.

      Cám ơn bạn đã quan tâm. Thực ra để nó ở đầu hay ở cuối cũng không ảnh hưởng gì đến hoạt động của chương trình cả.
      Mình chắc rằng code của mình chạy không đúng cũng không phải tại chỗ đó.

      Comment


      • #4
        ban nen xem lai phan delay.ve phan cung thi nen noi cac port truc tiep toi led mt de test it loi hon nhe

        Comment


        • #5
          Nguyên văn bởi vukhanh152 Xem bài viết
          ban nen xem lai phan delay.ve phan cung thi nen noi cac port truc tiep toi led mt de test it loi hon nhe
          Mình nghĩ phần cứng thì không có vấn đề gì vì mình đã mô phỏng với matrix 5x7 thành công. Mình cũng nghĩ là do phần delay chưa hợp lý nên Led mới bị nháy loạn. Mặc dù đã thử delay bằng các thời gian khác nhau nhưng vẫn chưa giải quyết được vấn đề !

          Comment


          • #6
            Mình không biết delay viết như kiểu của bạn có ưu điểm gì nhưng mình nghĩ làm như thế thì rắc rối và khó tính toán. Mình thường dùng delay bằng Timer 0 câu lệnh cũng gọn dễ tính thời gian không phải cất vào rồi lấy ra cho mệt...

            Comment


            • #7
              Nguyên văn bởi jimmyli Xem bài viết
              Mình không biết delay viết như kiểu của bạn có ưu điểm gì nhưng mình nghĩ làm như thế thì rắc rối và khó tính toán. Mình thường dùng delay bằng Timer 0 câu lệnh cũng gọn dễ tính thời gian không phải cất vào rồi lấy ra cho mệt...
              Delay bằng timer cũng được thôi nhưng em ngại tính. Em dùng delay bằng vòng lặp thế này quen rồi. Trong chương code trên em cho nó delay là 10mS. Em đã thử thay đổi thời gian delay từ 0.5mS đến 10mS như thế kia mà nó vẫn bị nháy mới chán bác ạ !

              Comment


              • #8
                Nguyên văn bởi Ck33spkt Xem bài viết
                Mình nghĩ phần cứng thì không có vấn đề gì vì mình đã mô phỏng với matrix 5x7 thành công. Mình cũng nghĩ là do phần delay chưa hợp lý nên Led mới bị nháy loạn. Mặc dù đã thử delay bằng các thời gian khác nhau nhưng vẫn chưa giải quyết được vấn đề !
                phần cứng:
                để mô phỏng trên proteus thay toàn bộ tranzitor bằng cổng NOT là nó chạy thôi.
                phần delay tính như sau: 1/24(hình)/8(hàng).
                |

                Comment


                • #9
                  Nguyên văn bởi tdm Xem bài viết
                  phần cứng:
                  để mô phỏng trên proteus thay toàn bộ tranzitor bằng cổng NOT là nó chạy thôi.
                  phần delay tính như sau: 1/24(hình)/8(hàng).
                  Bác "tdm" có thể chỉ rõ hơn cho em cách tính delay được không? Nếu làm theo cách của bác thì tần số quét là bao nhiêu ạ?
                  Em chưa thử đổi lại thời gian delay như của bác nhưng có thắc mắc thế này: Nếu theo cách tính của bác thì thời gian ON cho mỗi hàng em tính được là hơn 5mS gì đó, rồi tắt. Như vậy thời gian OFF của nó là 5*7 = 35mS (vì phải chờ các hàng khác ON), nếu như vậy thì thời gian OFF trong ví dụ của em sẽ gấp 7 lần thời gian ON của nó và vô hình chung LED sẽ không sáng mà ta chỉ nhìn thấy nó nháy nháy. Vậy có cách nào khắc phục không bác?

                  Comment


                  • #10
                    Nguyên văn bởi Ck33spkt Xem bài viết
                    Bác "tdm" có thể chỉ rõ hơn cho em cách tính delay được không? Nếu làm theo cách của bác thì tần số quét là bao nhiêu ạ?
                    Em chưa thử đổi lại thời gian delay như của bác nhưng có thắc mắc thế này: Nếu theo cách tính của bác thì thời gian ON cho mỗi hàng em tính được là hơn 5mS gì đó, rồi tắt. Như vậy thời gian OFF của nó là 5*7 = 35mS (vì phải chờ các hàng khác ON), nếu như vậy thì thời gian OFF trong ví dụ của em sẽ gấp 7 lần thời gian ON của nó và vô hình chung LED sẽ không sáng mà ta chỉ nhìn thấy nó nháy nháy. Vậy có cách nào khắc phục không bác?
                    tần số quét thì áp dụng công thức f=1/t.
                    cách tính đó của em không sai (lưu ảnh mắt 24h/s).nếu làm mạch thực tế thì led cũng không đếm lổi nháy lắm.
                    thường thì trên thực tế người ta áp dụng 50h/s.
                    mô phỏng trên proteus với quét 8 hàng delay để 2ms là đẹp.
                    |

                    Comment


                    • #11
                      Nguyên văn bởi tdm Xem bài viết
                      tần số quét thì áp dụng công thức f=1/t.
                      cách tính đó của em không sai (lưu ảnh mắt 24h/s).nếu làm mạch thực tế thì led cũng không đếm lổi nháy lắm.
                      thường thì trên thực tế người ta áp dụng 50h/s.
                      mô phỏng trên proteus với quét 8 hàng delay để 2ms là đẹp.
                      Nhân đây bác có thể chỉ giúp em: Bây giờ em muốn cho dòng chữ 2012 bên trên nó chạy từ phải sang trái như các bảng quang báo vẫn thường thấy ở các cửa hàng, cửa hiệu thì em phải sửa, phải thêm những gì vào code ạ? Em chỉ cần xin bác góp ý cho phần ý tưởng hay phần thuật toán thôi. Em cũng đã đọc một vài code về matrix nhưng không hiểu thuật toán lắm.
                      Em cám ơn bác trước !

                      Comment


                      • #12
                        Nguyên văn bởi Ck33spkt Xem bài viết
                        Nhân đây bác có thể chỉ giúp em: Bây giờ em muốn cho dòng chữ 2012 bên trên nó chạy từ phải sang trái như các bảng quang báo vẫn thường thấy ở các cửa hàng, cửa hiệu thì em phải sửa, phải thêm những gì vào code ạ? Em chỉ cần xin bác góp ý cho phần ý tưởng hay phần thuật toán thôi. Em cũng đã đọc một vài code về matrix nhưng không hiểu thuật toán lắm.
                        Em cám ơn bác trước !
                        dịch trái dữ liệu các hàng 1 bit rồi hiển thị .
                        |

                        Comment


                        • #13
                          Nguyên văn bởi tdm Xem bài viết
                          dịch trái dữ liệu các hàng 1 bit rồi hiển thị .
                          Em vẫn chưa hiểu ý của anh lắm. Vì em quét hàng, nếu dịch trái thì phải dịch kiểu gì? Hay là em quay trái các Port 3, Port 2, Port 0 hả anh?

                          Comment


                          • #14
                            Nguyên văn bởi Ck33spkt Xem bài viết
                            Em vẫn chưa hiểu ý của anh lắm. Vì em quét hàng, nếu dịch trái thì phải dịch kiểu gì? Hay là em quay trái các Port 3, Port 2, Port 0 hả anh?
                            ví dụ ta có dữ liệu một hàng như sau:
                            db 11000111b, 00011110b, 11110001b
                            dữ liệu dịch trái ở đây ở dạng 24 bit.(vi dụ sau khi dịch trái dữ liệu có mới như sau:
                            10001110,00111101,1110001x
                            |

                            Comment


                            • #15
                              Nguyên văn bởi tdm Xem bài viết
                              ví dụ ta có dữ liệu một hàng như sau:
                              db 11000111b, 00011110b, 11110001b
                              dữ liệu dịch trái ở đây ở dạng 24 bit.(vi dụ sau khi dịch trái dữ liệu có mới như sau:
                              10001110,00111101,1110001x
                              Ôi thế này thì chết em. Nếu em dịch nguyên cái số 2012 thì đã phải viết 24 dòng mã như trên. Nếu mà em viết một vài chữ dài dài gì đó thì nguyên cái mã cũng mất mấy nghìn dòng rồi. Thế này thì code dài lắm. Bác có cái thuật toán nào cho code nó ngắn lại ít không chỉ cho em với ?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X