PDA

View Full Version : MTouch PCB


kimhuynguyen
24-07-2009, 11:21 PM
Xin khai trương box này bằng một layout MTouch vẽ bằng Eagle, sử dụng 16F727.

Chỉ làm chức năng MTouch, kết nối với thiết bị khác thông qua UART.

ptt3i
25-07-2009, 03:19 AM
Bạn kimhuynguyen có thể nói rõ hơn một chút chút không?
Thực sự thì ptt3i không hiểu rõ lắm về nội dung và mục đích của post của bạn lắm.

Nếu bạn cảm thấy không phiền thì có thể giải thích ý tưởng của bạn rõ rõ hơn một chút được không?

Xin cám ơn bạn rất nhiều.

phamminhtuan
25-07-2009, 12:02 PM
Ủng hộ kimhuynguyen mình POST code viết bằng CCS C cho mạch của bạn

CODE CCS C

/*Author
R&P Forwarding - Trading Co., Ltd.
58/48 Nguyen Minh Hoang, Ward 12, Tan Binh District, HCMC, Viet Nam.
http://dientu.rpc.vn

*/
#include<16f727.h>
#fuses HS, NOWDT, MCLR
#use delay(clock=20Mhz)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)

#byte ANSELA = 0x185
#byte ANSELB = 0x186
#byte ANSELD = 0x188
#byte ANSELE = 0x189

#byte PORTA = 0x5
#byte PORTB = 0x6
#byte PORTC = 0x7
#byte PORTD = 0x8
#byte PORTE = 0x9

#byte TRISA = 0x85
#byte TRISB = 0x86
#byte TRISC = 0x87
#byte TRISD = 0x88
#byte TRISE = 0x89



#byte T2CON = 0x012 // T2ON, prescale = 1:16
#byte T1CON = 0x010 // Timer1 enable, source= capacity sensing, 1:1 prescale, don't sync with sys clock
#byte T1GCON = 0x08F // T1GSS = Timer 2, toggle mode
#byte PR2 = 0x092
#byte OSCTUNE = 0x091
#byte OSCCON = 0x090

#byte CPSCON0 = 0x108 // control settings
#byte CPSCON1 = 0x109 // init to channel select = 0 (4 LSb's)


#bit TMR1GIF = 0x0C.7 // clear gate intpt flag
#bit TMR1GIE = 0x8C.7 // enable gate intpt
#bit PEIE = 0x8B.6 // enable peripheral intpts
#bit TMR2IF = 0x0C.1
#bit TMR2IE = 0x8C.1
#bit GIE = 0x8B.7
#bit TMR1ON = 0x10.0

#bit LED1_MUX = PORTA.0
#bit LED2_MUX = PORTA.1
#bit LED3_MUX = PORTA.2
#bit LED4_MUX = PORTA.3
#bit LED5_MUX = PORTB.6
#bit LED6_MUX = PORTB.7
#bit LED7_MUX = PORTC.0
#bit LED8_MUX = PORTE.2

#bit TRIS_LED1 = TRISA.0
#bit TRIS_LED2 = TRISA.1
#bit TRIS_LED3 = TRISA.2
#bit TRIS_LED4 = TRISA.3
#bit TRIS_LED5 = TRISB.6
#bit TRIS_LED6 = TRISB.7
#bit TRIS_LED7 = TRISC.0
#bit TRIS_LED8 = TRISE.2




#define BOUNCE_TIME 2
unsigned char index;
unsigned long reading[16]; // current reading for each button
unsigned long average[16]; // running average for each button
unsigned long threshold; // threshold value is req'd # counts decrease from avg
unsigned long bigval; // current button bigval - for averaging technique
unsigned long smallavg; // current button smallavg - for averaging technique


typedef struct{
struct {
unsigned char bounce;
}BYTES;
struct {
unsigned char isPress:1;
unsigned char flagPress:1;
unsigned char isRelease:1;
unsigned char unused:5;
}FLAG;
} BUTTON;

BUTTON BTN[16];



