• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomiar odległości AVR

VPS Starter Arubacloud
0 głosów
105 wizyt
pytanie zadane 19 lutego 2020 w Mikrokontrolery przez Mavimix Dyskutant (8,420 p.)

Mam czujnik odległości US-015. Pin echo podłączony do INT0 i INT1. Kod:

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>

void print_char(char letter)
{
	if(	bit_is_set(UCSRA, UDRE)	)
	{
		_delay_ms(10);
		UDR=letter;
		loop_until_bit_is_set(UCSRA, TXC);
	}
}

volatile unsigned long long time=0;
volatile long double czas=0;
volatile long double cm=0.0;
volatile int buf2=0;

int main(void)
{
    DDRD |= (1<<PD7);
    DDRD &= ~(1<<PD2);
    DDRD &= ~(1<<PD3);

    UBRRL = 103; //9600 16mhz
    UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

    TCCR0 = (1<<CS01);
    TIMSK = (1<<TOIE0);

    MCUCR |= (1<<ISC01)|(1<<ISC00)|(1<<ISC11);
    GICR |= (1<<INT0) | (1<<INT1);

    sei();

    while(1);
}

ISR(USART_RXC_vect)
{
    char buf=UDR;
	
    PORTD ^= (1<<PD7);
    _delay_us(10);
    PORTD ^= (1<<PD7);
}

ISR(TIMER0_OVF_vect)
{
    TCNT0=0;
    time++;
}

ISR(INT0_vect)
{
    TCNT0=0;
    time=0;
}

ISR(INT1_vect)
{
    buf2=TCNT0;
    czas=time;

    TIMSK ^= (1<<TOIE0);
    TCNT0=0;
    time=0;

     //1 cykl zegara to 0.0625 uS
    //256 cykli = 1 czas = 15.9375 uS

    czas*=15.9375;
    buf2*=0.0625;
    czas+=buf2;

    cm=czas/58.8235;

    char dys[32];

	dtostrf(cm, sizeof(long double), 8, dys);

	int ile=5;
	if(cm>=10) ile++;
	if(cm>=100) ile++;

	for(int i=0; i<ile; i++) print_char(dys[i]);
}

Wszystko działa, oprócz tego, że nie wyświetla się poprawna odległość. Próbowałem różnych "wzorów", ale żaden nie działa. Co jest nie tak?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 772 wizyt
pytanie zadane 13 grudnia 2019 w C i C++ przez Zydu Początkujący (340 p.)
+1 głos
1 odpowiedź 306 wizyt
pytanie zadane 6 kwietnia 2022 w C# przez jakubmarek Nowicjusz (160 p.)
+1 głos
3 odpowiedzi 1,344 wizyt
pytanie zadane 18 kwietnia 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)

93,025 zapytań

141,990 odpowiedzi

321,292 komentarzy

62,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...