簡單的利用AVR上面的ADC功能,便可以做出一個具有震動偵測的系統~
當系統偵測到有震動反應時,LED燈便會點亮並維持200ms後熄滅~
我們所需要的是一個震動感應器,一顆AVR ATmega MCU,再加上電池及一顆LED燈~
我簡單畫了一個電路圖來說明~
當今天MEAS感應到震動,會造成正負兩支針腳有壓差出現~
方便起見我用正級接到AVR的PC4這隻PIN上~
利用AVR的ADC功能去偵測電位差的產生~
當產生電位差時~會發出中斷訊號進入ISR~
在ISR裡~我做了兩件事情~第一件事是去清除interrupt flag~
第二件事情是去設定PD6為low~此時LED就會亮起~
我再另外利用一個Timer去處理LED燈點亮的時間~
最後我只需要一顆電池~便能夠讓MCU以及LED有穩定的供電~
暫存器設置:
ADMUX = 0b11000101
ADCSRA = 0b10101100
ADCSRB = 0b00000000
DIDR0 = 0b00111111
Note:
1. 必須要在開始做conversion前先Enable ADC function, Set ADCSRA |= (1 << ADSC)
2. 在每次中斷時必須去清除Interrupt flag, Set ADCSRA |= (1 << ADIF),如果為Free run模式,即便沒有清除還是會繼續下一次的conversion。
3. 要注意使用的single ended input不能有pull-up,否則都會detect到0x3FF(意即Vref)
4. 所偵測的電位必須介於GND ~ Vref之間
沒有留言:
張貼留言