void init();
void main() {
unsigned char i;
init();


while(1) {
for(i=0; i<16; i++) {
//button i is Pressed
if(BTN[i].FLAG.isPress) {


//Your code here when BTN[i] Pressed

//Must Clear when BTN Press Processed
BTN[i].FLAG.isPress = 0;

//button i is Released
}else if(BTN[i].FLAG.isRelease) {

//Your code here when BTN[i] Release

//Must Clear when BTN Release Processed
BTN[i].FLAG.isRelease = 0;
}

//end for
}

}
}

void init() {
char i;
//setup_oscillator(OSC_8MHZ);
for (index=0; index<16; index++){
average[index] = 0;
reading[index] = 0;
}
ANSELA = 0b00110000;
TRISA = 0b11111111;

ANSELB = 0b00111111;
TRISB = 0b11111111;

ANSELD = 0b11111111;
TRISD = 0b11111111;
TRISC = 0b11111111;

ANSELE = 0b00000000;
TRISE = 0b00000000;

T2CON = 0b011110111; // T2ON, prescale = 1:16
T1CON = 0b11000101; // Timer1 enable, source= capacity sensing, 1:1 prescale, don't sync with sys clock
T1GCON = 0b11100010; // T1GSS = Timer 2, toggle mode
PR2 = 0xB4;

CPSCON0 = 0b10001100; // control settings
CPSCON1 = 0x01; // init to channel select = 0 (4 LSb's)
index = 0;

TMR1GIF = 0; // clear gate intpt flag
TMR1GIE = 1; // enable gate intpt
PEIE = 1; // enable peripheral intpts
TMR2IF = 0;
TMR2IE = 1;
GIE = 1;

for(i=0; i<16; i++) BTN[i] = 0;
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
//enable_interrupts(INT_RTCC);
}

#INT_DEFAULT
void global_isr() {
if (TMR1GIF && TMR1GIE) {
TMR1GIF = 0; // clear intpt flag
TMR1ON = 0; // Timer1 off

bigval = get_timer1();
bigval = bigval * 4;
reading[index] = bigval;
smallavg = average[index] / 4;
threshold = average[index]>>1; // ratiometric threshold from avail above (& combinations)

if (bigval < average[index] - threshold)
{
if(BTN[index].BYTES.bounce < BOUNCE_TIME) BTN[index].BYTES.bounce++;
if(!BTN[index].FLAG.flagPress && BTN[index].BYTES.bounce == BOUNCE_TIME) {
BTN[index].FLAG.isPress = 1;
BTN[index].FLAG.flagPress = 1;
}
}
else
{
if(BTN[index].BYTES.bounce > 0) BTN[index].BYTES.bounce--;
if(BTN[index].FLAG.flagPress && BTN[index].BYTES.bounce == 0) {
BTN[index].FLAG.flagPress = 0;
BTN[index].FLAG.isRelease = 1;
}
// Perform average after detection comparison
average[index] += bigval/4 - smallavg;
}
set_timer1(0);
TMR1ON = 1; // Set up for next channel
index ++;
index &= 0x0F;;
CPSCON1 = index;
}else if(TMR2IF) {
TMR2IF = 0;
}

}

quyenbn87
25-07-2009, 12:17 PM
thanks.bạn nhé.nhưng bạ có thể nói rõ hơn 1 chút đc không bạn ???

kimhuynguyen
25-07-2009, 01:16 PM
Cảm ơn phamminhtuan đã ủng hộ về firmware.

Chức năng của mạch này là thay cái Keypad 4x4 (có bán ở Letran hoặc TMe)
Trên mạch có thiết kế Buzzer và Led. Khi chạm tay vào phím buzzer sẽ kêu và đèn sáng cho đến khi bỏ tay ra.

Đồng thời dữ liệu truyền ra UART là 2 byte (16 bit tương ứng với 16 phím-có thể nhấn nhiều phím cùng lúc)

Mong bạn phamminhtuan tiếp tục coding.

phamminhtuan
27-07-2009, 10:09 AM
Cảm ơn phamminhtuan đã ủng hộ về firmware.

Chức năng của mạch này là thay cái Keypad 4x4 (có bán ở Letran hoặc TMe)
Trên mạch có thiết kế Buzzer và Led. Khi chạm tay vào phím buzzer sẽ kêu và đèn sáng cho đến khi bỏ tay ra.

