logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Atmega8 i HC-SR04 - problem z przerwaniem przy 8MHz, kod w C

miccaldo 28 Wrz 2013 19:07 2586 3
REKLAMA
  • #1 12787737
    miccaldo
    Poziom 12  
    Witam, próbuję od długiego czasu napisać odpowiedni program do tego czujnika, przeczytałem większość wątków w internecie na ten temat, zebrałem informację ale niestety nie działa... Nie rozumiem też jednej rzeczy w przerwaniu. Atmega taktowana 8MHz.

    Oto kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Zamiast czasu w us dostaje na wyświetlaczu znaki zapytania :| kombinowałem z tym kodem już na milion sposobów ale nic nie działa a nie wiem co może być nie tak. Proszę o pomoc,


    pozdrawiam
  • REKLAMA
  • #2 12788247
    sweter_007
    Poziom 14  
    Pokaż schemat.
    Wykorzystanie ICP to "oczko" wyżej w trudności implementacji niż podane poniżej rozwiązanie.
    Jedno z rozwiązań:
    Wykorzystaj przerwanie wyzwalane narastającym zboczem na pinie.
    W obsłudze przerwania, przy wystąpieniu narastającego zbocza uruchom licznik sprzętowy i zmień wyzwalanie na zbocze opadające. Przy kolejnym wywołaniu przerwania zatrzymaj/odczytaj wartość licznika. Przelicz na odległość znając taktowanie licznika, wartość licznika oraz przelicznik z datasheet HC-SR04. Uważaj na przepełnienie licznika, dobierz odpowiednio jego taktowanie.
  • REKLAMA
  • #3 12789350
    excray
    Poziom 41  
    Dokładnie. Jeśli chcesz tylko sprawdzić czujnik to nie trzeba od razu czołgiem. Wystarczy prosty program:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 12789612
    miccaldo
    Poziom 12  
    Tego kodu powyżej jeszcze nie sprawdzałem, ale napisałem coś prostego, co chyba po lekkiej modyfikacji powinno działać.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Na wyświetlaczu ukazuje mi się jedynie wartość 20/21, ale nic więcej jak gdyby czujnik w ogóle fali nie wysyłał.


    EDIT:
    Gapa jestem sprawdzałem bez zasilania czujnika :D
    Teraz jeśli czujnik jest włączony, pokazuje różne wartości, od 5 do nagle 15100 i wyżej, niestety niezależnie od położenia czujnika :cry:
    ciekawe też dlaczego timer zliczył do tych 20, skoro czujnik był wyłączony :|
REKLAMA