Skocz do zawartości
matt90

ADC działa tylko dla 2 pomiarów

Pomocna odpowiedź

Witajcie, mam problem z odczytem ADC. Jak podepnę 2 czujniki to wszystko działa, jak podłączę trzeci to wszystko przestaje działać. Nie działają zarówno silniki jak i pozostałe elementy. Czujnik jest sprawny, ADC raczej dobrze skonfigurowane bo dla 2 czujników działa. Co może być powodem takich problemów? Procesor to Atmega8, odczyty z ADC realizuje w funkcji która cały czas odczytuje wartości

Udostępnij ten post


Link to post
Share on other sites

Pytanie czy tylko chodzi o podpięcie czy zaprogramowanie?

Jak podpięcie to wiadomo - czujnik źle podpięty lub uszkodzony.

Jak zaprogramowanie to też jasne - błąd w kodzie.

No ale nie dałeś schematu, kodu itd. to jak mamy pomóc?

Udostępnij ten post


Link to post
Share on other sites

Chodzi o zaprogramowanie 🙂

Oczywiście cała inicjalizacja, kasowanie MUX-ów jest. Problem pojawia się gdy wprowadzę linię

adc3= odczyt(3); 

jak jest zakomentowana wszystko działa. Próbowałem pod inne porty podłączyć, ale za każdym razem taki sam efekt

Udostępnij ten post


Link to post
Share on other sites

1. Przecież to nie jest cały kod funkcji odczyt ( gdzie czytanie danych z ADC, return itd.?)

2. Brak reszty programu (chociażby szczątkowego). Z tego co dałeś nie widać co się dzieje w innym miejscu.

PS. Zrób tylko odczyt 1 i 3 - bez odczytu 2 - i zobacz czy wtedy działa...🙂

Udostępnij ten post


Link to post
Share on other sites

Nadal nie działa jak wyłącze odczyt z drugiego lub pierwszego kanału to nie działa ten czujnik podłączony do tego wejścia.

I do póki ustawiony mam odczyt z dwóch kanałów (obojętnie które) wszystko działa, jak włącze odczyt z trzeciego kanału nic się nie dzieje, silniki stoją

Udostępnij ten post


Link to post
Share on other sites

Trochę masz pogmatwane to ustawianie bitów w ADMUX. Moim zdaniem bardziej naturalne byłoby zdefiniowanie gdzieś na początku stałej odpowiadającej za wybór referencji, np:

#define VREF_VCC _BV(REFS0)

a potem, przed startem przetwornika wpisywanie po prostu numeru kanału:

ADMUX = VREF_VCC + 2;

i masz wybrany kanał nr. 2.

Przecież nie zmieniasz zawartości ADMUX w wielu miejscach w programie, więc operatory |= nie są potrzebne. Panujesz nad zawartością tego rejestru i nie używasz pojedynczych bitów w różnych funkcjach.

Po zrobieniu pomiaru nie musisz też zerować numeru kanału i program trochę się upraszcza.

Mi w "case 1" brakuje instrukcji break co powoduje (w połączeniu z operatorami |=), że wybierając ten przypadek de facto mierzysz kanał 3, wybierając case 2 mierzysz drugi a case 3 - trzeci.

Czy możesz dokładniej opisać objawy? Czy jest to totalny crash programu i nic nie działa (coś jakby problemy ze stosem czy z przepełnieniami jakichś buforów) czy tylko nie załączają się silniki, które jedynie pokazują (jak np. diodki LED) wynik pomiaru ADC?

Udostępnij ten post


Link to post
Share on other sites

Nie za bardzo rozumiem gdzie miałbym wywoływać tą instrukcję . W case1 jest break, nie wiem dlaczego się nie przekopiował 🙂 Kanał musi być zerowany, jak to wyłączę silniki cały czas działają. Program uruchamia silniki jak zadziałają czujniki, i jak włączę odczyt z trzeciego czujnika to nic się nie dzieje, żaden silnik się nie załącza 🙁

[ Dodano: 09-11-2014, 21:53 ]

Problem został rozwiązany, można zamknąć, dziękuje wszystkim za pomoc 🙂 błąd był w zmiennej, chyba nie mieściło się w int 🙂

Udostępnij ten post


Link to post
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!

Gość
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...