Tervitused
olen siin juba 2 päeva üritanud tööle saada oma sonarit aga vot ei tule välja kuidagi...
peaks tegema nii: pulseeri välja paar pulssi transmitterisse, mõõda aega, mil tuleb tagasi kaja e mõõda, kui kaua võtab aega, et PORTD6 low'ks läheks ja saada vastus LCD'le
mis on koodis valesti, et ta nii ei tee? 
  
minu kood on siin:
	EDIT: unustasin mainida, et olen AVR'idega suht lgaja
							
						
					olen siin juba 2 päeva üritanud tööle saada oma sonarit aga vot ei tule välja kuidagi...
peaks tegema nii: pulseeri välja paar pulssi transmitterisse, mõõda aega, mil tuleb tagasi kaja e mõõda, kui kaua võtab aega, et PORTD6 low'ks läheks ja saada vastus LCD'le
mis on koodis valesti, et ta nii ei tee?
 
  minu kood on siin:
Kood:
	/*
program to "talk" with sonar module
transmitter connected to PORTD 0 and 1
reciever connected to PORTD 6 (ICP)
LCD connected to PORTB 4; bit mode.
*/
// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x18;PORTB
#endasm
#include <lcd.h>
#include <tiny2313.h>
#include <delay.h>
#include <stdio.h>
#define STOP_TIMER  TCCR1B = 0xC0
#define START_TIMER  TCCR1B = 0xC5 
// Declare your global variables here
int a;
int x;
int y;
int tof;
char c[10];
char lcd_buffer[16];
int timerl; //Low
int timerh; //High
int timert; //Total
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
  timerl = ICR1L;
  timerh = ICR1H;
  timert = timerl + (timerh <<8);
  STOP_TIMER;
  y=0;
}
interrupt [TIM1_OVF] void timer1_overf_isr(void)
{
  sprintf(lcd_buffer,"overflow");   //write "owerflow" into lcd_buffer
  delay_ms(1);
  lcd_clear();
  lcd_puts(lcd_buffer);
  ICR1H = 0;
  ICR1L = 0;
}
void pulseout(int p)
{
	for (x=0;x<p;x++)
    {
      PORTD &= ~0b00000001;
      PORTD |= 0b00000001;
     delay_us (10); 
      PORTD &= ~0b00000010;
      PORTD |= 0b00000010;
      delay_us (9);
    }
}
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
//Timer initialization
//TCCR1B = 10xxx010
TCCR1B=0xC5;
TIMSK |= 0b10001000;
ACSR = 0;
//-----------------------------------------------------------------------
// LCD module initialization
lcd_init(8);
#asm
sei
#endasm
	PORTB	= 0xFF;
	DDRB	= 0x00;
	
	PORTD	= 0x03;
	DDRD	= 0b0000000;
  y=1;
	while (1)
  {
back:
   ICR1H = 0;
   ICR1L = 0;
   delay_ms(1000);
   pulseout(8);  // pulse the sonar transmitter 8 times
   START_TIMER;
   
wait:      
   if (y > 0)
   {
     a++;
     if (a>6000)
     {
      STOP_TIMER;
      
      sprintf(lcd_buffer,"outofrange");   //write "outofrange" into lcd_buffer
      delay_ms(1);
      lcd_clear();
      lcd_puts(lcd_buffer);
            
      a = 0;
      ICR1H = 0;
      ICR1L = 0;
      delay_ms(1000);
      goto back;
     } 
     delay_us(1);
     goto wait; 
   }
   tof = timert / 146;
   sprintf(lcd_buffer,"t=%4uunits",tof);
   lcd_clear();
   delay_ms(1);
   lcd_puts(lcd_buffer);
   delay_ms(1000);
   y=1;
  }
}
 
		
	
Comment