Đồng thời dữ liệu truyền ra UART là 2 byte (16 bit tương ứng với 16 phím-có thể nhấn nhiều phím cùng lúc)

Mong bạn phamminhtuan tiếp tục coding.

Mình nghĩ code như vậy đủ rồi, ai muốn viết thêm cái gì thì tùy người đó thôi, mình Post lên thêm code cho Hi-Tech C, lúc trước mình làm chạy rồi - nhưng phiên code này chưa test, nhưng có thể đảm bảo 99% là sẽ chạy trừ những trường hợp không chạy :D.
Giải thuật Mtouch tham khảo ở App Notes của Microchip nếu không muốn nói là lấy của nó luôn :(


Thiết kế phần cứng: http://ww1.microchip.com/downloads/en/AppNotes/01102a.pdf
Thiết kế phần cứng nhiều nút mTouch: http://ww1.microchip.com/downloads/en/AppNotes/01104A.pdf
Giải thuật phần mềm: http://ww1.microchip.com/downloads/en/AppNotes/01103a.pdf
Một số link khác có ích:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1469 Trong cột "Select an Application" chọn "Touch Sensing (mTouch™)"

CODE HT-PIC C

/*Author
R&P Forwarding - Trading Co., Ltd.
58/48 Nguyen Minh Hoang, Ward 12, Tan Binh District, HCMC, Viet Nam.
http://dientu.rpc.vn

Hi-Tech PICC Version 0.10 XTAL 20Mhz

*/
#include<htc.h>

__CONFIG(HS & WDTDIS & UNPROTECT );



#define BOUNCE_TIME 2
unsigned char index;
unsigned long reading[16]; // current reading for each button
unsigned long average[16]; // running average for each button
unsigned long threshold; // threshold value is req'd # counts decrease from avg
unsigned long bigval; // current button bigval - for averaging technique
unsigned long smallavg; // current button smallavg - for averaging technique


typedef union{
unsigned short Val;
struct {
unsigned char bounce;
struct {
unsigned char isPress:1;
unsigned char flagPress:1;
unsigned char isRelease:1;
unsigned char unused:5;
}FLAG;
}BYTES;

} BUTTON;

BUTTON BTN[16];



void init();
void main() {
unsigned char i;
init();


while(1) {
for(i=0; i<16; i++) {
//button i is Pressed
if(BTN[i].BYTES.FLAG.isPress) {


//Your code here when BTN[i] Pressed

//Must Clear when BTN Press Processed
BTN[i].BYTES.FLAG.isPress = 0;

//button i is Released
}else if(BTN[i].BYTES.FLAG.isRelease) {

//Your code here when BTN[i] Release

//Must Clear when BTN Release Processed
BTN[i].BYTES.FLAG.isRelease = 0;
}

//end for
}

}
}

void init() {
char i;
//setup_oscillator(OSC_8MHZ);
for (index=0; index<16; index++){
average[index] = 0;
reading[index] = 0;
}
ANSELA = 0b00110000;
TRISA = 0b11111111;

ANSELB = 0b00111111;
TRISB = 0b11111111;

ANSELD = 0b11111111;
TRISD = 0b11111111;
TRISC = 0b11111111;

ANSELE = 0b00000000;
TRISE = 0b00000000;

T2CON = 0b011110111; // T2ON, prescale = 1:16
T1CON = 0b11000101; // Timer1 enable, source= capacity sensing, 1:1 prescale, don't sync with sys clock
T1GCON = 0b11100010; // T1GSS = Timer 2, toggle mode
PR2 = 0xB4;

CPSCON0 = 0b10001100; // control settings
CPSCON1 = 0x01; // init to channel select = 0 (4 LSb's)
index = 0;

TMR1GIF = 0; // clear gate intpt flag
TMR1GIE = 1; // enable gate intpt
PEIE = 1; // enable peripheral intpts
TMR2IF = 0;
TMR2IE = 1;
GIE = 1;

for(i=0; i<16; i++) BTN[i].Val = 0;
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
//enable_interrupts(INT_RTCC);
}

void interrupt
global_isr() {
if (TMR1GIF && TMR1GIE) {
TMR1GIF = 0; // clear intpt flag
TMR1ON = 0; // Timer1 off

bigval = (unsigned short)((TMR1H <<8) | TMR1L);
bigval = bigval * 4;
reading[index] = bigval;
smallavg = average[index] / 4;
threshold = average[index]>>1; // ratiometric threshold from avail above (& combinations)

if (bigval < average[index] - threshold)
{
if(BTN[index].BYTES.bounce < BOUNCE_TIME) BTN[index].BYTES.bounce++;
if(!BTN[index].BYTES.FLAG.flagPress && BTN[index].BYTES.bounce == BOUNCE_TIME) {
BTN[index].BYTES.FLAG.isPress = 1;
BTN[index].BYTES.FLAG.flagPress = 1;
}
}
else
{
if(BTN[index].BYTES.bounce > 0) BTN[index].BYTES.bounce--;
if(BTN[index].BYTES.FLAG.flagPress && BTN[index].BYTES.bounce == 0) {
BTN[index].BYTES.FLAG.flagPress = 0;
BTN[index].BYTES.FLAG.isRelease = 1;
}
// Perform average after detection comparison
average[index] += bigval/4 - smallavg;
}
TMR1H = 0;
TMR1L = 0;
TMR1ON = 1; // Set up for next channel
index ++;
index &= 0x0F;;
CPSCON1 = index;
}else if(TMR2IF) {
TMR2IF = 0;
}

}

linhnc308
29-07-2009, 12:35 PM
Mục này là các dự án mã mở. Tôi thấy có rất nhiều bạn tải tài liệu về rồi nhưng phần cảm ơn sao ít quá. Diễn đàn có nút cảm ơn không phải chỉ để cho vui mắt đâu các bạn ạ. Người ta đã bỏ công ra làm và đưa lên không vì lợi ích cá nhân thì chúng ta hay biết cảm ơn họ.

zen1403
28-10-2009, 09:47 AM
Ứng dụng này hay quá nhưng mình không biết mua 16F727 ở đâu, giá cả như thế nào.
Xin vui lòng chỉ giúp. Cảm ơn!

tungnh
28-10-2009, 09:54 AM
Ứng dụng này hay quá nhưng mình không biết mua 16F727 ở đâu, giá cả như thế nào.
Xin vui lòng chỉ giúp. Cảm ơn!
Mua con Pic16f nào chẳng được hả bạn. về cơ bản chẳng khác nhau là mấy.

phamminhtuan
28-10-2009, 10:56 AM
Mua con Pic16f nào chẳng được hả bạn. về cơ bản chẳng khác nhau là mấy.

Với code trên và yêu cầu với số nút mTouch tới 16 thì phải cần PIC có module CSM (Capacitive Sensing Module) - Một số PIC16F khác có 2 module Comparator và 1 module S/R Latch chỉ hỗ trợ được tới 4 nút mTouch (không mux) thôi và cách viết chương trình có khác một chút

zen1403
30-10-2009, 10:36 AM
Với code trên và yêu cầu với số nút mTouch tới 16 thì phải cần PIC có module CSM (Capacitive Sensing Module) - Một số PIC16F khác có 2 module Comparator và 1 module S/R Latch chỉ hỗ trợ được tới 4 nút mTouch (không mux) thôi và cách viết chương trình có khác một chút

Cám ơn bạn phamminhtuan.
Cái mình muốn là nhiều nút, nên mới hỏi về thằng 16F727. Mong bạn trả lời thắc mắc.
Tiện thể mình muốn hỏi, có cách gì để quét touch button như mình quét phím trước đây không?

picthanh
27-12-2009, 10:49 PM
mình là thử mạch này rồi, mua con 16f727 (loại dán), về rất hăm hở, cuối cùng nạp ko dc. mình nạp bằng card nạp ICD2, từ lúc đó tới giờ bận quá, hôm nay mới có lụt lại thùng đồ mới phát hiện ra em nó, liền chạy lên đây hỏi anh em nạp thế nào chỉ mình với, con này thì nạp bằng những card nạp nào dc. mong bác nào làm qua chỉ dẫn em với

minhkha216
19-01-2010, 05:56 PM
con này bạn có thể nạp bằng mạch nạp Pkit , chỉ cần nạp wa hai đường tính hiệu ở hai chân.Chân số mấy lâu quá mình cũng ko nhớ , xem datadheet đi nhé .

rhinoceros
10-02-2010, 10:24 AM
hic.giờ sử dụng M-touch cũng có nhiều cái hay.
không biết những dòng Pic có trang bị M-touch thì có đặc điểm gì để nhận hay không.

em cũng sưu tầm đc cái code này,mang cho mọi người tham khảo .

#include <pic10f20x.h>
#define led GP1 //chan out, khi cham vao nut thi out=0 (led sang), nguoc lai khi khong cham, out=1 (led tat)
//Chuong trinh viet cho MCU PIC10F206

void delay_ms(unsigned int n)
{
unsigned int n1;
while(n!=0)
{
n1=120;
while(n1!=0)
{
n1--;
}
n--;
}
}
void delay_us(unsigned int n)
{
while(n!=0)
{
n--;
}
}

void ConfigIO()
{
//cau hinh cac chan la IO
TRISGPIO=0;
COUTEN=1;
CMPON=0;//comparation disable
CWU=1;

OPTION=0xc0;
FOSC4=0;//GP2/T0CKI/COUT applied to GP2
}





void main()
{

ConfigIO();

//CMCON0 Register:CMPOUT | COUTEN | POL | CMPT0CS | CMPON | CNREF | CPREF |CWU
/*
bit 7 CMPOUT: Comparator Output bit
1 = VIN+ > VIN-
0 = VIN+ < VINbit
bit 6 COUTEN: Comparator Output Enable bit(1, 2)
1 = Output of comparator is NOT placed on the COUT pin
0 = Output of comparator is placed in the COUT pin
bit 5 POL: Comparator Output Polarity bit(2)
1 = Output of comparator not inverted
0 = Output of comparator inverted
bit 4 CMPT0CS: Comparator TMR0 Clock Source bit(2)
1 = TMR0 clock source selected by T0CS control bit
0 = Comparator output used as TMR0 clock source
bit 3 CMPON: Comparator Enable bit
1 = Comparator is on
0 = Comparator is off
bit 2 CNREF: Comparator Negative Reference Select bit(2)
1 = CIN- pin(3)
0 = Internal voltage reference
bit 1 CPREF: Comparator Positive Reference Select bit(2)
1 = CIN+ pin(3)
0 = CIN- pin(3)
bit 0 CWU: Comparator Wake-up on Change Enable bit(2)
1 = Wake-up on comparator change is disabled
0 = Wake-up on comparator change is enabled.
*/
COUTEN=0;//Output of comparator is placed in the COUT pin
POL=0;//Output of comparator inverted
CMPT0CS=1;//Comparator output used as TMR0 clock source
CMPON=1;//Comparator is on
CNREF=0;//Internal voltage reference
CPREF=1;//CIN+ pin


//OPTION Register:GPWU | GPPU | T0CS | T0SE | PSA | PS2 | PS1 |PS0
/*
bit 7 GPWU: Enable Wake-up on Pin Change bit (GP0, GP1, GP3)
1 = Disabled
0 = Enabled
bit 6 GPPU: Enable Weak Pull-ups bit (GP0, GP1, GP3)
1 = Disabled
0 = Enabled
bit 5 T0CS: Timer0 Clock Source Select bit
1 = Transition on T0CKI pin (overrides TRIS on the T0CKI pin)
0 = Transition on internal instruction cycle clock, FOSC/4
bit 4 T0SE: Timer0 Source Edge Select bit
1 = Increment on high-to-low transition on the T0CKI pin
0 = Increment on low-to-high transition on the T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler assigned to the WDT
0 = Prescaler assigned to Timer0
bit 2-0 PS<2:0>: Prescaler Rate Select bits
*/
OPTION=0b11100000;
TRIS=0B00000000;
led=0;
delay_ms(100);
led=1;
delay_ms(100);
led=0;
delay_ms(100);
led=1;
delay_ms(100);
// while(1)
// {
// led=0;
// delay_ms(500);
// led=1;
// delay_ms(500);
//
// }

while(1)
{
TMR0=0;//reset timer 0
delay_us(100);//cho de counter
if(TMR0<120)//tang gia tri nay de tang do nhay(170 la gia tri khong cach dien)
{
led=0;//nhan
}
else
{
led=1;//khong nhan
}
delay_ms(1);

}

}

falleaf
10-02-2010, 01:46 PM
www.microchip.com/mtouch

Chúc vui

yoyang
06-10-2010, 03:27 PM
em cũng đang tìm hiểu về M Touch mà không biết tìm tài liệu hoặc 1 vài ứng dụng tham khảo, bác nào có thì share cho em nha, cám ơn nhiều, tiếng việt càng tốt, yahoo của em nè notified2000@yahoo.com

nguyendinhtuan
03-12-2010, 05:01 PM
Không biết có nơi nào bán sản phẩm bàn phím cảm ứng chua nhỉ. ở thị trường việt nam ấy. nếu ai biết vui lòng giới thiệu giúp.

dinhminh09
03-12-2010, 05:48 PM
sao bạn không là một cái. mình cũng làm cái này rồi nhưng không hiểu cho lắm nhưng nếu đi mua hình như chỉ có cảm biến điện trở thôi chứ không có cảm biến điện dung hay cảm biến từ.
http://www.picvietnam.com/forum/showthread.php?t=6987

nói chung cũng không khó lắm mạch thì đi đặt chỉ có cái hơi mắc. và vấn đề hàng con pic dán nữa.
theo mình biết thì 16f877a không tích hợp modul cảm ứng chỉ có modul compare thôi

nói chung thăng nào có modul capsensing thì có thể chế tạo cảm ứng theo điện dung được. con nếu dung modul compare thì chỉ dùng được cảm ứng điện trở thôi.

nguyendinhtuan
06-12-2010, 04:26 PM
727 có loại chíp chân xuyên. mình đã làm kết hợp giữa 16F727 với 18F4550 để giao tiếp với Graphic LCD 128x64. giao tiếp với máy tính qua cổng USB và nhiều tính năng khác. nó như 1 keyboard có màn hình hiển thị nhưng mình không biết trên thị trường việt nam có chưa. xem nó có rẻ hơn so với mình làm hay không. xem nó có tốt hơn không để tính sản xuất ấy mà. cảm ơn bạn nhé.

atbepxinh
10-12-2010, 10:47 AM
Cảm ơn các bạn mình cũng đang tìm hiểu về MTouch, nhưng tài liệu thì ít nên cần mọi người chia sẻ nhiều hơn.
Cảm ơn

kakalevanhoi
04-09-2011, 01:20 AM
có ai đã từng làm keymatriax dùng CVD(capacitive voltage divider) không?khoảng 12 phím trở lên ?có kinh nghiệm share cho mình với.thanks

bravesoldier
02-07-2012, 04:23 AM
Có ai làm m-touch dùng PIC12F675 không, em đang định làm mà rối quá!!!

bravesoldier
06-08-2012, 05:41 PM
tìm được cái này
http://www.radikaldesig.com/2008/09/29/sensor-capacitivo-mtouch/#comment-507
và đây nữa
http://pcbheaven.com/circuitpages/PIC_Frequency_Change_Touch_Button/
hết sức cơ bản
và matrix với CVD
http://www.pic24.ru/doku.php/en/osa/articles/pk2_osa_piano

chikichita
29-11-2012, 12:01 AM
tme.vn giá 1 con 42k
http://www.tme.vn/Search.aspx?keyword=pic16f727
Ứng dụng này hay quá nhưng mình không biết mua 16F727 ở đâu, giá cả như thế nào.
Xin vui lòng chỉ giúp. Cảm ơn!

unisa
06-01-2013, 10:44 PM
IC xuyên chân là sao mình ko hiểu nhỉ ???
Mình đã làm mtouch thành công, cả loại CVD dùng 16F887 (rất cùi mía, tuy chạy được nhưng ko thấy ổn định, xài 1 nút thì được) và loại dùng Module mtouch có sẵn của 16F723 (con này quá rẽ, có sẵn 8 bộ mtouch tha hồ làm ứng dụng)
Tuy nhiên, mình muốn hỏi 1 chi tiết, khi mình set THRESHOLD = 4 cho nó thật nhạy (vì lớp vỏ hộp của mình hơi dày) thì chạy ok, tuy nhiên dây dẫn từ bản phím đến 16F723 cũng chính vì vậy mà quá nhạy, ko cần phải chạm vào điểm đồng, chỉ cần tay để gần dây dẫn là nó đã nhận được rồi. Không biết các bác dùng dây gì dẫn tín hiểu từ pad đồng đến PIC nhỉ ? (dùng dây bọc giáp có hạn chế được không ?)

spk_lionking
17-01-2013, 10:42 PM
mình mới học pic nên còn gà lắm, mình đang tính làm cái máy tính bỏ túi xài pic16f727 sử dụng sensor touch. Nhưng giờ hok biết ý tưởng coding làm sao từ code hitech-c của anh phamminhtuan, mong các bạn giúp đỡ

caddish12
04-01-2014, 04:01 PM
Luồng này khá hay, nên tiếp tục!

toiladuy
15-03-2014, 04:04 PM
mình theo dõi và làm theo hướng dẫn của Topic trên , mình thấy 1 s61 điểm như sau :
các dòng PIC16f72x đều có các capacitive senor module (CPS) và chỉ khác nhau ở số chân CPS mà Microchip tích hợp cho các con chip .
Nếu muốn tìm hiểu thì đúng như trên phần đầu Topic đã nói tới , cần đọc kĩ Datasheet của dòng PIC16F72 - trong đó chủ yếu là các Timer và module CPS , và các tài liệu AN1101 nói về tổng quát Mtouch cũng như các khái niệm , AN1103 sẽ nói về phần giải thuật xác nhận có tay người nhấn còn AN1171 thì nói về cách thiết lập các bit như thế nào cho đúng.
Về code thì đúng là chạy nếu làm theo phần code mà anh phamminhtuan đã hướng dẫn , chú ý đọc kỹ , code đó cho phép chúng ta viết thêm các đoạn tương tứng với nút nhấn được nhấn hay nhả ra
Về việc mua con chip 16f727 (40 chân ) thì mình có tìm trên TME hay RPC nhưng họ nói không còn bán , cuối cùng chuyển sang mua con khác là 16f723 ( 28 chân ) hoặc các bạn cũng có thể tìm con chip 16f72x khác thay thế .

tunglee091
26-03-2014, 01:31 AM
Ủng hộ kimhuynguyen mình POST code viết bằng CCS C cho mạch của bạn

CODE CCS C

/*Author
R&P Forwarding - Trading Co., Ltd.
58/48 Nguyen Minh Hoang, Ward 12, Tan Binh District, HCMC, Viet Nam.
http://dientu.rpc.vn

*/
#include<16f727.h>
#fuses HS, NOWDT, MCLR
#use delay(clock=20Mhz)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)



Mình dùng code này của bạn thì thấy chạy ngon lành.
Nhưng có 1 vấn đề là phải chạm tay vào miếng đồng thì mới nhận được, còn nếu đệm bằng thêm thứ gì đó thì không nhận nữa .
Vậy cho mình hỏi phải sửa thông số nào trong đoạn code trên để có thể nhận được chạm khi có đêm thêm 1 thứ gì đó vậy?

toiladuy
03-10-2016, 03:49 PM
Lâu quá quay lại đây, muốn add thêm các tài liệu về đề tài 1 thời mình từng quay cuồng để làm khi tốt nghiệp, để cho những ai sau này muốn làm tiếp có cái để xem, các tài liệu này chỉ có tính tham khảo, quá trình đọc các bạn có thể phát hiện chỗ sai sót thì hiệu chỉnh lại cho đúng.

Về bản mạch thì các bạn có thể tham khảo nhiều hình vẽ trên mạng, bản của mình chỉ làm loại cơ bản nhất mà thôi