Thông báo

Collapse
No announcement yet.

Why?

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

  • Why?

    sự thể thế này: mình dùng avr để lập trinh đếm. và có thiết lập để có thê tăng giảm giá trị hiển thị ra màn hình bằng 3 nút cho 3 biến
    đầu tiên mình viết:
    if (PINC.1==1){s++;};
    if (PINC.2==1 ){m++;};
    if (PINC.3==1 ){h++;};
    có nghĩa là mấy chân này mình không nôi với cái gì, khi ấn công tắc nó sẽ được nối với nguồn
    thì sau khi ấn xong thì thấy các giá trị này cứ tăng mãi mà không chụi dừng lại
    sau đó mình viêt
    if (PINC.1==0){s++;};
    if (PINC.2==0 ){m++;};
    if (PINC.3==0 ){h++;};
    tức là treo máy chân này lên ngưồn, khi ấn công tắc nó sẽ được nối với đât

    ai biết tại sao thì giải thích hộ mình cái, luu ý là cái này mình để trong vòng while lặp vô tận
    ĐỪNG KHÓC CHO NHỮNG GÌ ĐÃ QUA, MÀ HÃY CƯỜI CHO NHỮNG ĐIỀU SẮP TỚI!

  • #2
    Theo mình nghĩ là vì mỗi lần bạn ấn thì vi điều khiển thực thi lệnh tăng giá trị nhanh hơn thời gian từ lúc bắt đầu ấn đến khi nhả ra, và bạn còn đặt các lệnh đó trong vòng lập while nên trong thời gian ấn VDK , PORTC nhận thấy trạng thái nút ấn là 1 hay 0 hàng trăm ngàn lần nên cộng liên tiếp cho tới khi hết khoảng giá trị biến bạn gán(VD: int s thì -32000<s<32000 - mình không nhớ rõ số chính xác)
    Theo mình thì ta thêm delay sau mỗi lần tăng giá trị sẽ tránh trường hợp này
    VD
    while
    {
    if(PORTC.0 = 0) {s++;delay_ms(500);}
    }
    giá trị delay bạn thay đổi tùy theo nhu cầu
    Một số ý kiến chia sẻ cùng bạn
    Tự động hóa hôm nay cho một thế hệ robot mai sau

    Comment


    • #3
      To nhaduy99:
      sự thể thế này: mình dùng avr để lập trinh đếm. và có thiết lập để có thê tăng giảm giá trị hiển thị ra màn hình bằng 3 nút cho 3 biến
      đầu tiên mình viết:
      if (PINC.1==1){s++;};
      if (PINC.2==1 ){m++;};
      if (PINC.3==1 ){h++;};
      có nghĩa là mấy chân này mình không nôi với cái gì, khi ấn công tắc nó sẽ được nối với nguồn
      thì sau khi ấn xong thì thấy các giá trị này cứ tăng mãi mà không chịu dừng lại
      - Bạn nối chân của AVR với phím bấm, như vậy bạn phải thiết lập chân đó làm đầu vào để bạn có thể đọc vào trạng thái của nó. Khi bạn định nghĩa một chân làm đầu vào thì bạn phải chọn chế độ sử dụng điện trở pull up để khi không bấm phím thì trạng thái của đầu vào là xác định (mức 1). Nếu không chọn điện trở pull up thì khi không bấm phím, trạng thái của chân là không thể xác định.
      - Nếu bạn chọn điện trở pull up vậy khi bạn không bấm phím, điều kiện (PINC.i == 1) cũng luôn luôn đúng và như thế biến đếm của bạn sẽ liên tục tăng lên.

      Liệu đây có phải là vấn đề của bạn hay không?

      Thân mến,
      For a better world

      Comment


      • #4
        Nguyên văn bởi quocdat_dtvt Xem bài viết
        sự thể thế này: mình dùng avr để lập trinh đếm. và có thiết lập để có thê tăng giảm giá trị hiển thị ra màn hình bằng 3 nút cho 3 biến
        đầu tiên mình viết:
        if (PINC.1==1){s++;};
        if (PINC.2==1 ){m++;};
        if (PINC.3==1 ){h++;};
        có nghĩa là mấy chân này mình không nôi với cái gì, khi ấn công tắc nó sẽ được nối với nguồn
        thì sau khi ấn xong thì thấy các giá trị này cứ tăng mãi mà không chụi dừng lại
        sau đó mình viêt
        if (PINC.1==0){s++;};
        if (PINC.2==0 ){m++;};
        if (PINC.3==0 ){h++;};
        tức là treo máy chân này lên ngưồn, khi ấn công tắc nó sẽ được nối với đât
        mình viết bàng asm, cũng ko bit nhiều về C. Nhung theo mình thì đoạn lệnh trên bạn viết chưa dc.
        Khi AVR dò thấy có sự tác động vào chân đó(phóm ấn đc nhấn) thì cần phải kiểm tra thực sự phím ấn đã đc nhả thì mới tăng hay giảm biến đếm (hoặc là tăng hay giảm biến đếm trước và cần một vòng lặp để kt thực sự phím ấn thực sự đã đc nhả ra rồi thoát khỏi vòng lặp), vì tốc độ xử lý của AVR rất nhanh (nhanh hơn rất nhiều so với thời gian tác động vào phím ấn).
        Ngoài ra cần có một đoạn mã để kiểm tra thực sự phím được nhấn chứ không phải nhiễu tác động vào.
        Chúc bạn thành công

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X