RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Đo mực nước sử dụng PIC

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • lhhaidangdn
    Nhập môn đệ tử
    • Oct 2010
    • 3

    #1

    Đo mực nước sử dụng PIC

    Mình có một vấn đề như thế này mong các bạn giúp đỡ.....
    Phần cảm biến để đo mực nước thì mình đã giải quyết được bằng các BJT. Giờ tới phần lập trình mình vẫn không sao điều khiển được 4 cái Switch tương ứng với 4 mức nước. Cụ thể là:
    - Khi không CB nào có tín hiệu thì Pic sẽ đóng nguồn bơm nước
    - Khi ở mức nước thấp nhất CB1 có tín hiệu thì Pic nhận tín hiệu và xuất giá trị ra sẽ là E ra leb 7 đoạn
    - Khi ở mức nước trung bình CB1 và CB2 có tín hiệu, Pic xuất giá trị là L
    - Mức nước trung bình 2 thì CB1, CB2,CB3 có tín hiệu, Pic xuất H
    - khi cả 4 CB có tín hiệu thì báo F và tắt bơm.
    Đơn giản như vậy nhưng mà cái vấn đề quét cái tổ hợp cảm biến ấy sao mà lộn xộn quá mình lập trình mãi mà không được. Mình dùng Asembly. Bác nào pro giải quyết dùm với
  • KVLV
    Đệ tử 2 túi
    • Aug 2010
    • 42

    #2
    bạn muốn người khác viết code cho bạn à? ít ra bạn cũng post code lên đây (Asembly) và sơ đồ. xài con chip gì đố ai biết?

    Comment

    • longdv
      Đệ tử 2 túi
      • Oct 2009
      • 26

      #3
      đơn giản là đưa 4 chân cảm biến đó vô chung 1 port rồi so sánh thôi.
      ko thì so sánh kiểu khác. khi cảm biến dưới cùng không nhận thì ko cần xét gì nữa mà xuất E luôn . khi cảm biến dưới cùng nhận thì xét cảm biến thứ 2,nếu cảm biến này nhận luôn thì xuất L nếu ko thì vẫn xuất E...... cứ thế so sánh lên thôi.

      đã dùng pic thì sao ko dùng ngôn ngữ cao cấp mà viết. viết ASM chi cho rối

      Comment

      • lhhaidangdn
        Nhập môn đệ tử
        • Oct 2010
        • 3

        #4
        Như bạn Longdv đã nói khi mình đưa vào một Port và tiến hành hỏi vòng như vậy mình cũng đã thực hiện. Khi CB1 có tín hiệu thì mình sẽ hỏi tiếp CB2.... Nếu CB2 không có tín hiệu thì sẽ xuất E, khi CB2 có tín hiệu thì sẽ xuất L; tuy nhiên khi đó thì PIC nó sẽ luân phiên nhau xuất tín hiệu E và L ra leb.. Xử lý việc đó bằng code ASM mìh làm mãi mà không được. Nếu làm bằng C thì dễ rồi

        Comment

        • longdv
          Đệ tử 2 túi
          • Oct 2009
          • 26

          #5
          viết ASM hay C thì cũng có chung một sơ đồ giải thuật thôi ma.
          bạn phải so sánh các CB cho tới khi có được kết quả cuối cùng rồi mới xuất ra Led chứ.

          Comment

          • lhhaidangdn
            Nhập môn đệ tử
            • Oct 2010
            • 3

            #6
            Đã giải quyết xong. Đây là CODE ASEMBLY

            processor p16f877a
            include <p16f877a.inc>
            __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

            ;KHAI BAO BIEN
            #DEFINE CB1 PORTB,0
            #DEFINE CB2 PORTB,1
            #DEFINE CB3 PORTB,2
            #DEFINE CB4 PORTB,3
            #DEFINE BOM PORTB,4
            #DEFINE LED PORTB,5

            ;CHUONG TRINH CHINH
            ORG 0X0000
            GOTO START
            START
            BCF STATUS,RP1
            BCF STATUS,RP0
            CLRF PORTD
            CLRF PORTB
            BSF STATUS,RP0
            MOVLW B'00001111'
            MOVWF TRISB
            MOVLW 0X00
            MOVWF TRISD
            BCF STATUS,RP0
            CLRF PORTB
            CLRF PORTD

            ;VONG LAP
            LAP
            BTFSS CB1
            GOTO BAT_BOM
            BTFSS CB2
            GOTO XUAT_E
            BTFSS CB3
            GOTO XUAT_L
            BTFSS CB4
            GOTO XUAT_H
            GOTO XUAT_F

            BAT_BOM
            MOVLW B'1000000'
            MOVWF PORTD
            BSF BOM
            GOTO LAP
            XUAT_E
            MOVLW B'0000110'
            MOVWF PORTD
            GOTO LAP
            XUAT_L
            MOVLW B'1000111'
            MOVWF PORTD
            GOTO LAP
            XUAT_H
            MOVLW B'0001001'
            MOVWF PORTD
            GOTO LAP
            XUAT_F
            MOVLW B'0001110'
            MOVWF PORTD
            BCF BOM
            GOTO LAP
            END

            Comment

            Working...