• slider image 532
  • slider image 533
  • slider image 538
  • slider image 539
  • slider image 540
  • slider image 541
  • slider image 542
:::


Browsing this Thread:   1 Anonymous Users






Re: PIC16F877的RB6作為按鍵輸入無法使用
#9
版主
版主


查看用戶資訊
建議您移除在每個按鍵旁的電容,或者在該電容串個電阻 (如1k),以消除在按鍵時因電容被瞬間短路時產生的大電流。如附圖。
上述的這個大電流,除了產生很大的雜訊以外,還有可能因為按鍵的彈跳,使該電流在按鍵彈開那一瞬間,因電流無處流而流向PIC腳,造成無法預期的結果。不要問說為何只有RB6這樣,反正不正當使用PIC,結果就是不可預期。
我看到您說RB6串電阻就正常,才確認應該是這個問題。

很常看到大家喜歡在按鍵旁並電容以消除彈跳或雜訊,但是,依以上論述,只加電容是不好的!不然的話,您用原本線路,把0.1uF改成1uF甚至10uF試看看:可能連其它的腳都會不正常。甚至,PIC腳可能會被打壞!

最省材料成本,也應該是最正確的做法應該是:
1、移除按鍵的並聯電容。
2、在程式進入中斷時,多檢查幾次腳位的狀態,以達到debounce的效果。

Attach file:



jpg  Forum.jpg (22.33 KB)
11_67f48719ebdcd.jpg 206X336 px

發表於: 4/8 10:17
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#8
初級會員
初級會員


查看用戶資訊
我試完了,一樣沒用,因為RB6的問題感覺是硬體問題

以下是我周五與今天早上進行的測試

1.原本的電路按RB6連中斷都不會進入

2.RB6改接函數波產生器,用1Hz頻率方波模擬按鍵,中斷正常動作

3.根據1&2,我們推測試RB6這隻腳做輸入時對bounce特別敏感

4.在RB6與按鍵間串一個1K歐姆,按RB6正常動作

5.拿掉1K歐姆根據您的程式,一樣不會進入到中斷

但就是只有RB6會有這問題,PORTB其他腳都很正常

發表於: 3/24 11:26
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#7
管理員
管理員


查看用戶資訊
IOP14759 你好
有可能是進入中斷和判斷Input狀態的時序問題,可以嘗試參考以下程式碼來測試RB6
...
volatile unsigned char INT_flag 0;
volatile unsigned char key_mode 0;
...
void main(void) {
...
    
    while(
1){
        if(
INT_flag){
            
__delay_ms(10); //避免中斷發生時PORT暫存器狀態尚未改變
            
if(RB6){ //僅判斷單一Bit,確保不受其他Bit的狀態干擾
                
key_mode=6;
            }
            
            
INT_flag 0;
        }
        
        if(
key_mode == 6){
            
//LED ON 200ms
            
RC6 1;
            
__delay_ms(200);
            
RC6 0;
            
            
key_mode 0;
        }
    }

    return;
}

