Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wyświetlanie danych z ADC arduino na ekranie LCD.

30 Cze 2015 09:09 2388 12
  • Poziom 10  
    Witam

    Przerabiam najprostszy przykład dla Arduino - pomiar napięcia tak jak w artykule:
    https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage
    i odpalam program
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wszystko działa jak powinno - wartości zmieniają się od 0 do 1023 podczas kręcenia potencjometrem.
    Następnie podłączam wyświetlacz lcd 16*2 i wartości wyświetlam na LCD.
    W tym momencie jest problem wartości odczytane skaczą cały czas -
    - potencjometr na 0 oporu i wartość raz ma 1023 a za chwilę (500 milisekund) skacze do 800 coś.
    - podczas kręcenie potencjometrem np. z max do 50% wartości zmieniają się tak 1023 -> 300 -> 7000 -> 540 i na chwilę stabilizują się gdzieś około pomiędzy 500 a 600 a potem nadal skaczą 500 / 534 / 600 / 540

    P.S. Pisząc to przypomniałem sobie, że wyświetlacz jest zasilany z arduino oraz jego podświetlanie jest regulowane przez PWM z A2. Czy to może powodować problem?

    Proszę o pomoc.
  • Poziom 22  
    Prawdopodobnie nie masz komendy czyszczenia całego ekranu po tych 500ms - wtedy zostają "duszki" w postaci cyfr z poprzednich odczytów - jak najpierw było 1023, a później 0, to na ekranie wyświetli się 1020 - tylko ostatnia cyfra została odświeżona.
  • Poziom 10  
    Chiałbym żeby było to takie proste - niestety to nie ten problem:
    1. czyszcze ekran
    2. wartości wysyłam również na serial
  • Poziom 22  
    Pokaż cały kod i schemat połączeń.
  • Poziom 36  
    Kiepski, "trzeszczący" potencjometr może powodować takie odczyty. Doraźnie możesz przyblokować jego wyjście do masy jakimś kondensatorem 470 - 1000nF. Użycie specjalistycznego środka do czyszczenia potencjometrów i programowe uśrednianie np. 20 pomiarów też dużo by pomogło.
  • Poziom 12  
    Właśnie na szybkości poskładałem ten przykład na arduino z podłączonym wyświetlaczem 16x2 i program działa jak najbardziej poprawnie. Więc wnioskuję, że coś nie tak z podłączeniem do potencjometru lub z samym potem
  • Poziom 22  
    @andrzej55 Ale jak w takim wypadku uzasadnisz odczyt o wartości 7000 z ADC :D
  • Poziom 10  
    7000 pomyłka - miało być 700
  • Poziom 22  
    A który pin do pomiaru przypisałeś w setupie ? Wklej cały kod.
  • Poziom 10  
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 22  
    Po pierwsze : co to u licha ma robić ?
    Corcho napisał:
    pinMode(buttonPin, INPUT_PULLUP);
    pinMode(buttonPin, INPUT);
    digitalWrite(buttonPin, HIGH);

    Po drugie : ty nic nie mierzysz
    Corcho napisał:
    void read_data()
    {
    volt_1 = analogRead(aku_1);
    volt_2 = analogRead(aku_2);
    }

    Zmień zmienne aku_1 i aku_2 na xPin i yPin.

    Po trzecie : wyświetlasz nieaktualne dane (z poprzedniego pomiaru)
    Corcho napisał:
    void loop() {
    print_data();
    read_data();
    delay(500);
    }

    Zamień funkcje print_data(); i read_data(); miejscami.
  • Poziom 10  
    po pierwsze - wiernie skopiowane z przykładu dot. obsługi joystika

    po drugie - to prawdopodobnie właściwy błąd
    ale jeżeli aku_1 =0 to analogRead(aku_1) równoważne analogRead(0) czyli odczyt z A0 - czy nie tak ??

    po trzecie - to jest pętla - więc wyświetlam dane z ostatniego odczytu - jedynie pierwsze wyświetlenie odczytanych danych nastąpi po 500 milisekundach
    A jakie dane bym miał wyświetlać jeżeli nie z poprzedniego pomiaru ? :)
    Jedynie wyświetlam je z opóźnieniem.

    jeżeli pętla to działa równoważnie jest do tej pętli :
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i już masz kolejność jaką chciałeś tylko delay byś chciał po print ale to nie ma żadnego znaczenia prawda ?
  • Poziom 22  
    To wtedy masz pusty / nieaktualny ekran przez 500ms :D Lepiej tak :
    1. odczytaj dane
    2. wyczyść wszystkie miejsca na ekranie, gdzie pojawią się nowe wartości *
    3. wyświetl nowe dane
    4. poczekaj 500ms

    Corcho napisał:
    ale jeżeli aku_1 =0 to analogRead(aku_1) równoważne analogRead(0) czyli odczyt z A0 - czy nie tak ??

    Nie, wtedy arduino usiłuje odczytać dane z pinu 0, który ani nie jest przypisany w setupie, ani nawet nie ma ADC
    wpisz tam aku_1 = A0; i ustaw aku_1 w setupie jako wejście

    *Możesz to zrobić spacjami, jeśli będziesz czyścił cały ekran komendą clear, to będziesz widział małe mrugnięcia co 500ms. Szczególnie będą przeszkadzać, gdy prędkość odświeżania odczytu będzie większa. (np. co 100ms)