PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Xin giúp đỡ cho bài tập nhỏ nhưng QUÁ KHÓ! (http://www.picvietnam.com/forum/showthread.php?t=4859)

hieushv 01-09-2009 01:57 PM

Xin giúp đỡ cho bài tập nhỏ nhưng QUÁ KHÓ!
 
1 Attachment(s)
Chào mọi người !

Hôm nay thầy giao cho bài tập nhỏ này, nhưng mình lập trình hoài vẫn không được, mong các bạn cho mình một hướng hay một ý tưởng tốt.Sắp phải nộp bài rồi.

Yêu cầu của bài tập là :
-Khi SW 1 được nhấn thì bật led D2
-Khi SW 2 được nhấn thì bật led D1

Nếu như các SW và led không nối chung với nhau thì quá dễ, nhưng bây giờ Thầy cho nối chung lại.Thầy nói mục đích là dùng kỹ thuật lập trình để tiết kiệm chân IC.

Mình gửi kèm theo sơ đồ.

Rất mong sự giúp đỡ của mọi người !

hieushv 01-09-2009 05:17 PM

1 Attachment(s)
Cám ơn ngocthanh07 đã có ý kiến.Đúng là con PIC còn rất nhiều chân để làm cái nhiệm vụ.Nhưng đây chỉ là bài tập thầy cho với mục đích là nâng cao khả năng lập trình.và yêu cầu của thầy là chỉ dùng 4 chân IC như sơ đồ.
Bạn thấy đó.Nếu theo sơ đồ trên thì chỉ sử dụng tất cả 4 chân thôi.Còn với sơ đồ phía dưới đây mình phải dùng đến 6 chân IC.Với sơ đồ 2 này mình chỉ cần quét phím rồi quét led là thực hiện được yêu cầu của Thầy.với lại bài tập này mình làm rồi, và cái sơ đồ trên là bài nâng cao tiếp theo.
Với sơ đồ trên, thì RB2 và RB3 vừa là chân đọc vào từ SW vừa là chân xuất ra mức cao cho led sáng.Theo bạn mình nên làm thế nào.

Hi vọng Bạn hiểu ý mình và cho mình hướng giải quyết.

hieushv 01-09-2009 05:23 PM

ngocthanh07,Nếu bạn cho là với yêu cầu trên là quá dễ thì bạn cứ cho mình hướng giải quyết thử xem.Hi vọng được học hỏi nhiều từ bạn.Mình cũng mới làm quen với con PIC thôi. À nếu được thì bạn ví dụ trên CCS C nhé.

Thanks!

Mr.Bi 01-09-2009 11:04 PM

Cái mạch đầu tiên của u cũng chưa gọi là tiết kiệm chân VDK , u nối lun Cathod của led qua R220 xuống GND thì ta bỏ đc 2 chân VDk nữa

Code:

main()
{ set_tris_B(0xFF);PORTB=0; // đầu tiên là chân lấy tín hiệu
  if(RB3==1){chống nảy ;
                  set_tris_B(0);RB3=1; //bật led 1 sáng
                  }
}

led 2 u tự bật nhá . Code ni viết tức thời , u thử trên mạch thật oy báo lại cho tui & ae xem thử , ok ?

cong1810 02-09-2009 12:27 AM

bạn xem thử cách này nhé.
-nếu bạn đã biết dùng chân ADC thì chỉ cần 3 chân vi xử lý là giải quyết dc đề bài của bạn.
- hoặc làm thế này cũng cần 3 chân. do yêu cầu chỉ có 2 led nên mình có thể setup cho 1 chân pic làm input. nhấn nút 1 :chân này lên mức cao (mức 1), --> sáng 1 led. nhấn nút kia: chân này xuống mức thấp. --->sáng đèn còn lại. vấn đề ở đây là bạn phải ghim mức áp cho chân này trong khoảng không xác định là mức 0 hay mức 1. có lẽ khoảng 0.5-->2.3. bạn thử làm nhé!

nhanh0112 02-09-2009 02:13 PM

Trích:

Nguyên văn bởi hieushv (Post 29188)
Yêu cầu của bài tập là :
-Khi SW 1 được nhấn thì bật led D2
-Khi SW 2 được nhấn thì bật led D1

Cho tui hỏi lại đầu bài tý.
- Khi nhấn SW1 thì bật LED2, và nhấn SW2 thì bật LED1. Vậy khi nhả nút ra thì nó tắt đi hay là vẫn sáng (theo kiểu flip-flop).
- Và một điều nữa là LED yêu cầu sáng liên tục hay sáng theo kiểu dạng xung cũng đc (chớp nhanh - quét LED)

cskiller 02-09-2009 04:30 PM

1 Attachment(s)
Code:

while(1){
SW1_SCAN: 
      LED1_TRIS_INPUT();
      if(SW1_INPUT()){  // Bat Led2 neu SW1 nhan
        LED2_TRIS_OUTPUT();
        LED2_ON();
        delay_ms(1);
        LED2_OFF();
      }
SW2_SCAN:     
      LED2_TRIS_INPUT();
      if(SW2_INPUT()){  // Bat Led1 neu SW2 nhan
        LED1_TRIS_OUTPUT();
        LED1_ON();
        delay_ms(1);
        LED1_OFF();
      }
  }

Cơ bản chỉ là vấn đề sử dụng IO tuần tự vừa làm Input vừa làm Output thôi.Áp dụng việc quét tuần tự qua lại thì mới xử lý được việc nhấn cùng lúc 2 SW.

Regards

thaithienanh 02-09-2009 09:41 PM

:D cái này đơn giản mừ, bạn chỉ cần thay đổi trạng thái in - out liên tục, tốt nhất là dùng lệnh pullup treo Port B lên mức dương (bắt xung âm), bởi vì khi treo port B lên cao hiệu điện thế đặt trên 2 led đều bằng 0 nên không thể sáng đuợc, ở trạng thái out bạn chỉ cần set 2 chân B4,B5 xuống mức thấp, xong rùi bài toán đã đuợc giải quyết :D

Chúc vui :beer:

thienthanhomenh 03-09-2009 09:25 AM

Trích:

Nguyên văn bởi hieushv (Post 29188)
Chào mọi người !

Hôm nay thầy giao cho bài tập nhỏ này, nhưng mình lập trình hoài vẫn không được, mong các bạn cho mình một hướng hay một ý tưởng tốt.Sắp phải nộp bài rồi.

Yêu cầu của bài tập là :
-Khi SW 1 được nhấn thì bật led D2
-Khi SW 2 được nhấn thì bật led D1

Nếu như các SW và led không nối chung với nhau thì quá dễ, nhưng bây giờ Thầy cho nối chung lại.Thầy nói mục đích là dùng kỹ thuật lập trình để tiết kiệm chân IC.

Mình gửi kèm theo sơ đồ.

Rất mong sự giúp đỡ của mọi người !

mình có cách chỉ dùng ba chan thôi như có thể input bao nhiê nút nhấn tùy bạn còn output thì tùy bạn chọn bao nhiêu output

với cách này thì tiết kiệm hơn bạn một chân đấy
1 ADC cho nút nhấn 2 output cho led

input có thể dùng một chân ADC dẻ đọc tính hiệu (khoàn 20 =>30) nút nhấn còn nhiều hơn hay khong mình chừa thử
còn nểu muốn tiết kiêm nủa thì dùng cách này của thaithienanh kết hợp cách này thì tiết kiệm được vài chân nửa

với cách này thì tiết kiệm them một chân nủa nhưng lúc đó code phải mệt một chút nhưng tôi nghỉ khôg là vấn đề lớn
nếu có lơ nói sai thi reply lại nha


Múi giờ GMT. Hiện tại là 06:36 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam