PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 02-03-2009, 09:46 AM   #1
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
hỏi về keypad 4x4 dùng ADC

Chào mọi người!
Mình đang làm 1 ứng dụng dùng keypad.
Cách thông thường là dùng 8 chân thì mình làm được rồi.
Nhưng do không đủ chân mình định dùng keypad ADC để tiết kiệm chân.
Mà mình không biết ưu điểm và khuyết điểm cũng như cách làm keypad ADC.
Có ai biết keypad ADC tư vấn cho mình nhe.
Xin cảm ơn.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2009, 08:28 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tranhuyky View Post
Chào mọi người!
Mình đang làm 1 ứng dụng dùng keypad.
Cách thông thường là dùng 8 chân thì mình làm được rồi.
Nhưng do không đủ chân mình định dùng keypad ADC để tiết kiệm chân.
Mà mình không biết ưu điểm và khuyết điểm cũng như cách làm keypad ADC.
Có ai biết keypad ADC tư vấn cho mình nhe.
Xin cảm ơn.
Google một cái là có ngay mà bạn, chẳng hạn:
http://lancer3.com/ADC%20Keypad.htm

Bạn thử nghĩ xem nếu nhấn hai nút đồng thời thì thế nào nhé.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2009, 11:29 PM   #3
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Trích:
Nguyên văn bởi namqn View Post
Google một cái là có ngay mà bạn, chẳng hạn:
http://lancer3.com/ADC%20Keypad.htm

Bạn thử nghĩ xem nếu nhấn hai nút đồng thời thì thế nào nhé.

Thân,
Cám ơn anh namqn đã đặt 1 câu hỏi làm sáng tỏ vấn đề.
Tiện thể anh có thể cho em xin code của driver keypad 4x4 viết bằng ngắt được không anh?
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2009, 11:41 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tranhuyky View Post
Cám ơn anh namqn đã đặt 1 câu hỏi làm sáng tỏ vấn đề.
Tiện thể anh có thể cho em xin code của driver keypad 4x4 viết bằng ngắt được không anh?
Vì bạn cho biết cách thông thường bạn đã làm được, nên tôi giả thiết bạn đang hỏi cách hiện thực có dùng ADC. Bạn cho biết thêm bạn định viết code bằng hợp ngữ hay ngôn ngữ cấp cao nào, cho PIC cụ thể nào (vì PIC16F và PIC18F có nhiều khác biệt trong xử lý ngắt, mặc dù đều là PIC 8-bit).

Bạn cũng nên tránh hỏi riêng một ai đó trên diễn đàn, vì đâu phải chỉ có một người có thể giúp bạn.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2009, 11:47 PM   #5
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Trích:
Nguyên văn bởi namqn View Post
Vì bạn cho biết cách thông thường bạn đã làm được, nên tôi giả thiết bạn đang hỏi cách hiện thực có dùng ADC. Bạn cho biết thêm bạn định viết code bằng hợp ngữ hay ngôn ngữ cấp cao nào, cho PIC cụ thể nào (vì PIC16F và PIC18F có nhiều khác biệt trong xử lý ngắt, mặc dù đều là PIC 8-bit).

Bạn cũng nên tránh hỏi riêng một ai đó trên diễn đàn, vì đâu phải chỉ có một người có thể giúp bạn.

Thân,
Em đang dùng CCS viết cho PIC18F4550. Ứng dụng của em dùng keypad với LCD kèm theo 1 số giao tiếp khác.
Hiện tại đã dùng được driver thông thường. Nhưng cách này viết menu cho LCD thì không tiện.
Trong khi dùng ngắt thì lại gặp vấn đề không tương thích với các hàm delay của LCD.
Mong nhận được sự chỉ giáo của các đàn anh.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-03-2009, 05:47 PM   #6
thvinh1010
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 3
:
Mình cũng đang học về PIC, viết một ứng dụng đơn giản có sử dụng keypad + tính năng
ngắt. Nhưng vẫn chưa chạy tốt được. Vì lí do gì thì vẫn chưa hiểu được. Mặc
dù không có ngắt thay đổi điện áp bởi nhất nút keypad nhưng mà vẫn vào hàm ngắt.
Anh chị nào có kinh nghiệm, xin chỉ giáo. Cảm ơn.

Thông tin trên mạch như sau:
+ PB0-PB3 là Output, giá trị 0
+ PB4-PB7 là Input, được kéo Pullup lên Vcc
+ Khi nhấn nút thì PB0 -> PB4, or PB1 -> PB5, or PB2 -> PB6, or PB3 -> PB7. Làm cho
tín hiệu ở PB4-PB7 thay đổi từ H->L

==> khi đổ xuống PIC, thấy xuất ra ký tự "C" liên tục :-(. Xin được giúp đỡ.

Code:
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000,crystal)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


#int_rb
void detect_rb_change() {
        putc('c');
}

void main() {

    set_tris_b(0xF0);

    enable_interrupts(INT_RB);
    enable_interrupts(GLOBAL);
   
    ext_int_edge(H_to_L);

    while (TRUE) 
    {
    }
}

thay đổi nội dung bởi: namqn, 04-03-2009 lúc 05:53 PM. Lý do: định dạng code
thvinh1010 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-03-2009, 12:55 AM   #7
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Làm sao bạn biết là nó luôn nhảy vào ngắt ??
Bạn cho hiển thị ký tự " C " lên LCD hay máy tính vậy , Mà sao chương trình không thấy báo bảo khởi tạo LCD
Mình bị một lần : khai báo lệnh " enable_interrupts(INT_RB); " thì không thể nào vào ngắt đươc , sau đó mình thay đổi bằng lệnh :

ENABLE_INTERRUPTS( INT_RB7);
ENABLE_INTERRUPTS( INT_RB6);

Thì chạy bình thường
Trường hợp của bạn có thể do phần cứng , bạn dò lại mạch xem nhé
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-03-2009, 08:17 AM   #8
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Trích:
Nguyên văn bởi picpen View Post
Làm sao bạn biết là nó luôn nhảy vào ngắt ??
Bạn cho hiển thị ký tự " C " lên LCD hay máy tính vậy , Mà sao chương trình không thấy báo bảo khởi tạo LCD
Mình bị một lần : khai báo lệnh " enable_interrupts(INT_RB); " thì không thể nào vào ngắt đươc , sau đó mình thay đổi bằng lệnh :

ENABLE_INTERRUPTS( INT_RB7);
ENABLE_INTERRUPTS( INT_RB6);

Thì chạy bình thường
Trường hợp của bạn có thể do phần cứng , bạn dò lại mạch xem nhé
ủa, làm gì có interrupt INT_RB6, INT_RB7.
Chắc bạn thvinh1010 chưa cho xuất ra LCD chỉ mới xuất ra cổng com thôi.
Mình cũng đang bị vướng chổ ngắt RB cho con 18F4550, chưa biết làm sao hểt
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-03-2009, 01:29 PM   #9
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Trích:
Nguyên văn bởi tranhuyky View Post
ủa, làm gì có interrupt INT_RB6, INT_RB7.
Chắc bạn thvinh1010 chưa cho xuất ra LCD chỉ mới xuất ra cổng com thôi.
Mình cũng đang bị vướng chổ ngắt RB cho con 18F4550, chưa biết làm sao hểt
Không có hay bạn không biết ? Nếu bạn chỉ đọc bản help của CCS thì cả đời cũng chẳng bao giờ nhìn thấy lệnh đó . Vì thằng HELP của CCS còn khá sơ sài
Bạn có thể mở các file .H trong bộ cài ở forder DRIVERS ra tìm hiểu

Chúc may mắn ......
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-03-2009, 01:41 PM   #10
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Trích:
Nguyên văn bởi picpen View Post
Không có hay bạn không biết ? Nếu bạn chỉ đọc bản help của CCS thì cả đời cũng chẳng bao giờ nhìn thấy lệnh đó . Vì thằng HELP của CCS còn khá sơ sài
Bạn có thể mở các file .H trong bộ cài ở forder DRIVERS ra tìm hiểu

Chúc may mắn ......
Thật sự thì mình chưa biết.
Mình đã xem rồi. Các khai báo INT_RB6, INT_RB7 chỉ có trong 1 số file .h thôi.
Riêng con 18F4550 thì không có!!!
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-03-2009, 06:11 PM   #11
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Mình đã điều khiển ngắt RB được rồi, mình gởi source để mọi người cùng tham khảo.
Port B được nối với keypad 4x4. Nếu nhấn 1 nút trên port B thì sẽ xuất 1 ký tự 'c' qua RS232.

Nhưng có 1 chỗ mình chưa hiểu là nếu mình comment khối lệnh IF trong hàm ngắt RB_isr() thì ký tự 'a' được xuất ra liên tục(hàm ngắt xãy ra liên tục).
Có ai giải thích dùm mình được không?


Code:
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000,crystal)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#byte portb = 0xf81
#use fast_io(B)

static int old_b_state;
#int_RB
void RB_isr(void) {
    putc('a');
    if (old_b_state != portb) 
    {
        disable_interrupts(INT_RB);
        putc('c');
        enable_interrupts(INT_RB);
    }
}

void main() {

    port_b_pullups(TRUE);
    output_b(0xf0);
    set_tris_b(0xf0);

    old_b_state = portb;

    enable_interrupts(INT_RB);
    enable_interrupts(global);
   
   while (TRUE) 
   {
   }
}

thay đổi nội dung bởi: tranhuyky, 06-03-2009 lúc 10:02 AM.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:14 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam