Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 29.09.2015 we wszystkich miejscach

  1. 1 punkt
    Możesz wkleić pełny komunikat o błędzie? Akurat ta linijka nic nie mówi.
  2. 1 punkt
    W kodzie deklarujesz: void GPIO_Cofig(void); Potem wywołujesz a także masz zdefiniowaną funkcję: GPIO_Config(); Zgubiłeś literkę w deklaracji
  3. 1 punkt
    Po pierwsze: PORTD |= (1<<Trig); _delay_us(10); PORTD &= ~(1<<Trig); 10 us to minimalny czas przez jaki musi być '1' na 'Trig'. Więc jeśli twoja Atmega ma niedokładny zegar (np. wewnętrzny RC) to ten czas może okazać się np. 9.5 us i czujnik nie zadziała. A jeśli masz źle ustawioną częstotliwość w projekcie np. 1 MHz, a w rzeczywistości procek pracuje na 8 MHz to będziesz miał ustawiany pin 'Trig' na tylko 1.25 us. Polecam więc w ten delay wstawić 100 us: PORTD |= (1<<Trig); _delay_us(100); PORTD &= ~(1<<Trig); Po drugie: if(dlugosc == 0) { DDRB &= ~((1<<PB7) | (1<<Echo)); PORTB &= ~((1<<PB7) | (1<<Echo)); } else { DDRB = 0b10000000; PORTB = 0b10000000; } Pin jako wejście lub wyjście definiuje się tylko raz, przed pętlą główną. Pin leda ustawiasz tu jako wejście, a przecież powinno to być wyjście. Po trzecie: PORTD |= (1<<Trig); _delay_us(10); PORTD &= ~(1<<Trig); if(!(PINB & (1<<Echo))) Oczekujesz tu, że stan pinu 'Echo' zmieni się od razu po wystawieniu jedynki na 'Trig', tak się nie stanie. Lepiej czekać na zmianę stanu pinu 'Echo' przy użyciu instrukcji while: while(!(PINB & (1<<Echo)))
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...