• 2

(已解決)Arduino 輸入腳一直 HIGH

Arduino UNO 的 MPU 是 ATmega328P,Arduino 的網站是 arduino.cc,裡面資料很多。ATmega328P 內建 14個 DIO,They operate at 5 volts. Each pin can provide or receive 20 mA as recommended operating condition and has an internal pull-up resistor (disconnected by default) of 20-50k ohm. A maximum of 40mA is the value that must not be exceeded on any I/O pin to avoid permanent damage to the microcontroller.

外部 10K歐姆 pull-low 量到 4V,內部 pull-high 量到 2.8V,目前是懷疑這個按鍵開關設計不良,斷不乾淨。今天沒時間試,這兩天會買另外一型開關換過再試。負載不接還是一樣,所以排除負載的干擾。
dummyliu wrote:
Arduino UNO...(恕刪)


http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf

DATA SHEET下面有範例
read i/o有2種 ,在data sheet page98
[ASM] IN R0,PORTB.....是讀到RRx(3-state)的資料..當為輸出時可以回讀輸出的資料
[C] i = PORTB

[ASM] IN R0,PINB......是讀到RPx(3-state)的資料..若為輸入就必須用該指令來讀取
[C] i = PINB

可能都讀到 "PORTB", 應該是 "PINB"
read按鍵,是否程式有做debounce,否則瞬間會有H,L問題

設定使用內部 pull-high電阻,移除自加pull-low電阻
按鍵一腳接ic pin,另一腳接GND
沒按時讀到是H,當有按下會讀到L
Google "arduino 消除彈跳",看看是否可以解決您的問題?
有做 debounce,一開始 50ms,有問題以後加到 100ms。和 bounce 應該無關,因為不是按一下跳好幾下,是按了沒反應,因為讀到的一直是 HIGH,只不過沒按時量到是 4V,按下去量到 5V,但是對 MPU 來說,他始終讀到的是 HIGH,認為你按鍵一直按著沒放,因此不會觸發處理程序。

audi58 wrote:
read i/o有2種 ,在data sheet page98...(恕刪)


用 Arduino IDE 開發環境寫程式,使用的是類 C語言,不是 Assembler,不知道他實際用的是 PortB 還是 PinB。不過以 Arduino 這麼廣泛應用,這麼成熟的產品,應該不會用錯。

有做 debounce,一開始 50ms 後來加到 100ms。

試過取消外部 pull-low,改內部 pill-high,變成一直讀到 LOW。反正一直和我作對就對了。
問題已解決。謝謝所有關心提供意見的朋友。

My bad,問題就是在那顆不良的按鍵開關,換過按鍵其實就好了。為什麼後來又跑出插曲說跑半天又不良了呢?因為我程式有 debug版和正式運行版,兩個都一樣,只是 debug版多很多顯示程式進度和變數值的指令。但是在一陣亂試的時候,debug版曾經把輸入由 10腳改到 0腳,正式版沒改,然後自己忘記了。 debug版跑了半天一切正常,就換回正式版,然後忘記把硬體跳回來 10腳。就自己嚇自己說毛病又回來了,按鍵又沒反應了。屁話,輸入在 0腳,你一直去讀 10腳怎麼會有反應, 所以說人,是笨死的。
arduino超新手,看到這篇文忍不住要回應一下,
第一次買arduino,一直連不上pc,明明電源燈有亮,就是無法找到新硬體,
換了3台電腦、3種作業系統,還把卡寄回去給賣家測試,賣家說卡是好的。
最後向朋友借了一條usb線,就好了,就好了。折騰了1個星期。

dummyliu wrote:
問題已解決。謝謝所...(恕刪)

jasonMobile wrote:
arduino超新...(恕刪)


對,抓蟲(debug) 是困難的,需要經驗,技術,邏輯力,還需要一點運氣,但是一旦抓到了,那個成就感和爽度可以嗨整天。今天又抓了一隻蟲,爽啊!話說我家的洗衣機自買來的第一天就壞了,換主機板以後雖然好了,但是一年以後一天又壞了。這次壞了以後就不得了,壞不停。幾乎叫來修以後可以洗一次,下次再洗一定不動。我老婆受不了了向我求救,我就在服務站的人來時,在旁邊從頭到尾邊看邊問。每次出現的故障代碼都是一樣的,了解到那個故障代碼代表的是馬達異常。維修技術員說馬達沒問題,他把馬達感知器從感知器到線組到端子整個換了一遍,甚至端子剪掉直接焊死,還是一下好一下壞。他說他實在想不到還有什麼可能,現在只剩換主機板了,要五千多,換不換?老婆說她投降了,想不修買新的,不買這牌子了,但是那要一兩萬。我了解了下,判斷主機板有問題機會不大,應該還是感知器的問題,就問一個新感知器多少錢?三百多。就決定買個感知器自己試試看,不行再買新機,用三百賭一兩萬。新感知器買來,花了半天功夫,放倒機器,拆掉下盤,在狹小的空間裡摸索,總算把感知器弄出來,因為焊死了,要動烙鐵解焊。剛要解焊,一條線摸著就掉了,心裡立刻大喊“賓果”,就是你。反正已經拆到這個地步,還是繼續把新的感知器焊上去,一切還原後開機,正常了。看看換下來的感知器,那根掉線的腳上面幾乎沒有吃到錫。經驗 get:不要以為都焊死了問題就不在這。花三百贏一兩萬,可以至少嗨兩天吧我想。

下面是感知器解焊以前拍的照,出問題是紅色那條線,外觀是一下看不出有問題的。


  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?