|
Witam chciałem sobie napisać samodzielnie obsługę czujnika ultradźwiękowego odległości US-015. Zasada działania polega na tym, że na 10us dajemy stan wysoki na trigger czujnika po czym mierzymy na wejściu stan wysoki i wykorzystując odpowiedni wzór wyliczamy odległość, proszę powiedzcie mi czemu zmiennej czas mam zawsze 0, natomiast po wyłączeniu sprawdzania czy na wejściu PD3 jest 0, czas narasta, więc "coś" liczy.
[/code]
#include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <avr/interrupt.h> #include <string.h>
#include "myuart/myuart.h" #include "MK_TERMINAL/mk_term.h"
volatile uint32_t odleglosc=0 , sekunda=0; volatile uint32_t czas=0; volatile uint32_t zmienna=0; volatile uint8_t minuty=0; int main(void) { uart_init( __UBRR ); sei(); OCR1A = 1; TIMSK |= (1 << OCIE1A); //Set interrupt on compare match OCR2 = 8; //PRZYPISANIE DO OCR2 WARTOSCI POCZĄTKOWEJ TCCR1B |=(1<<WGM12); //CTC TCCR1B |= (1<<CS11); //8 preskaler
DDRD &= ~(1<<PD3); //PD3 JAKO WEJSCIE PORTD |= (1<<PD3); // PD3 W STAN WYSOKI
DDRB |= (1<<PB0); // PB0 JAKO WYJSCIE PORTB |= ~(1<<PB0); // PB0 W STAN NISKI
while(1) { _delay_ms(100);
PORTB |= (1<<PB0); // PB0 stan wysoki _delay_us (10); PORTB &= ~(1<<PB0); // PB0 stan niski _delay_ms(1);
odleglosc = czas/10;//(zmienna*34)/2; tr_cls(0); tr_locate(1,1); tr_pen_color(WHITE); uart_putint( odleglosc,10); tr_locate(10,1); tr_pen_color(WHITE); uart_putint( czas,10);
} }
ISR (TIMER1_COMPA_vect)
{
if (!(PIND & (1<<PD3))) { czas=0;
}
if (PIND & (1<<PD3)) { czas++;
}}
Proszę prawidłowo wstawiać kody do postów ... tym razem nie wkleję linka do zaleceń .. to jest zadanie dla kolegi znaleźć jak i wstawić prawidłowo , bo nawet niewłaściwych znaczników bbcode nie umie kolega używać ... ---> SunRiver
|