Dzień dobry
Mam zbudowany taki magiczny układ:
Próbuję nim odczytać wilgotność gleby za pomocą takiego oto czujnika:
https://botland.com.pl/czujniki-wilgotnosci/1...MInrP75MvM-wIV7RJ7Ch2yRwb2EAQYAyABEgIq1vD_BwE
Chińszczyzna, ale dotąd działało
W każdym razie mam w nim podpięte VCC i GND, a wyjście analogowe do PC0 (ADC0). Dodatkowo w tym momencie mam podpiętą diodę pod PD7. Układ miałem złożony na atmega328 i działał poprawnie. Mam do tego płytkę, podmieniłem procesor w gnieździe, wgrałem program i działać przestało
Możliwe, że coś zmieniałem jeszcze w programie, ale nie w obszarze odczytu z ADC.
Program który przedstawię ma zapalić diodę na PD7, gdy nastąpi poprawny (jakikolwiek) odczyt z ADC. wygląda tak (uproszczony oczywiście, tylko żeby przybliżyć ideę i wskazać co nie działa):
Funkcje do odczytu i inicjacji ADC zerżnięte z internetu oczywiście.
Problem polega na tym, że w funkcji ReadADC jest linia z pętlą oczekującą na koniec pomiaru:
while(!(ADCSRA & (1<<ADIF)));
i ta pętla jest pętlą nieskończoną - co oznacza, że ADIF nie jest ustawiany na 1, według mojej skromnej wiedzy w tym zakresie.
Środowisko którego używam to Microchip Studio (wcześniej Atmel Studio to było).
Oczywiście gdy wywalę tą linię, to coś tam jest zwracane, ale nie jest to poprawna wartość
Bardzo proszę o pomoc w tym zakresie, i odpowiedź na pytanie co zrobiłem źle i co mógłbym zrobić, aby to działało.
Dodam jeszcze, że pomiar wykazał, że na wyjściu analogowym z czujnika pojawia się napięcie coś około 2.7V, i jest zależne od tego czy umieszczę go w ziemi mniej czy bardziej, więc czujnik jest sprawny. Wynik pomiaru po usunięciu pętli jest taki sam niezależnie od tego, czy czujnik jest podpięty czy nie.
Mam zbudowany taki magiczny układ:
Próbuję nim odczytać wilgotność gleby za pomocą takiego oto czujnika:
https://botland.com.pl/czujniki-wilgotnosci/1...MInrP75MvM-wIV7RJ7Ch2yRwb2EAQYAyABEgIq1vD_BwE
Chińszczyzna, ale dotąd działało
Program który przedstawię ma zapalić diodę na PD7, gdy nastąpi poprawny (jakikolwiek) odczyt z ADC. wygląda tak (uproszczony oczywiście, tylko żeby przybliżyć ideę i wskazać co nie działa):
Kod: C / C++
Funkcje do odczytu i inicjacji ADC zerżnięte z internetu oczywiście.
Problem polega na tym, że w funkcji ReadADC jest linia z pętlą oczekującą na koniec pomiaru:
while(!(ADCSRA & (1<<ADIF)));
i ta pętla jest pętlą nieskończoną - co oznacza, że ADIF nie jest ustawiany na 1, według mojej skromnej wiedzy w tym zakresie.
Środowisko którego używam to Microchip Studio (wcześniej Atmel Studio to było).
Oczywiście gdy wywalę tą linię, to coś tam jest zwracane, ale nie jest to poprawna wartość
Bardzo proszę o pomoc w tym zakresie, i odpowiedź na pytanie co zrobiłem źle i co mógłbym zrobić, aby to działało.
Dodam jeszcze, że pomiar wykazał, że na wyjściu analogowym z czujnika pojawia się napięcie coś około 2.7V, i jest zależne od tego czy umieszczę go w ziemi mniej czy bardziej, więc czujnik jest sprawny. Wynik pomiaru po usunięciu pętli jest taki sam niezależnie od tego, czy czujnik jest podpięty czy nie.