void __interrupt() ISR(void//依照實際編譯器需求調整
{
    if(
INTF){
        
INTF 0;
        
INT_flag 1;
    }
}

發表於: 3/21 17:18
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#6
初級會員
初級會員


查看用戶資訊
補上附檔

Attach file:



jpg  2121.jpg (51.90 KB)
50091_67dcb86b81d1b.jpg 331X569 px

發表於: 3/21 8:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#5
初級會員
初級會員


查看用戶資訊
我改用單獨判斷一個IO腳的方式沒用,依然只有if(RB6==0)中的程式不動作

懷疑是根本沒進去中斷程式,把程式改成附檔中的樣子

不論我按哪個鍵,RB0都用示波器確認由H=>L,都應該進去中斷

可是只有我按RB6時,RC1的LED沒反應

按RB1/2/3/4/5/7時RC1的LED都會亮,RB0和RB6用示波器也確認H=>L

後來同事叫我把20M的振盪改成11.0592M的,這時候RB6按鍵就正常了

所以看起來跟程式沒有關係是頻率影響的,那我就更困惑了

20M應該是符合SPEC的吧?

我同事是擔心我們用的是殘次品,因為我們都小批量使用,都蝦皮買的

我是覺得應該不至於,20M用了幾年了到目前只有RB6按鍵出問題

所以只要告訴我RB6別用,那我做個文檔提醒10M以上不要用RB6就能完結了

發表於: 3/20 16:04
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#4
初級會員
初級會員


查看用戶資訊
參照:

在判斷PORTB的部分注意到你是同時判斷整個Byte,建議修改程式在判斷時只檢查腳位對應的Bit,避免因為其他狀況造成非預期結果。


1.#pragma config DEBUG = OFF // 將RB6,RB7設為IO腳
我原本就有設定

2.
想知道只檢查腳位對應的Bit這部分的原因是什麼呢?
因為判斷PORTB的初始模塊是我主管寫的
只是我接手後按鍵增加到RB6時明顯感覺有問題
我想推翻這個寫法也要有理由,不然就只能私下避免用RB6

發表於: 3/19 15:23
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#3
管理員
管理員


查看用戶資訊
IOP14759 你好

RB6 和 RB7 在除錯模式下是專用的調試引腳。如果DEBUG被設置為 0,則 RB6 和 RB7 將被用作調試引腳。如果目前是利用除錯模式來測試可能會有影響,建議加入的修改:
#pragma config DEBUG = OFF // 禁用調試模式

另外注意到你目前在中斷的程式碼段落中加入Delay,建議避免在 ISR 中使用延遲,如果需要此功能可以設計移至其他非中斷的段落來執行。

在判斷PORTB的部分注意到你是同時判斷整個Byte,建議修改程式在判斷時只檢查腳位對應的Bit,避免因為其他狀況造成非預期結果。

發表於: 3/19 10:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F877的RB6作為按鍵輸入無法使用
#2
初級會員
初級會員


查看用戶資訊
補充,電源供電5V,相同程式電路試了三顆PIC16F877都會重復發生,如果我測試沒問題應該就是RB6有什麼架構影響,我希望能知道原因,並作記錄告訴自己以後按鍵別用到RB6

發表於: 3/14 16:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


PIC16F877的RB6作為按鍵輸入無法使用
#1
初級會員
初級會員


查看用戶資訊
我平時用到RB6時一直怪怪的,剛剛我用一個電路測試

B PORT當作輸入,把除了RB0的其他7個輸入接一個二極體到RB0

這樣子每隻輸入都能做為中斷,電路圖如附檔
(平時使用時我還有接4.7K上拉,測試為了方便就使用內部上拉)

程式放在文章最後

每個按鍵程式都一樣,但是我發現只要使用RB6作為輸入時MCU都會有BUG

而且很具體的就是只有按下RB6(PORTB =0xBE)時有問題,把RB6(PORTB =0xBE)中的動作放到其他按鍵下依然能正常動作

所以我才把每個按鍵的動作都改的跟RB6(PORTB =0xBE)一樣,但是其他動作就是不會有問題

目前這程式比較簡化,頂多只是按KEY沒反應

我平時使用的程式會出現按完RB6的KEY放開之後,RB6就直接=L不變了
但是我讀了一下TRISB6 確定仍然是輸入,根本不知道這時候MCU卡死到哪邊去了
必須我按MCLR重置後RC6才重新=H

我就有點懷疑是硬體線路問題,我就把電路上的二極體和KETY對調,但問題仍穩定出現在RB6上

可是我看了一下規格書RB4~7的IO接腳都是相同架構,不明白為什麼單單只有RB6有問題

目前解法是不用RB6,多用幾個二極體AND比較,但還是上來問看看


void main()
{
TRISC=0x00;
PORTC=0x00;
TRISB=0xFF;
PORTB=0xFF;
OPTION_REG=0b00111111;
INTCON=0b10010000;//Global Interrupt Enable bit=1,External Interrupt Enable bit=1

key_mode=0;

st:

if(key_mode==6){RC0=1;key_mode=0;RC0=0;}

goto st;
}

void interrupt ISR(void)
{
if(INTF)//external interrupt
{
inputData = PORTB & 0xFF;
INTF=0;

switch (inputData)
{
case 0xFC://cyc_key
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;

case 0xFA://r_key
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;

case 0xF6://g_key
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;

case 0xEE://b_key
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;

case 0xDE://dim_key
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;

case 0xBE://sleep_key
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;

case 0x7E://sleep_key2
if(key_mode==0 || key_mode==6)
{
key_mode=6;
}
break;
}

__delay_ms(200);
}
}

Attach file:



jpg  PIC RB6.jpg (120.49 KB)
50091_67d11d35a647d.jpg 1370X388 px

發表於: 3/12 13:40
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------