tag 标签: 超声波模块

相关博文
  • 热度 15
    2012-11-4 15:05
    2282 次阅读|
    0 个评论
    AVRstudio6下写的,IDE自带GCC。使用Timer1的输入捕获,晶振8M.   #include stdio.h #define F_CPU 8000000 #include util/delay.h #include avr/io.h #include avr/iom128.h #include avr/interrupt.h    //中断信号头文件   #define LED         PORTE                //数据口 #define LEDDDR         DDRE                 //数据口方向寄存器   #define PORT_DATA  PORTC #define PORT_SEL   PORTA #define DDR_DATA   DDRC #define DDR_SEL    DDRA   #define DDR_WAVE_TRIG DDRD #define DDR_WAVE_ECHO   DDRD #define PORT_WAVE_TRIG PORTD #define PORT_WAVE_ECHO   PORTD #define PIN__WAVE_TRIG  PIND #define PIN__WAVE_ECHO  PIND #define TRIG  PD6 #define ECHO  PD4   #define delay_us(x)     _delay_us(x)    //AVR GCC延时函数 x(us) #define delay_ms(x)     _delay_ms(x)    //AVR GCC延时函数 x(ms)   #define uchar           unsigned char #define uint            unsigned int #define ulong           unsigned long   volatile ulong ov_counter=0; volatile uint rising_edge,falling_edge; volatile ulong pulse_clocks = 1000;//高电平宽度 volatile uint    temp;   const char Table ={0x3f,0x06,0x5b,0x4f,0x66,                 0x6d,0x7d,0x07,0x7f,0x6f};   char Date ={1,2,3,4};   void Display(char *p) { char i,sel=0x01; for(i=0;i4;i++) { PORT_SEL = sel;     // 1 表示选通 PORT_DATA = ~Table ];   if(i == 0) PORT_DATA = ~(17);   delay_ms(2); PORT_DATA= 0xFF ; sel= sel1; } }   void Io_Init(Void) { DDR_DATA = 0xFF; PORT_DATA = 0x00;   DDR_SEL  = 0x0F; PORT_SEL = 0x0F;   DDR_WAVE_ECHO = ~(1ECHO);//ECHO设输入 ,ICP1 DDR_WAVE_TRIG |= (1TRIG);// 触发脉冲设输出   PORT_WAVE_ECHO = ~(1ECHO);//ECHO和TRIG均初始化为0 PORT_WAVE_TRIG = ~(1TRIG);     LEDDDR |= 0XFF;   LED = 0xFF; }   void Initial_Timer(void) { TCCR1B = 0; TCCR1A = 0x00; TCCR1B = (1ICNC1)|(1ICES1)|(1CS11);//8, 上升沿触发   TIMSK |= (1TICIE1)|(1TOIE1);//使能ICP捕捉中断,溢出中断 } /* (count * div)/8M * 340/2 m (count * div)/8M * 340/2 *1000 mm count*8/8000000 * 170*1000 = count*17/100 mm ; */ void Calc_Distance( char* p) { volatile unsigned long TN = 0; TN = (falling_edge*17/100);// 单位为mm p = TN/1000; p = (TN % 1000)/100; p = (TN % 100)/10; p = TN % 10; }   void GenerateTrig(void) { PORT_WAVE_TRIG |= (1TRIG); delay_us(30); PORT_WAVE_TRIG = ~(1TRIG); } /* void main() { unsigned int count = 0; Io_Init(); Initial_Timer(); //asm("SEI"); //打开全局中断   while(1) { GenerateTrig(); while(!(PIN__WAVE_ECHO (1 ECHO))) // wait for echo raising  {;}    TCNT1H = 0; TCNT1L = 0; while((PIN__WAVE_ECHO (1 ECHO))) // wait for echo falling  {;} falling_edge = TCNT1L; temp = TCNT1H; falling_edge |= temp8; Calc_Distance(Date); Display(Date);    Display(Date); }   } */ void main() { unsigned int count = 0; Io_Init(); Initial_Timer(); asm("SEI"); //打开全局中断   while(1) {   Calc_Distance(Date);   count++; if(count 100)//产生一次Trig { count = 0; GenerateTrig(); }   Display(Date); }   }   ISR(TIMER1_OVF_vect) { ov_counter++; }   ISR(TIMER1_CAPT_vect) {     if(PIN__WAVE_ECHO (1 ECHO)) //上升沿 { TCNT1H = 0;    TCNT1L = 0;    TCCR1B = ~(1ICES1); //改为下降沿中断    ov_counter=0;   LED ^= (1PE7); LED |= ~((1PE7)|(1PE6));     }     else //下降沿 {    falling_edge = ICR1L;    temp = ICR1H;    falling_edge |= temp8;     TCCR1B |= (1ICES1); LED ^= (1PE6); LED |= ~((1PE7)|(1PE6));     } }   /* ISR(TIMER1_CAPT_vect) { if(PIN__WAVE_ECHO (1 ECHO)) //上升沿 { rising_edge = ICR1L; temp = ICR1H; rising_edge |= temp8;   TCCR1B = ~(1ICES1); //改为下降沿中断 ov_counter=0;   LED ^= (1PE7); LED |= ~((1PE7)|(1PE6)); } else //下降沿 { falling_edge = ICR1L; temp = ICR1H; falling_edge |= temp8;   TCCR1B |= (1ICES1); pulse_clocks = (ulong)falling_edge - (ulong)rising_edge + (ulong)ov_counter*0x10000; LED ^= (1PE6); LED |= ~((1PE7)|(1PE6)); } } */
  • 热度 21
    2011-3-14 12:01
    2341 次阅读|
    0 个评论
    开发板中心网址:http://www.huanor.com 开发板中心论坛:http://www.huanor.com/bbs 淘宝网址:http://shop36289907.taobao.com QQ: 1060087047或者871001268 手机:13466617480或者15801405586 座机:010-82534219 Email:huanor_sales@hotmail.com 地址:北京市海淀区中关村大街28-1号中海园电子市场地下一层BF-198 产品介绍:   采用工业级高性能AVR单片机作处理器,具有温度校正和软件补偿,板载RS232接口可直接与PC串口相连,自带一路舵机控制端,我们的专用软件能 让控制更得心应手,有RS232/TTL串口(模块默认为RS232串口,需要TTL电平的,请注明。)、PWM及开关量输出。 性能描述: 1.工作电源:+5V 2.工作电流:20mA 3.工作温度范围 :-10℃~+70℃ 4.超声波距离测量:     最大测量距离―500cm     最小测量距离―4cm     分辨率-1cm     误差-1% 5.由于使用了更好的超声波处理方法,使测量距离更远更稳定。 6.模块使用RS232串口通讯可靠性更高,同时可以通过电脑串口采集数据,编写通讯程序非常的便捷。 7.模块可以通过脉宽输出的方式将测量数据输出,这样使模块使用更简单。 8.模块可以预先设定一个比较值,在测量距离小于这个值后管脚输出一个低电平,这样模块能够方便的作为一个超声波接近开关使用。 9.模块提供一个舵机控制功能,可以和一个舵机组组成一个270度测量组件用于机器人 扫描0~270度范围障碍物。 10.模块内带温度补偿电路提高测量的精度。 11.模块内带253字节内部EEPROM,可以用于系统记录一些调电不丢失的系统参数。 12.模块内带一个高精度的温度测量部件,可以通过通讯口读出12位精度的环境温度数据。 13.模块尺寸:22mm × 51 mm 14.模块重量:约30g 开发板中心网址:http://www.huanor.com 开发板中心论坛:http://www.huanor.com/bbs 淘宝网址:http://shop36289907.taobao.com QQ: 1060087047或者871001268 手机:13466617480或者15801405586 座机:010-82534219 Email:huanor_sales@hotmail.com 地址:北京市海淀区中关村大街28-1号中海园电子市场地下一层BF-198
相关资源
  • 所需E币: 5
    时间: 2024-1-25 15:26
    大小: 5.79MB
    上传者: 丙丁先生
    基于CW32的超声波模块的应用源码.zip
  • 所需E币: 1
    时间: 2021-4-24 21:45
    大小: 1.02MB
    上传者: Argent
    电子产品日新月异,不管是硬件工程师还是软件工程师,基本的模电、数电知识也是必备的条件,从二极管到三极管,从单片机到多核MCU,3G网络到5G产品的普及,不管电子产品的集成度怎么高,其产品还是少不了电阻电容电感,每个元器件在电路中必然有其作用,有兴趣了解的网友,下载学习学习吧。
  • 所需E币: 1
    时间: 2020-12-30 15:52
    大小: 603.9KB
    上传者: Argent
    电子产品日新月异,不管是硬件工程师还是软件工程师,基本的模电、数电知识也是必备的条件,从二极管到三极管,从单片机到多核MCU,3G网络到5G产品的普及,不管电子产品的集成度怎么高,其产品还是少不了电阻电容电感,每个元器件在电路中必然有其作用,有兴趣了解的网友,下载学习学习吧。