PIC Vietnam

Go Back   PIC Vietnam > Các Đề Tài > Các dự án mã nguồn mở

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

Các dự án mã nguồn mở Nếu bạn không mở mã nguồn, ít nhất là một phần nào đó trong dự án của bạn, xin đừng vào đây.

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 24-07-2009, 11:21 PM   #1
kimhuynguyen
Đệ tử 3 túi
 
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: Vietnam
Bài gửi: 48
:
MTouch PCB

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.
Hình Kèm Theo
File Type: png mtouch727-top.png (9.1 KB, 475 lần tải)
File Type: png mtouch727-bottom.png (7.5 KB, 396 lần tải)
File Kèm Theo
File Type: zip mtouch727.zip (8.8 KB, 1315 lần tải)
__________________
More friends more foods
kimhuynguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2009, 03:19 AM   #2
ptt3i
Đệ tử 1 túi
 
Tham gia ngày: Mar 2009
Bài gửi: 12
:
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.
__________________
Bài viết hữu ích với bạn thì nhấn thanks nhé.
ptt3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2009, 12:02 PM   #3
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Ủng hộ kimhuynguyen mình POST code viết bằng CCS C cho mạch của bạn

CODE CCS C
Code:
/*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;
    }
    
}
File Kèm Theo
File Type: zip mTouch.zip (1.8 KB, 729 lần tải)

thay đổi nội dung bởi: phamminhtuan, 27-07-2009 lúc 11:50 AM. Lý do: Bổ sung thông tin
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-03-2014, 01:31 AM   #4
tunglee091
Nhập môn đệ tử
 
Tham gia ngày: Mar 2012
Bài gửi: 3
:
Trích:
Nguyên văn bởi phamminhtuan View Post
Ủng hộ kimhuynguyen mình POST code viết bằng CCS C cho mạch của bạn

CODE CCS C
Code:
/*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?
tunglee091 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2009, 12:17 PM   #5
quyenbn87
Nhập môn đệ tử
 
Tham gia ngày: Jun 2009
Bài gửi: 1
:
thanks.bạn nhé.nhưng bạ có thể nói rõ hơn 1 chút đc không bạn ???
quyenbn87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2009, 01:16 PM   #6
kimhuynguyen
Đệ tử 3 túi
 
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: Vietnam
Bài gửi: 48
:
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.
__________________
More friends more foods
kimhuynguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-07-2009, 10:09 AM   #7
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Trích:
Nguyên văn bởi kimhuynguyen View Post
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 .
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
CODE HT-PIC C
Code:
/*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;
    }
    
}
File Kèm Theo
File Type: zip mTouch-htc.zip (1.5 KB, 354 lần tải)

thay đổi nội dung bởi: phamminhtuan, 27-07-2009 lúc 11:50 AM.
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-07-2009, 12:35 PM   #8
linhnc308
Đệ tử 5 túi
 
Tham gia ngày: Oct 2005
Bài gửi: 117
:
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ọ.
__________________
CallerID, Ethernet-RS232, PICWEB, Cảnh báo BTS
Giải pháp toàn diện giám sát - điều khiển từ xa qua GSM/Internet
0988006696

http://linhnc308.blogspot.com
linhnc308@gmail.com
linhnc308 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 09:47 AM   #9
zen1403
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 2
:
Mua 16F727

Ứ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!
zen1403 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 09:54 AM   #10
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Trích:
Nguyên văn bởi zen1403 View Post
Ứ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.
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2009, 10:56 AM   #11
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Trích:
Nguyên văn bởi tungnh View Post
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
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-10-2009, 10:36 AM   #12
zen1403
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 2
:
Thanks!

Trích:
Nguyên văn bởi phamminhtuan View Post
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?
zen1403 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-11-2012, 12:01 AM   #13
chikichita
Nhập môn đệ tử
 
Tham gia ngày: Nov 2012
Bài gửi: 1
:
tme.vn giá 1 con 42k
http://www.tme.vn/Search.aspx?keyword=pic16f727
Trích:
Nguyên văn bởi zen1403 View Post
Ứ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!
chikichita vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-12-2009, 10:49 PM   #14
picthanh
Đệ tử 2 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 44
:
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
__________________
VÔ DANH !!!
picthanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-01-2010, 05:56 PM   #15
minhkha216
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 1
:
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é .
minhkha216 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
16f727, mtouch


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à 04:51 AM.


Đượ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