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