:::

論壇索引


Board index » All Posts (IOP14759)




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


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

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

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

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

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

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

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

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

發表於: 2025/3/24 11:26
頂部


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


補上附檔

Attach file:



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

發表於: 2025/3/21 8:53
頂部


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


我改用單獨判斷一個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就能完結了

發表於: 2025/3/20 16:04
頂部


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


參照:

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


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

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

發表於: 2025/3/19 15:23
頂部


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


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

發表於: 2025/3/14 16:14
頂部


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


我平時用到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

發表於: 2025/3/12 13:40
頂部


Re: 25LC256的WREN功能請教
#7
初級會員
初級會員


我改用
0x05+8CLK
0x06
0x05+8CLK
0x02+address+DATA
0x05+8CLK

我發現Write Enable Latch (WEL)在0x06之後等於1
在0x02+address+DATA之後等於0
所以每次寫入DATA前必須下一次0x06
有什麼辦法可以只下一次就好嗎?
因為我每次寫入4個DATA,我要多下好幾次0x06,寫入的時間就變很長

發表於: 2023/7/12 15:27
頂部


25LC256的WREN功能請教
#8
初級會員
初級會員


我目前使用25LC256
我的WP和HOLD都是接上拉電阻到VCC沒使用

然後我嘗試寫入資料讀取資料時發現

如果我是(空一行代表CE回到high)
0x06
0x02+0x0000+4筆DATA
0x02+0x0004+4筆DATA
0x02+0x0008+4筆DATA
0x02+0x000C+4筆DATA
這樣寫資料再去讀發現,只有address0x0000~0x0003能寫入,後面0x0004~0x000F都沒有寫進去

我必須改成(空一行代表CE回到high)
0x06
0x02+0x0000+4筆DATA
0x06
0x02+0x0004+4筆DATA
0x06
0x02+0x0008+4筆DATA
0x06
0x02+0x000C+4筆DATA
每次寫DATA錢我都送一次Write Enable的指令才能正常的全部寫入

但是我中間明明都沒有下達Write Disable的指令,為什麼會這樣?

還是我搞錯SPEC的意思了?本來就應該用後面那種寫法?

發表於: 2023/7/12 14:17
頂部


Re: PIC16F877A,為什麼用For迴圈會出現問題?
#9
初級會員
初級會員


我想要請教的是,為什麼RC1在輸出時固定在1.1mS會有延遲

是硬體架構還是編譯器導致的?

發表於: 2023/3/15 17:06
頂部


Re: PIC16F877A,為什麼用For迴圈會出現問題?
#10
初級會員
初級會員


補充一下,已知error時間點是在1mS左右,加一段2mS的Delay

原本的DATA會有error,但是現在避開出現error的時間點就正常了

所以可以證明這一個現象是跟著時間走,跟程式沒有任何關係

https://imgur.com/LA1bRLQ

發表於: 2023/3/10 17:21

Edited by IOP14759 on 2023年03月10日 17:59:20
Edited by IOP14759 on 2023年03月10日 18:00:25
頂部



(1) 2 3 »



:::

Microchip連結

https://www.linkedin.com/company/microchiptechnologytaiwan
https://www.facebook.com/microchiptechnologytaiwan/?locale=zh_TW
https://mkpage.microchip.com/l/1082123/2025-03-12/2stnv5
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
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... ]

教育訓練中心

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