Witam,
mam problem z czujnikiem odległości HC-SR04, cały czas na wyświetlaczu mam wartość 0. kod jest następujący:
Kod powstał w oparciu o poradniki, jako że wartość wyświetlana się nie zmienia wydaje mi się że coś jest nie tak z przerwaniem :
mógły ktoś wytłumaczyć jak działa takie przerwanie? po pojawieniu się sygnału na ICP1 (PB0 - atmega 328) zaczyna być zliczana wartość w rejsetrze ICR1, a po pojawieniu się stanu niskiego :
if( !(TCCR1B & (1<<ICES1)) )
ustawia odpowiednią wartość PulseWidth ( dlaczego nie ma nigdzie w przerwaniu return?, kiedy ono się skończy? )
i dlaczego w ostatniej linijce :
TCCR1B ^= (1<<ICES1); //zmiana zbocza
jest zmiana zbocza
to przerwanie działa w pętli tak długo jak na odpowiednim pinie jest stan wysoki ? Dużo pytań ale pierwszy mam doczynienia z tego typu sygnałem, nie wiem jak to "liznąć" i skorzystałem na początek z gotowca, który nie działa : d (albo działa ale ja coś źle robię).
Jeszcze mam pytanie o wyzwalanie tego czujnika, jaki czas po wyzwoleniu czekać na dane? Chodz mi o tą część:
nie powinienem mieć tak jakiejś funkcji która będzie sprawdzała czy jest już wynik ? ( typu pętla while (nie ma wyniku (1)){} a jak się pojawi wynik to wyjdzie program z pętli ? )
wiem dużo pytań ( może nie które bez sensu : ) ), mam nadzieje że ktoś odważy się na nie odpowiedzieć.
Z góry dziękuję za pomoc : D
Dodano po 21 [minuty]:
Dobra chyba wiem po co zmiana zbocza na końcu przerwania, po prostu czekamy na zobocze opadające aby ponownie wejść w przerwanie i odczytać wyniki, program nadal nie działa ale już wiem jak powinien działać chociaż : )
mam problem z czujnikiem odległości HC-SR04, cały czas na wyświetlaczu mam wartość 0. kod jest następujący:
Kod: C / C++
Kod powstał w oparciu o poradniki, jako że wartość wyświetlana się nie zmienia wydaje mi się że coś jest nie tak z przerwaniem :
Kod: C / C++
mógły ktoś wytłumaczyć jak działa takie przerwanie? po pojawieniu się sygnału na ICP1 (PB0 - atmega 328) zaczyna być zliczana wartość w rejsetrze ICR1, a po pojawieniu się stanu niskiego :
if( !(TCCR1B & (1<<ICES1)) )
ustawia odpowiednią wartość PulseWidth ( dlaczego nie ma nigdzie w przerwaniu return?, kiedy ono się skończy? )
i dlaczego w ostatniej linijce :
TCCR1B ^= (1<<ICES1); //zmiana zbocza
jest zmiana zbocza
to przerwanie działa w pętli tak długo jak na odpowiednim pinie jest stan wysoki ? Dużo pytań ale pierwszy mam doczynienia z tego typu sygnałem, nie wiem jak to "liznąć" i skorzystałem na początek z gotowca, który nie działa : d (albo działa ale ja coś źle robię).
Jeszcze mam pytanie o wyzwalanie tego czujnika, jaki czas po wyzwoleniu czekać na dane? Chodz mi o tą część:
Kod: C / C++
nie powinienem mieć tak jakiejś funkcji która będzie sprawdzała czy jest już wynik ? ( typu pętla while (nie ma wyniku (1)){} a jak się pojawi wynik to wyjdzie program z pętli ? )
wiem dużo pytań ( może nie które bez sensu : ) ), mam nadzieje że ktoś odważy się na nie odpowiedzieć.
Z góry dziękuję za pomoc : D
Dodano po 21 [minuty]:
Dobra chyba wiem po co zmiana zbocza na końcu przerwania, po prostu czekamy na zobocze opadające aby ponownie wejść w przerwanie i odczytać wyniki, program nadal nie działa ale już wiem jak powinien działać chociaż : )