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

Atmega16 - odczytywanie przycisków z LCD KEYPAD SHIELD ARDUINO

Mateos89 10 Sty 2014 23:57 2388 7
  • #1 10 Sty 2014 23:57
    Mateos89
    Poziom 9  

    Witam.
    Mam problem z odczytaniem napięcia z przycisków analogowych,
    http://www.dfrobot.com/image/data/DFR0009/LCDKeypad%20Shield%20V1.0%20SCH.pdf schemat elektryczny tych przycisków
    Potrafię uruchomić przetwornik analogowo cyfrowy, mój program działa odczytuje wartości prawidłowo sprawdzałem za pomocą potencjometru ktory podłączyłem do płytki.
    Nawet odczytuje z zasilacza wartość po odpowiednim podłączeniu.
    Natomiast po podłączeniu z mikrokontrolera pinu A0 do LCD KEYPAD SHIELD pinu A0 nie z czytuje wartości napięcia prawidłowo.
    Sprawdzałem przyciski za pomocą woltomierza i wszystko działa.
    Proszę o pomoc, może to tylko kwestia konfiguracji programu ustawienie rejestrów.


    void adc_init(void)
    {
    ADMUX|=_BV(REFS0);//|_BV(MUX4);

    ADCSRA|=_BV(ADEN)|_BV(ADPS2)|_BV(ADPS1)|_BV(ADSC);



    }

    void adc_start(void)
    {
    ADCSRA|=_BV(ADSC);
    }


    unsigned int adc_wynik(void)
    {
    int wartosc;

    wartosc=(ADCL)+(ADCH*256);

    return(wartosc);
    }

    0 7
  • #2 11 Sty 2014 00:23
    dondu
    Moderator Mikrokontrolery Projektowanie

    Witaj.


    Możesz od razu odczytać cały rejestr ADC:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    stąd nie ma sensu tworzyć takiej funkcji jak Twoja, czy ta powyżej.

    Co oznacza:

    Mateos89 napisał:
    Natomiast po podłączeniu z mikrokontrolera pinu A0 do LCD KEYPAD SHIELD pinu A0 nie z czytuje wartosci napiecia prawidłowo.


    Ponieważ chodzi o klawiaturę na ADC, to tutaj znajdziesz przykłady:
    http://mikrokontrolery.blogspot.com/2011/03/epp-klawiatura-adc-by-dondu.html

    W postach na forum umieszczaj kod w znacznikach SYNTAX, by wyglądał jak ten powyżej.

    0
  • #3 11 Sty 2014 00:37
    Mateos89
    Poziom 9  

    Właśnie patrzyłem na tej stronie, ale tam schemat przycisków ma zamieniony Vcc z GND. Czy to moze wpłynąc na pomiar?
    Podłączam wszystko jak trzeba, wykonałem nawet sposobem ze strony i dalej błąd.

    0
  • #4 11 Sty 2014 00:55
    dondu
    Moderator Mikrokontrolery Projektowanie

    Mateos89 napisał:
    Właśnie patrzyłem na tej stronie, ale tam schemat przycisków ma zamieniony Vcc z GND. Czy to moze wpłynąc na pomiar?

    Owszem, w Twoim przypadku gdy żaden przycisk nie będzie naciśniety będziesz miał odczyt prawie maksymalny.
    W przypadku z linku, który Ci wskazałem będziesz miał zero.
    Reszta to kwestia wartości rezystorów przez co nieco innych odczytów.

    Wrzuć zdjęcia całości.
    Pokaż cały program.

    Odpowiadaj na pytania, bo dalej piszesz jedynie:

    Mateos89 napisał:
    ... i dalej błąd.

    0
  • #5 11 Sty 2014 10:46
    Mateos89
    Poziom 9  

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod


    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod

    Wynik pomiaru jest od 0 do 1023. Gdy podłączam do przycisków pomiar ciągle wskazuje wartość 8, a powinna być maksymalna 1023, gdy wcisne klawisz "right"to jest zero, a na pozostałe przyciski układ nie zmienia wartości(8)


    Atmega16 - odczytywanie przycisków z LCD KEYPAD SHIELD ARDUINO Atmega16 - odczytywanie przycisków z LCD KEYPAD SHIELD ARDUINO


    wyniki pomiaru za pomocą woltomierza z kazdego przycisk:
    right=0;
    up=0,6V
    down=1,25V
    left=1,99V
    select=3,11

    0
  • #6 11 Sty 2014 12:58
    dondu
    Moderator Mikrokontrolery Projektowanie

    Nie pokazujesz całego programu, więc nie ma sensu go sprawdzać.
    Uprość na razie program jedynie do odczytu ADC i wyświetlenia odczytanej wartości i 3 spacji za nią.
    I wywal tę funkcję o której pisałem wyżej bo jest zbędna.

    Zwiększ także opóźnienie między pomiarami do 1/4 sekund.

    A na koniec instrukcja wstawiania kodu języka C: http://mikrokontrolery.blogspot.com/2011/04/fora-dyskusyjne-sa-bardzo-pomocne.html

    0
  • #7 11 Sty 2014 13:53
    Mateos89
    Poziom 9  

    Kolorowanie składni:

    Kod: jezyk_C
    Zaloguj się, aby zobaczyć kod


    Zrobiłem jak mówiłeś i pomiar działa też przy tym kodzie, ale pomiar przy przyciskach dalej jest nie prawidłowy.
    Wartość wyświetlana przy przyciskach to: '2' a powinno być ok255, a po nacisnieciu klawisza right '0' a przy innych klawiszach ta wartosc sie nie zmienia pozostaje jakby zaden nie był wcisniety '2'.
    Po ustawieniu MUX4..0 na 10000 czyli ustawienie jako Positive Differential
    Input ADC0, Negative Differential Input ADC1, ADC1 odczytuje bez wciśniętego przycisku wartosc 255 czyli 5V. Po nacisnieciu "RIGHT" wartość 0, a przy innych nic sie nie zmienia.

    0
  • #8 12 Sty 2014 12:56
    Mateos89
    Poziom 9  

    Tymczasowo rozwiązałem problem, choć wartości napiecia na przyciskach nie sa prawidłowo wyswietlane. W kodzie ustawiłem wartość PORTU A na '255' na stan wysoki. I to pomogło mi choć trochę uzyskać widoczność działania przycisku po nacisnieciu. W kodzie w linice przerwania sprawdzania klawiatury sa podane wyniki w mV takie jakie mierzy przetwornik na kazdym przycisku. a za pomoca wolotomierza gdy mierze te wartosci sa inne.

    Kod: jezyk_C
    Zaloguj się, aby zobaczyć kod

    w main sprawdzam poprawnosc dzialania przyciskow



    Rozwiązano. Wystarczyło zmienić w main:
    DDRA=0;
    PORTA=255;

    0