![基于atmega88的超聲波測(cè)距儀_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/7896adfd-1b4d-4f56-bc64-43940995a6a8/7896adfd-1b4d-4f56-bc64-43940995a6a81.gif)
![基于atmega88的超聲波測(cè)距儀_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/7896adfd-1b4d-4f56-bc64-43940995a6a8/7896adfd-1b4d-4f56-bc64-43940995a6a82.gif)
![基于atmega88的超聲波測(cè)距儀_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/7896adfd-1b4d-4f56-bc64-43940995a6a8/7896adfd-1b4d-4f56-bc64-43940995a6a83.gif)
![基于atmega88的超聲波測(cè)距儀_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/7896adfd-1b4d-4f56-bc64-43940995a6a8/7896adfd-1b4d-4f56-bc64-43940995a6a84.gif)
![基于atmega88的超聲波測(cè)距儀_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/7896adfd-1b4d-4f56-bc64-43940995a6a8/7896adfd-1b4d-4f56-bc64-43940995a6a85.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于atmega88的超聲波測(cè)距儀作品采用ATMEL公司的ATMGEA88 作為MCU,內(nèi)部有8K FLASH,1kram。工作在內(nèi)部8M RC振蕩下,耗電僅為2MA左右。采用RISC指令集的AVR核心,運(yùn)算速度大大超過(guò)傳統(tǒng)的51單片機(jī)。內(nèi)部帶有3個(gè)定時(shí)器,8路10位AD(模數(shù)轉(zhuǎn)換器),串口,硬件SPI,方便使用。大批量采購(gòu)價(jià)格目前由于炒貨的原因漲價(jià)到12RMB。(具體問(wèn)題可以搜索下,網(wǎng)上吹捧得很多)推薦你看一下中文的PDF,到處都有下載的。采用這塊芯片主要來(lái)說(shuō)就有一點(diǎn),比51先進(jìn),功耗低,內(nèi)帶AD,而且外部不需要加晶振。使用一塊LCD5110手機(jī)屏作為顯示設(shè)備,可以顯示輸出電壓以及當(dāng)前狀態(tài)。
2、液晶屏參數(shù)為72*48,點(diǎn)陣式,使用一個(gè)驅(qū)動(dòng)庫(kù)作為支持,方便開(kāi)發(fā),工作在3.3V電壓下。耗電極低,小于1MA,背光耗電為20MA。屏的資料到使用一片LDO(低壓差線性穩(wěn)壓源)作為系統(tǒng)電源,LM1117-3.3V,輸出電壓為3.3V,最大電流500MA以下為單片機(jī)的復(fù)位電路和燒錄程序用的接口本設(shè)計(jì)中應(yīng)用了MAX232來(lái)放大發(fā)射的40K信號(hào),MAX232本來(lái)是用作串口電源轉(zhuǎn)換器,它的本質(zhì)是一個(gè)電荷泵升壓器,所以可以直接將發(fā)射電壓提高到正負(fù)9伏,使信號(hào)發(fā)射能力大大加強(qiáng)。超聲波發(fā)射頭使用的是普通的壓電式頭,中心頻率都在40KHZ。有R,T之分。由于接受到的信號(hào)比較小,所以使用運(yùn)放將接收后的信號(hào)放大。A
3、D623為ADI公司的軌至軌儀表放大器,單電源優(yōu)化,可以工作在3V的極低電壓。只需要使用一個(gè)電阻就可以改變放大倍率,最大放大倍率為1000,帶寬增益乘積比為1M。功耗極低,可以滿足長(zhǎng)期工作的需要。信號(hào)放大后,將輸入到單片機(jī)的模擬比較器中進(jìn)行比較。當(dāng)信號(hào)輸入幅度大于一定值時(shí),定義為接受到信號(hào)。超聲波發(fā)射后,等待第一次回波經(jīng)過(guò)后,打開(kāi)中斷,就可以等待超聲波信號(hào)的到來(lái)。只要將發(fā)射時(shí)間和接收時(shí)間用定時(shí)器計(jì)時(shí),就可以精確的得出超聲波回聲所用的時(shí)間。然后通過(guò)18B20采集溫度后便可以計(jì)算出當(dāng)前測(cè)距儀與被測(cè)物體的距離經(jīng)過(guò)測(cè)算后,我選擇將AIN1的值確定為2.7V,這樣在接收的回波中,可以通過(guò)延時(shí)去掉。具體可
4、以看波形。如圖中所示,第一個(gè)黑點(diǎn)是我們發(fā)出的信號(hào)的時(shí)候,直接從發(fā)射頭橫向送到接收頭造成的誤差信號(hào)。第二個(gè)黑店是接收信號(hào)的回波。當(dāng)我將觸發(fā)點(diǎn)選擇到2.7V時(shí),延時(shí)0.5MS后,就可以將發(fā)射的第一個(gè)誤差信號(hào)消去,并將中斷打開(kāi),等待第二個(gè)信號(hào)的進(jìn)入。當(dāng)信號(hào)電平高于2.7V后(這個(gè)是一個(gè)正弦波,會(huì)上下波動(dòng)的),模擬比較器將觸發(fā),并通過(guò)AVR內(nèi)部的選通,進(jìn)入定時(shí)器1的輸入捕捉中斷中。只要此時(shí)停下計(jì)時(shí)器,便可以得出信號(hào)發(fā)射到信號(hào)接收的時(shí)間差。造成這種狀況的主要原因?yàn)镻WM發(fā)射和關(guān)斷有延時(shí),而發(fā)射頭本身的電容會(huì)導(dǎo)致發(fā)射繼續(xù)持續(xù)一段時(shí)間軟件流程圖#include <mega88p.h>#inclu
5、de <delay.h>#include "lcd5110.h"unsigned int time,t;unsigned long int juli,c;unsigned char chufa,run,time0,time1,yichu,chaoshi;#define uint unsigned int#define uchar unsigned char/ Pin change 8-14 interrupt service routine#ifndef RXB8#define RXB8 1#endif#ifndef TXB8#define TXB8 0#end
6、if#ifndef UPE#define UPE 2#endif#ifndef DOR#define DOR 3#endif#ifndef FE#define FE 4#endif#ifndef UDRE#define UDRE 5#endif#ifndef RXC#define RXC 7#endif#define FRAMING_ERROR (1<<FE)#define PARITY_ERROR (1<<UPE)#define DATA_OVERRUN (1<<DOR)#define DATA_REGISTER_EMPTY (1<<UDRE)
7、#define RX_COMPLETE (1<<RXC)/ USART Receiver buffer#define RX_BUFFER_SIZE0 8char rx_buffer0RX_BUFFER_SIZE0;#if RX_BUFFER_SIZE0<256unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;#elseunsigned int rx_wr_index0,rx_rd_index0,rx_counter0;#endif/ This flag is set on USART Receiver buffer ove
8、rflowbit rx_buffer_overflow0;/ USART Receiver interrupt service routineinterrupt USART_RXC void usart_rx_isr(void)char status,data;status=UCSR0A;data=UDR0;if (status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN)=0) rx_buffer0rx_wr_index0=data; if (+rx_wr_index0 = RX_BUFFER_SIZE0) rx_wr_index0=
9、0; if (+rx_counter0 = RX_BUFFER_SIZE0) rx_counter0=0; rx_buffer_overflow0=1; ; ;#ifndef _DEBUG_TERMINAL_IO_/ Get a character from the USART Receiver buffer#define _ALTERNATE_GETCHAR_#pragma used+char getchar(void)char data;while (rx_counter0=0);data=rx_buffer0rx_rd_index0;if (+rx_rd_index0 = RX_BUFF
10、ER_SIZE0) rx_rd_index0=0;#asm("cli")-rx_counter0;#asm("sei")return data;#pragma used-#endif/ Standard Input/Output functions#include <stdio.h>/ Timer 0 overflow interrupt service routineinterrupt TIM0_OVF void timer0_ovf_isr(void) #asm("cli")if(chaoshi=10) run=1;
11、chaoshi+; #asm("sei")/ Place your code hereuchar ds1820_reset(void) uchar i; DDRD.4=1; PORTD.4=0; delay_us(500); /*延時(shí)500uS(480-960)*/ PORTD.4=1; DDRD.4=0; delay_us(80); /*延時(shí)80uS*/ i =PIND.4; delay_us(500); /*延時(shí)500uS(保持>480uS)*/ if (i) return 0x00; else return 0x01; uchar ds1820_read_byt
12、e(void) uchar i; uchar value = 0; for (i = 8; i != 0; i-) value >>= 1; DDRD.4=1;PORTD.4=0;PORTD.4=1; DDRD.4=0; if (PIND.4) value|=0x80; delay_us(60); /*延時(shí)60uS*/ return(value); void ds1820_write_byte(uchar value) uchar i; for (i = 8; i != 0; i-) DDRD.4=1;PORTD.4=0; delay_us(4); if (value &
13、0x01) PORTD.4=1; delay_us(80); /*延時(shí)80uS*/ PORTD.4=1; /*位結(jié)束*/ value >>= 1; void ds1820_start(void) ds1820_reset(); ds1820_write_byte(0xCC); /*勿略地址*/ ds1820_write_byte(0x44); /*啟動(dòng)轉(zhuǎn)換*/ unsigned int ds1820_read_temp(void) unsigned int i; uchar buf9; ds1820_reset(); ds1820_write_byte(0xCC); /*勿略地址*
14、/ ds1820_write_byte(0xBE); /*讀取溫度*/ for (i = 0; i < 9; i+) bufi = ds1820_read_byte(); i = buf1; i <<= 8; i |= buf0; i=i*0.625*100; return i; / Timer1 overflow interrupt service routineinterrupt TIM1_OVF void timer1_ovf_isr(void) #asm("cli") yichu+; #asm("sei") / Place yo
15、ur code here/ Timer1 input capture interrupt service routineinterrupt TIM1_CAPT void timer1_capt_isr(void) /定時(shí)器中斷,處理停止計(jì)數(shù)器之后的工作 #asm("cli") TCCR1B=0x00; /停止計(jì)數(shù)器 time1=TCNT1L; time0=TCNT1H; time=time0*256+time1; ds1820_start(); delay_us(210); t=ds1820_read_temp(); /讀取18b20的溫度 LCD_write_6_8str
16、ing(0,0," Temperature "); LCD_write_6_8string(0,1," "); LCD_write_float(24,1,(float)t/1000); c=(unsigned long int)t*607/10000+33150; /計(jì)算聲速 juli=(unsigned long int)time*c/80000/2; LCD_write_6_8string(0,2," Sound speed "); LCD_write_6_8string(0,3," cm "); LCD_wr
17、ite_float(12,3,(float)c/100); LCD_write_6_8string(0,4," Distance "); LCD_write_6_8string(0,5," cm "); LCD_write_float(12,5,(float)juli/100); /LCD_write_number(0,5,time); #asm("sei") / Place your code here / Declare your global variables herevoid main(void)/ Declare your
18、 local variables here/ Crystal Oscillator division factor: 1#pragma optsize-CLKPR=0x80;CLKPR=0x00;#ifdef _OPTIMIZE_SIZE_#pragma optsize+#endif/ Input/Output Ports initialization/ Port B initialization/ Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out / State7=0 State6=
19、0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00;DDRB=0xFF;/ Port C initialization/ Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In / State6=T State5=T State4=T State3=P State2=P State1=T State0=T PORTC=0x0C;DDRC=0x00;/ Port D initialization/ Func7=In Func6=In Func5=
20、In Func4=In Func3=Out Func2=In Func1=In Func0=In / State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T PORTD=0x00;DDRD=0x08;/ Timer/Counter 0 initialization/ Clock source: System Clock/ Clock value: 7.813 kHz/ Mode: Normal top=FFh/ OC0A output: Disconnected/ OC0B output: Disconne
21、ctedTCCR0A=0x00;TCCR0B=0x05;TCNT0=0x00;OCR0A=0x00;OCR0B=0x00;/ Timer/Counter 1 initialization/ Clock source: System Clock/ Clock value: 8000.000 kHz/ Mode: Normal top=FFFFh/ OC1A output: Discon./ OC1B output: Discon./ Noise Canceler: Off/ Input Capture on Rising Edge/ Timer1 Overflow Interrupt: On/
22、Input Capture Interrupt: On/ Compare A Match Interrupt: Off/ Compare B Match Interrupt: OffTCCR1A=0x00;/TCCR1B=0x41;TCCR1B=0X00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;/ Timer/Counter 2 initialization/ Clock source: System Clock/ Clock value: 800
23、0.000 kHz/ Mode: CTC top=OCR2A/ OC2A output: Disconnected/ OC2B output: Toggle on compare matchASSR=0x00;TCCR2A=0x12;TCCR2B=0x00;/TCCR2B=0x01;TCNT2=0x00;OCR2A=0x66;OCR2B=0x00;/*/ External Interrupt(s) initialization/ INT0: Off/ INT1: Off/ Interrupt on any change on pins PCINT0-7: Off/ Interrupt on a
24、ny change on pins PCINT8-14: On/ Interrupt on any change on pins PCINT16-23: OffEICRA=0x00;EIMSK=0x00;PCICR=0x02;PCMSK1=0x0C;PCIFR=0x02;*/ Timer/Counter 0 Interrupt(s) initializationTIMSK0=0x01;/ Timer/Counter 1 Interrupt(s) initializationTIMSK1=0x21;/ Timer/Counter 2 Interrupt(s) initializationTIMSK2=0x00;/ USART initialization/ Communication Parameters: 8 Data, 1 Stop, No Parity/ USART Receiver: On/ USART Transmitter: On/ USART0 Mode: Asyn
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- ERK2-IN-5-生命科學(xué)試劑-MCE-2561
- 二零二五年度文化旅游項(xiàng)目管理費(fèi)合同范本
- 二零二五年度體育賽事表演安全免責(zé)合同
- 施工日志填寫(xiě)樣本建筑物綠化工程
- 小學(xué)數(shù)學(xué)課堂中的情境教學(xué)與興趣培養(yǎng)
- 酒店衛(wèi)生標(biāo)準(zhǔn)與旅客健康保障措施研究
- 個(gè)人土地承包合同示范文本
- 產(chǎn)品分銷(xiāo)區(qū)域合同范本
- SPA會(huì)所年度承包經(jīng)營(yíng)合同
- 個(gè)人財(cái)產(chǎn)保險(xiǎn)合同模板(經(jīng)典)
- 新人教版四年級(jí)下冊(cè)數(shù)學(xué)教材解讀課件
- 《移動(dòng)互聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)》課程標(biāo)準(zhǔn)
- 竣工資料封面
- 膿毒血癥指南
- 中國(guó)航天知識(shí)
- 安徽華納化學(xué)工業(yè)有限公司年產(chǎn)1000噸均苯四甲酸二酐、300噸潤(rùn)滑油助劑項(xiàng)目環(huán)境影響報(bào)告書(shū)
- YY 9706.230-2023醫(yī)用電氣設(shè)備第2-30部分:自動(dòng)無(wú)創(chuàng)血壓計(jì)的基本安全和基本性能專(zhuān)用要求
- 第8課紅樓春趣同步練習(xí)(含答案)
- C139營(yíng)銷(xiāo)模型簡(jiǎn)介(含案例)課件
- 死亡醫(yī)學(xué)證明書(shū)辦理委托書(shū)
- 《壓力容器安全技術(shù)監(jiān)察規(guī)程》
評(píng)論
0/150
提交評(píng)論