Skocz do zawartości

[C] Linefollower adc czujniki


Zdzisiek

Pomocna odpowiedź

Witam

Piszę program do linefollower'a i trochę skończyły mi się pomysły a sprawie obsługi adc. Widziałem, że można zrobić to z przerwaniami lub po kolei w programie. Robię to po kolei jako normalny pomiar ADC na razie z jednego czujnika, żeby sprawdzić, czy działa. Na pinach uc zmienia się napięcie (zmierzone miernikiem), więc transoptory działają.

#define F_CPU 1000000L

#include

#include

#include

int main(void)

{

DDRB |= (1<

DDRB |= (1<

DDRC= 0x00;

//PWM

TCCR1A |= (1<

TCCR1A |= (1<

TCCR1A |= (1<

TCCR1B |= (1<

//kierunek obrotu kol

PORTB |= (1<

PORTB &= ~(1<

PORTB &= ~(1<

//szybkosc obrotu kol

OCR1A = 0;

OCR1B = 0;

//ADC ustawienie

ADCSRA |= (1<

|(1<

|(1<

ADMUX |= (1<

|(1<

|(1<

//z zewnętrznym kondensatorem na pinie AREF

//wynik 8 bitowy

while(1)

{

ADMUX |=(1<

ADCSRA |= (1<

while(ADCSR & ADSC); //czekanie na koniec przetwarzania

if(ADCH > 100){ //jesli pomiar adc wiekszy od 100 wlacz silniki

OCR1A = 100;

OCR1B = 100;

}

else{ // w innym przypadku wylacz

}

OCR1A = 0;

OCR1B = 0;

}

}

Koła stoją bez znaczenia jakie światło pada na czujniki. Jeśli ktoś widzi jakiś błąd to byłbym wdzięczny bardzo . Pozdrawiam

Link do komentarza
Share on other sites

Chodzi o to, że po else masz pusty blok zawierający jedynie komentarz. W wyniku braku wcięć pogubiłeś się w strukturze instrukcji if. Spróbuj to inaczej sformatować a na przyszłość używaj edytora z podświetlaniem składni instrukcji i wyróżnianiem bloków.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No faktycznie ale to nie jest przyczyną niestety, ten błąd wkradł się później. Tak więc nadal nie działa. Udało się za to w trybie free run i przerwaniami. Która metoda jest "lepsza" w zastosowaniu? Planuje też podpiąć wyświetlacz, żeby zobaczyć wartości na ekranie, bo wciąż zjada mnie ciekawość czemu ten program nie działa

Link do komentarza
Share on other sites

Może spróbuj odczytywać wynik pomiaru poprzez ADCW. Co prawda przy 8-bitowej rozdzielczości wynik jest przesuwany do lewej, więc powinno działać, ale spróbować chyba nie zaszkodzi.

Podpięcie LCD jest bardzo dobrym pomysłem, wyświetlisz co będziesz chciał i od razu będzie widać co jest nie tak.

A jeszcze jedno- w jaki sposób zasilasz robota? Jeśli testy robisz przez USB to nie będzie działało (zależnie od tego, jak masz rozwiązane zasilanie na płytce, ale jeśli masz mostek H i zasilanie silników jest z baterii, a logiki z regulatora/przetwornicy/czegokolwiek to silniki nie będą się kręcić)

Link do komentarza
Share on other sites

Acha, czyli szukamy błędu w programie którego nam nie pokazałeś bo ten co widzimy to nie jest aktualny tylko jakiś inny, stary i w nim no jasne, że są błędy, a nie działa przecież także ten drugi co to pozmieniałeś i teraz to już nic, i tylko LCD pomoże na wszelkie kłopoty.

To dla odmiany spróbuj mi powiedzieć co to jest takie piszczenie w moim samochodzie, wiesz, gdy odpalam to tak trochę w prawej strony, niby pod kokpitem ale tak bardziej to może w nadkolu albo w okolicach drzwi choć znika po kilku sekundach gdy jest ciepło i oczywiście gdy nie pada deszcz bo wtedy to tak stuka, ale jakby trochę bliżej. Dołączam zdjęcie trawnika na parkingu - masz już komplet informacji. Oczekuję pomocy.

Link do komentarza
Share on other sites

marek1707, wybacz ale doprawdy ciężko jest sobie wyobrazić kod bez jednego nawiasu? Gdyby się jeszcze trochę dalej zastanowić, to informacja o tym, że w trybie freerun adc działa służy temu, że ADC działa i czujniki też działają... Wydaje się dość logiczne.

A co do Twojego problemu to nie mogę Ci pomóc bo znalazłem błąd w opisie i nie rozumiem i nie umiem sobie zamienić tego fragmentu

w prawej strony
na: z prawej strony, w tym momencie jest to opis zupełnie innej sytuacji i ja teraz nawet nie zastanowię się co może być problemem w Twoim samochodzie. Chyba, że wkleisz nowy opis problemu. A jak napiszesz to stwierdzę, że i tak nie znam odpowiedzi na Twoje pytanie :O
Link do komentarza
Share on other sites

Przecież ja nie mam szans domyślić się, że zmieniłeś jeden nawias. Gdy siedzisz nad jakimś problemem to próbujesz na różne sposoby. Jeden program testowy zmienia się w zupełnie inny na przestrzeni kilku minut. Skąd mam wiedzieć co aktualnie Ci nie działa?

Cieszę się, że ADC pracuje z przerwaniami i że umie mierzyć czujniki, ale Twoja prośba o pomoc przy szukaniu błędu w programie którego nie podesłałeś wciąż wisi. Nie odwołałeś tego poprzez "Dobra, inny sposób mi działa a z tamtym jakoś sobie poradzę, dzięki". Za to piszesz:

"Tak więc nadal nie działa. Udało się za to w trybie free run i przerwaniami. Która metoda jest "lepsza" w zastosowaniu?"

Moim zdaniem dużo lepsza jest ta, która działa.

Wiesz, widząc program w którym znajduję takie kwiaty jak np. to:

ADCSRA |= (1<

while(ADCSR & ADSC);

gdzie najpierw piszesz do jednego rejestru a potem sprawdzasz jakiś inny (jaki?) to nie wiem, czy to wszystko nie jest jakąś ściemą i program w ogóle się kompiluje. Nie jestem tak skrupulatny jak kompilator ale wiem, że w tekstach programów nie ma uproszczeń i rzeczy nieważnych. Jeden znak czasem załatwia sprawę więc albo wysyłasz prawdziwy kod wprost z ekranu i o nim dyskutujemy na poważnie, albo jakąś atrapę i wtedy dostajesz odpowiedzi o podobnym stopniu zaangażowania. Metoda ctrl/c ctrl/v raczej by się tak nie pomyliła a to oznacza, że wkleiłeś jakąś bzdurę i miałeś jeszcze odwagę prosić nas o pochylenie się nad tym i poświęcenie swojego czasu. To nie jest dobre podejście bo sprawia, że czuję się wykorzystany a bardzo tego nie lubię. Czytam Twój post, czytam program, próbuję go zrozumieć, odkrywam dziwne rzeczy i zaczynam podejrzewać, że wrzuciłeś coś "na odwal się" a za chwilę sam przyznajesz, że "niestety, ten błąd wkradł się później". To co, wiedziałeś o nim wysyłając kod? I tak, kamyczek do kamyczka, zaufanie i chęć dalszego czytania spada... Rozumiesz?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.