سلام من دارم بورد قسمت آلتراسونیک یک روبات که از شرکت نوآوران الکترونیک رو که قبلا خریدمو راه اندازی میکنم...
قبلا خودم همین بوردو ساخته بودم ولی دیگه بیخیالش شده بودم...به هرحال....
مشکلم اینجاس میخوام مقدار 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){}
}







دیدگاه