Thông báo

Collapse
No announcement yet.

có ai giúp với.....

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

  • có ai giúp với.....



    em có cái mạch đếm sản phẩm và code đi cùng.em đã chạy mô phỏng trên proteus và kết quả là mạch chạy rất ngon và ổn định.nhưng khi em làm trên mạch thật thì lại bị lỗi...khi em ấn các nút bấm điều khiển thì led cũng tăng hoặc giảm theo đúng chức năng của phím bấm rồi...nhưng mà khi em bỏ tay ra thì led lại trở về 0 ngay lập tức.em đã thử đi thử lại rất nhiều lần rồi nhưng mà ko được.các bác xem hộ và chỉ giáo cho em với...bài tập em sắp phải nộp rồi


    đây là code của em :

    Code:
    .INCLUDE "M8515DEF.INC"
    .CSEG.
    .ORG 0x000
    RJMP BATDAU
    .ORG 0x0020
    BATDAU:
    ;KHOI DONG STACK POINTER
    LDI R17, HIGH(RAMEND)
    LDI R16, LOW(RAMEND)
    OUT SPL, R16
    OUT SPH,R17
    ; KHOI DONG CAC PORT
    CLR R16 ; XOA R16, R16=0
    OUT DDRB, R16; DDRB=0, PORTB LA NGO NHAP
    OUT DDRD, R16
    LDI R16, 0xFF; SET TAT CA CAC BIT CUA R16 LEN 1
    OUT PORTB,R16; DDRB=0, PORTB =0xFF, KEO LEN CAC CHAN PORTB
    OUT PORTD,R16
    OUT DDRA, R16  ; HANG CHUC
    CLR R28
    OUT DDRC, R16; DDRD=0xFF, PORTD LA NGO XUAT HANG DON VI
    CLR R25; XOA R25, R25 LA THANH GHI DUNG CHUA SO DEM
    CLR R22
    CLR R26
    CLR R27
    SER R20 ; R21 LA THANH GHI TAM CHUA GIA TRI TRUOC DO CUA PINB
    SER R23 ; R23 LA THANH GHI TAM CHUA GIA TRI TRUOC DO CUA PIND
    
    
    MAIN:
    
    IN R22,PIND
    RCALL NHAP
    RCALL DEM_TIEP
    RJMP MAIN
    
    DEM_LUI:
    IN R21,PINB ; DOC GIA TRI TU PINB, TUC TU CAC BUTTON
    RCALL SOSANH1; GOI CHUONG TRINH CON SOSANH
    RCALL SOSANH2
    OUT PORTC, R25 ; XUAT GIA TRI DEM RA PORTD
    OUT PORTA, R28
    SBRS R21,1; NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG
    ;TIEP THEO
    RCALL TANG; NHAY DEN CHUONG TRINH CON GIAM TANG GIA TRI DEM
    MOV R20,R21; LUU LAI TRANG THAI PINB
    RJMP DEM_LUI
    RET
    
    
    
    
    
    DEM_TIEP:
    IN R21,PINB ; DOC GIA TRI TU PINB, TUC TU CAC BUTTON
    RCALL SOSANH1; GOI CHUONG TRINH CON SOSANH
    RCALL SOSANH2
    OUT PORTC, R25 ; XUAT GIA TRI DEM RA PORTD
    OUT PORTA, R28
    
    SBRS R21,1; NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG
    ;TIEP THEO
    RCALL TANG; NHAY DEN CHUONG TRINH CON GIAM TANG GIA TRI DEM
    MOV R20,R21; LUU LAI TRANG THAI PINB
    SBRC R21,3
    RJMP DEM_TIEP
    RET
    
    ;**********************CHUONG TRINH CON************************
    ; **************subroutine kiem tra gioi hang (tu 0 den 9) cua so dem
    SOSANH1:
    CPI R25, 10
    BREQ RESET0; NEU GIA TRI DEM=10 THI TRA VE 0
    CPI R25, 255 
    BREQ RESET9; NEU GIA TRI DEM =255 THI TRA VE 9
    RJMP QUAYVE; NHAY DEN NHAN QUAYVE
    
    SOSANH2:
    CPI R28,10
    BREQ RESET1;
    CPI R28,225
    BREQ RESET91
    RJMP QUAYVE
    
    RESET0:
    LDI R25,$0; TRA GIA TRI DEM VE 0
    INC R28
    RJMP QUAYVE
    
    RESET9:
    
    LDI R25,$9; GAN 9 CHO GIA TRI DEM
    QUAYVE:
    RET
    
    RESET1:
         LDI R28,$0
    	 RJMP QUAYVE
    RESET91:
         LDI R28,$9
    
    
    ; ************************************************************
    ; **************subroutine tang so dem 1 don vi neu dieu kien thoa
    
    
    TANG:
    SBRS R20,1
    RET
    INC R25
    RET
    
    
               ;========NHAP  SO SAN PHAM =========
    NHAP:
    IN R22,PIND ; DOC GIA TRI TU PIND VAO THANH GHI R22
    RCALL SOSANH3
    OUT PORTA,R28  
    SBRS R22,0 ; NEU BIT 0 CUA R22 (TUC CHAN PD0=1,KHONG AN PHIM) THI BO QUA DONG TIEP THEO
    RCALL TANG_HANG_CHUC
    SBRS R22,1
    RCALL GIAM_HANG_CHUC
    RCALL SOSANH4
    OUT PORTC,R25
    SBRS R22,4
    RCALL TANG_HANG_DVI
    SBRS R22,5
    RCALL GIAM_HANG_DVI
    MOV R23,R22  ;   LUU LAI TRANG THAI PIND VAO R23
    SBRC R22,6 ; NEU BIT4 CUA R22( TUC PD4=0-AN PHIM )THI BO QUA DONG TIEP THEO
    RJMP NHAP
    RET
    
    SOSANH3:
    CPI R28,10
    BREQ RESET1
    CPI R28,255
    BREQ RESET91
    RJMP QUAYVE
    
    TANG_HANG_CHUC:
    SBRS R23,0
    RET
    INC R28
    RET
    
    
    GIAM_HANG_CHUC:
    SBRS R23,1
    RET
    DEC R28
    RET
    
    
    
    SOSANH4:
    CPI R25,10
    BREQ RESET2
    CPI R25,255
    BREQ RESET9
    RJMP QUAYVE
    
    RESET2:
    LDI R25,$0; TRA GIA TRI DEM VE 0
    RJMP QUAYVE
    
    TANG_HANG_DVI:
    SBRS R23,4
    RET
    INC R25
    RET
    
    GIAM_HANG_DVI:
    SBRS R23,5
    RET
    DEC R25
    RET
    Last edited by VNarmy; 09-05-2009, 16:41.

  • #2
    Em cũng gặp trường hợp như vậy. Mô phỏng bằng Proteus thì OK nhưng khi chuyển sang làm mạch thật thì lại gặp trục trặc. Có bác nào biết nguyên nhân không vậy thì giúp dùm đi.

    Comment


    • #3
      đúng vậy đấy...ko hiểu lí do tại sao nhỉ...các pro làm ơn chỉ giáo dùm với

      Comment


      • #4
        đúng vậy đấy...ko hiểu lí do tại sao nhỉ...các pro làm ơn chỉ giáo dùm với
        Bạn có thể giải thích thuật toán bạn làm thế nào không. Hoặc bạn post cái lưu đồ thuật toán chương trình bạn viết lên để mọi người cùng phân tích. Lâu quá không làm asm, giờ đọc một chương trình asm dài thượt, quả thực là rất ngại. Nếu bạn có lưu đồ hoặc giải thích cách làm của bạn thì sẽ dễ phân tích hơn, từ đó xem chương trình bị lỗi gì.

        Thân mến,
        For a better world

        Comment


        • #5
          thuật toán của mình thì cũng đơn giản thôi.mình lập trình cho từng nút bấm một bằng các chuơng trình con như đã chú thích trong code.mình muốn là mỗi lần ấm phím tăng,hoặc giảm hàng chục,hàng đơn vị thì tuơng ứng led của mình cũng tăng và giảm theo.
          ví dụ nhấn phím tăng hàng đơn vị thì led thứ 2 sẽ lên 1. nhấn 1 phát nữa sẽ lên 2.và cứ thế...tương tự cho các phím còn lại.

          Comment


          • #6
            Nguyên văn bởi thamtutaihoa Xem bài viết




            Code:
            .INCLUDE "M8515DEF.INC"
            
            
            MAIN:
            
            IN R22,PIND
            RCALL NHAP
            RCALL DEM_TIEP
            RJMP MAIN
            
            DEM_LUI:
            IN R21,PINB ; DOC GIA TRI TU PINB, TUC TU CAC BUTTON
            RCALL SOSANH1; GOI CHUONG TRINH CON SOSANH
            RCALL SOSANH2
            OUT PORTC, R25 ; XUAT GIA TRI DEM RA PORTD
            OUT PORTA, R28
            SBRS R21,1; NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG
            ;TIEP THEO
            RCALL TANG; NHAY DEN CHUONG TRINH CON GIAM TANG GIA TRI DEM
            MOV R20,R21; LUU LAI TRANG THAI PINB
            RJMP DEM_LUI
            RET
            
            
            
            
            
            DEM_TIEP:
            IN R21,PINB ; DOC GIA TRI TU PINB, TUC TU CAC BUTTON
            RCALL SOSANH1; GOI CHUONG TRINH CON SOSANH
            RCALL SOSANH2
            OUT PORTC, R25 ; XUAT GIA TRI DEM RA PORTD
            OUT PORTA, R28
            
            SBRS R21,1; NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG
            ;TIEP THEO
            RCALL TANG; NHAY DEN CHUONG TRINH CON GIAM TANG GIA TRI DEM
            MOV R20,R21; LUU LAI TRANG THAI PINB
            SBRC R21,3
            RJMP DEM_TIEP
            RET
            
            ;**********************CHUONG TRINH CON************************
            ; **************subroutine kiem tra gioi hang (tu 0 den 9) cua so dem
            SOSANH1:
            CPI R25, 10
            BREQ RESET0; NEU GIA TRI DEM=10 THI TRA VE 0
            CPI R25, 255 
            BREQ RESET9; NEU GIA TRI DEM =255 THI TRA VE 9
            RJMP QUAYVE; NHAY DEN NHAN QUAYVE
            
            SOSANH2:
            CPI R28,10
            BREQ RESET1;
            CPI R28,225
            BREQ RESET91
            RJMP QUAYVE
            
            RESET0:
            LDI R25,$0; TRA GIA TRI DEM VE 0
            INC R28
            RJMP QUAYVE
            
            RESET9:
            
            LDI R25,$9; GAN 9 CHO GIA TRI DEM
            QUAYVE:
            RET
            
            RESET1:
                 LDI R28,$0
            	 RJMP QUAYVE
            RESET91:
                 LDI R28,$9
            
            
            ; ************************************************************
            ; **************subroutine tang so dem 1 don vi neu dieu kien thoa
            
            
            TANG:
            SBRS R20,1
            RET
            INC R25
            RET
            
            
                       ;========NHAP  SO SAN PHAM =========
            NHAP:
            IN R22,PIND ; DOC GIA TRI TU PIND VAO THANH GHI R22
            RCALL SOSANH3
            OUT PORTA,R28  
            SBRS R22,0 ; NEU BIT 0 CUA R22 (TUC CHAN PD0=1,KHONG AN PHIM) THI BO QUA DONG TIEP THEO
            RCALL TANG_HANG_CHUC
            SBRS R22,1
            RCALL GIAM_HANG_CHUC
            RCALL SOSANH4
            OUT PORTC,R25
            SBRS R22,4
            RCALL TANG_HANG_DVI
            SBRS R22,5
            RCALL GIAM_HANG_DVI
            MOV R23,R22  ;   LUU LAI TRANG THAI PIND VAO R23
            SBRC R22,6 ; NEU BIT4 CUA R22( TUC PD4=0-AN PHIM )THI BO QUA DONG TIEP THEO
            RJMP NHAP
            RET
            
            SOSANH3:
            CPI R28,10
            BREQ RESET1
            CPI R28,255
            BREQ RESET91
            RJMP QUAYVE
            
            TANG_HANG_CHUC:
            SBRS R23,0
            RET
            INC R28
            RET
            
            
            GIAM_HANG_CHUC:
            SBRS R23,1
            RET
            DEC R28
            RET
            
            
            
            SOSANH4:
            CPI R25,10
            BREQ RESET2
            CPI R25,255
            BREQ RESET9
            RJMP QUAYVE
            
            RESET2:
            LDI R25,$0; TRA GIA TRI DEM VE 0
            RJMP QUAYVE
            
            TANG_HANG_DVI:
            SBRS R23,4
            RET
            INC R25
            RET
            
            GIAM_HANG_DVI:
            SBRS R23,5
            RET
            DEC R25
            RET
            Mình góp ý như này nha,ko bit có dúng ko nưa
            - bạn thử xem lại trong chương trình con của mình, mình thấy có lệnh nhảy từ ctc đến đoạn mã khác ctc đó.
            - và khi đọc cổng để so sánh với một giá trị nào đó thì tôt nhất là cần gọi trễ một thời gian để ổn định đầu vào (ko là giá trị nhập vào bị sai đó) và sau lệnh đọc giá trị chứa trong PINx nếu cần dùng ngay thì cần trễ một chu kỳ (lệnh NOP)
            Nguyên văn bởi thamtutaihoa Xem bài viết




            Code:
            .INCLUDE "M8515DEF.INC"
            
            
            MAIN:
            
            IN R22,PIND
            RCALL NHAP
            RCALL DEM_TIEP
            RJMP MAIN
            
            DEM_LUI:
            IN R21,PINB ; DOC GIA TRI TU PINB, TUC TU CAC BUTTON
            RCALL SOSANH1; GOI CHUONG TRINH CON SOSANH
            RCALL SOSANH2
            OUT PORTC, R25 ; XUAT GIA TRI DEM RA PORTD
            OUT PORTA, R28
            SBRS R21,1; NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG
            ;TIEP THEO
            RCALL TANG; NHAY DEN CHUONG TRINH CON GIAM TANG GIA TRI DEM
            MOV R20,R21; LUU LAI TRANG THAI PINB
            RJMP DEM_LUI
            RET
            nếu mà vào vòng này là ko thoát dc đâu nha

            Comment


            • #7
              mình có ý kiến thế này
              theo mình thì cá công tắc của bạn lên nôi lên nguồn qua 1 điện trỏ
              để khi không ấn công tắc thì trạng thái là 1
              còn ấn công tắc thì trạng thái sẽ là 0
              như thế cớ lẽ sẽ ổn định hơn là để nó trôi nổi như thế kia
              ĐỪNG KHÓC CHO NHỮNG GÌ ĐÃ QUA, MÀ HÃY CƯỜI CHO NHỮNG ĐIỀU SẮP TỚI!

              Comment


              • #8
                Mạch mô phỏng của Proteus thì các trường hợp hay các linh kiện gần như lí tưởng rùi, còn khi làm thực tế thì ra chợ trời mua linh kiện TQ thì làm sao đảm bảo các trạng thái bão hòa được. Nói chung code mô phỏng ok chắc chắn sẽ chạy nếu hardware ok thôi. Bạn thử kiểm tra mấy con linh kiện có tốt ko
                Một số ý kiến nhỏ với bạn
                Tự động hóa hôm nay cho một thế hệ robot mai sau

                Comment


                • #9
                  mô phỏng là 1 việc còn thực tế lại là 1 việc khác bạn ah. trong khi mo phỏng chúng ta chỉ cần chống dội các nút bấm 1 cách đơn giản là nó đã chạy đúng rồi. nhưng khi áp vào thực tế lại ko đâu. theo mình nếu bạn đã làm việc với nút bấm thì phải chú ý chống dội thật tốt mới chạy tốt được. cả phần cứng lẫn phần mềm nhé bạn. chứ chỉ treo trở lên hay delay sau khi đọc giá trị từ phím nhấn thì ăn thua gì.
                  Chúc bạn thành công nhé.

                  Comment


                  • #10
                    nhờ trch giai thích rõ hơn về vấn đề đó ko? mình cũng chẳng hiểu chống dội nghĩa là như thế nào nữa

                    Comment


                    • #11
                      Hiểu 1 cách như vầy nha. Phím nhấn của bạn là phím nhấn cơ khí. Nên khi mình nhấn phím thì chưa chắc nó đã tiếp xúc ngay tại thời điểm đó. Mà nó còn nhiễu mức 1 hay 0 trong 1 khoảng thời gian ngắn sau đó mới ổn định tại mức bạn nhấn. Có thể là 1 hay 0 tùy vào phần cứng của bạn. Lúc nhả phím cũng xảy ra tình huống tương tự vậy. Mà bạn biết đấy khi xảy ra nhiễu mức 1,0 liên tục thì VDK cũng đọc liên tục dẫn dến sai ý đồ dk của mình. Bạn hiểu rồi chứ. Đó gọi là dội đấy bạn ah. Chúc bạn thành công!

                      Comment


                      • #12
                        Mình cũng đóng góp thêm đôi chút he!
                        Thường thì nếu ta dùng các phím ấn ngoài thị trường không đảm bảo độ chính xác lắm, nên ta cần chống dội bằng phần cứng bằng cách thêm mạch chống dội cho mỗi nút ấn. Mạch này trong cuốn Kĩ thuật xung số có đề cập, gồm 2 cổng NAND cho một nút. Mạch này chủ yếu là đảm bảo mức 1 và 0 cho tín hiệu vào, đồng thời IC logic(cổng NAND) cũng làm đệm cho tín hiệu vào chân VDK cho an toàn.
                        Bên cạnh đó còn có một số cách chống dội bằng phần mềm, bạn search trên diễn đàn điện tử - VDK nào cũng có.
                        Theo kinh nghiệp của mình thì thấy dùg các phím mềm như keyboard máy tính chính xác hơn mấy cái phím cứng mà dân điện tử làm mạch quét phím hay dùng(nhấn cộc cộc..dễ hư lắm).
                        Mong đóng góp chút ý kiến - ý cò với các bạn
                        Tự động hóa hôm nay cho một thế hệ robot mai sau

                        Comment


                        • #13
                          ah té ra là như vậy.
                          Tôi thì chảng cần phải chống dội bằng phần cứng, chỉ cần dùng phần mềm với một vòng lặp vừa đợi vừa kiểm tra thôi. cụ thể là cần một vòng lặp trễ, giả sử đầu vào AVR cho tích cực với mức 0, khi VDK của ta nhận được tín hiệu chân đó là logic 0 thì bắt đầu gọi trễ một thời gian đồng thời trong thời gian đó cho VDK kiểm tra liên tục chân đó, nếu chân đó có logic 1 thì coi như là xung nhiễu gây lên chân đó,tín hiệu ko đúng (-> loại bổ đc hiện tượng không ổn định của các phím nhấn cơ khí). khi hết khoảng thời gian trễ đó mà chân đó vẫn ở logic 0 thì ta nhận đc chân đó có mức logic 0 -> thực hiện theo yêu cầu. (tất nhiên nếu là nút nhấn thì cần kiểm tra cho tới khi nút nhấn trở về trạng thái ban đầu ổn định). Ok mà.

                          Comment


                          • #14
                            Nguyên văn bởi nhaduy99 Xem bài viết
                            Mạch mô phỏng của Proteus thì các trường hợp hay các linh kiện gần như lí tưởng rùi, còn khi làm thực tế thì ra chợ trời mua linh kiện TQ thì làm sao đảm bảo các trạng thái bão hòa được. Nói chung code mô phỏng ok chắc chắn sẽ chạy nếu hardware ok thôi. Bạn thử kiểm tra mấy con linh kiện có tốt ko
                            Một số ý kiến nhỏ với bạn
                            liệu có chính xác là linh kiên ngoài trợ joi đều như vậy ko? t mua về thấy hầu như là OK hết mà,sai số ko đáng kể, chấp nhận dc. Còn trên proteus chưa chắc đã là hoàn hảo đâu nha, cũng ko tin tưởng hoàn toàn dc mấy bản free

                            Comment


                            • #15
                              Dội bàn phím là khi bạn dùng các công tắc cơ khí thì khi bạn ấn do tín đàn hồi của mặt tiếp xúc nên giả khi ấn nó sẽ ko ở một mức nhất định 0 or 1 mà là các xung vuông lên khi bạn đọc data dễ nhầm . Do dao động đàn hồi tắt dần nên sau 1 khoảng thời gian t=20ms thì nó sẽ ổn định ở 1 mức nhất định . Viêc làm cho nó ko còn xung khi đọc là chống dội bàn phím

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X