سلام من دارم بورد قسمت آلتراسونیک یک روبات که از شرکت نوآوران الکترونیک رو که قبلا خریدمو راه اندازی میکنم...
قبلا خودم همین بوردو ساخته بودم ولی دیگه بیخیالش شده بودم...به هرحال....
مشکلم اینجاس میخوام مقدار TCN1 رو بخونم تا زمان رفت و برگشت موج آلتراسونیکو حساب کنم...ولی مشکل داره...یر همین TCN1H و TCN1L .... مقدارشو روی lcd میندازم ... ولی اشتباهه ... یکی کمک میکنه ؟ من هر تاپیکی که باز میکنم نمیدونم چرا به نتیجه نمیرسه...هیچکی علاقه نشون نمیده...
لطفا این رو کمک کنین دوستان...
مدار کاملا درس کار میکنه خیلی چک کردم ، مشکلم خوندن TCN1 ا...
تیکه های کد لازم رو گذاشتم، عکس مدار رو هم پلود کردم

قبلا خودم همین بوردو ساخته بودم ولی دیگه بیخیالش شده بودم...به هرحال....
مشکلم اینجاس میخوام مقدار TCN1 رو بخونم تا زمان رفت و برگشت موج آلتراسونیکو حساب کنم...ولی مشکل داره...یر همین TCN1H و TCN1L .... مقدارشو روی lcd میندازم ... ولی اشتباهه ... یکی کمک میکنه ؟ من هر تاپیکی که باز میکنم نمیدونم چرا به نتیجه نمیرسه...هیچکی علاقه نشون نمیده...
لطفا این رو کمک کنین دوستان...
مدار کاملا درس کار میکنه خیلی چک کردم ، مشکلم خوندن TCN1 ا...
تیکه های کد لازم رو گذاشتم، عکس مدار رو هم پلود کردم

کد:
#include <mega32.h> #include <delay.h> #include <stdlib.h> #include <string.h> #asm .equ __lcd_port = 0x18 ;//PORTB #endasm #include <lcd.h> char s1[8]; int mode = 0 ; int count = 0 ; char timer[]; interrupt [EXT_INT1] void ext_int1_isr(void) { unsigned int f = 0; float metr = 343.5 / 2000000; PORTD.2 = 0 ;//RX OFF f=TCNT1H; f=f<<8; f=(f+TCNT1L); metr *= (8125*count)+((f-536)*0.125); ftoa(metr,2,timer); lcd_gotoxy(0,1); lcd_putsf(">> "); lcd_gotoxy(8,0); lcd_putsf("INT1 "); lcd_gotoxy(3,1); lcd_puts(timer); } interrupt [TIM1_OVF] void timer1_ovf_isr(void) { lcd_gotoxy(8,0); if(mode==0) { lcd_putsf("mode0"); //TCNT1=65524; TCNT1=65436; //12.5us PORTD.7 = ~PORTD.7 ; //send TX count ++ ; if(count == 40 ) // SEND .5 MS=500us 40KHZ PULS (20 * 25us pulse width =.5ms) { count = 0; mode = 1; PORTD.7 = 0; //TCNT1=64536; TCNT1=57536; //1ms } } else if(mode ==1) { lcd_putsf("mode1"); //GICR|=0x80; //INT1 ENABLE PORTD.2 = 1 ;//RX ON mode = 2; lcd_gotoxy(0,1); lcd_putsf(">> "); TCNT1=536; } else { //first count = 0 if(count == 7 )//(65536-536 = 65000) 65000*0.125us = 8125 us raise time , 8 * 8125 =65000us= 65ms { lcd_putsf("mode2"); PORTD.2 = 0 ;//RX OFF count = 0; mode=0; PORTA.7 =~ PORTA.7 ; //Right //TCNT1=65524; TCNT1=65436; } else TCNT1=536; count ++ ; } } main(){ int i=0; lcd_init(16) ; lcd_gotoxy(0,0); lcd_putsf("Start"); DDRC = 0xFF;// STEPMOTOR PORTC = 0xFF; ADMUX=ADC_VREF_TYPE; ADCSRA=0x8F; SFIOR&=0xEF; DDRA.6 = 1; DDRA.7 = 1; DDRD=0b10110111; //DDRD.3 = 0; //INT1 FOR GET PULSE ULTRASONIC-RX delay_ms(1); PORTD=0b111111101; TCNT1=65436; TCCR1A=0x00; TCCR1B=0x01; // each pulse 0.125us TIMSK=0x04; GICR|=0x80; //INT1 ENABLE MCUCR=0x0C; MCUCSR=0x00; GIFR=0x80; lcd_putsf("."); #asm("sei") while(1){} }
دیدگاه