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.

ATMEGA 16A - Zle wskazania klawiatury

17 Wrz 2014 18:47 1809 15
  • Poziom 20  
    Witam
    Mam pewien problem nad którym myślę nad nim już trochę czasu.
    Zbudowałem klawiaturę ADC 14 przyciskową lecz mam z nią parę problemów.
    Jako źródło napięcia zastosowałem TL431 i potencjometrem ustawiam pożądany poziom napięcia(1,20V).
    Pierwsza rzecz która mnie nurtuje to:
    - napięcie na wyjściu tl431 jest dość sporo niższe(0,7V i wynosi 2.0V) w porównaniu do analogicznego układu złożonego z takich samych elementów lecz jako napięcie odniesienia procesora(2,7V).
    - pomimo napięcia wyjściowego z TL431 2,0V i tak mogę ustawić nie więcej jak 1.23V
    - po podłączeniu klawiatury największa wartość jaką udało mi się uzyskać to 350-360 ADC przy napięciu odniesienia 1.20V.
    Dochodzi również do mieszania się przycisków przy np wielokrotnym przyciśnięciu określonych przycisków najprawdopodobniej tak sądzę przez to że, nie wykorzystuje w całości zakresu przetwornika tj 1024 tylko 1/3 a jak wiadomo napięcie może podskoczyć nawet do 5%(takie mam najgorsze rezystory w dzielniku) a przy zakresie do 350ADC to odstępy pomiędzy przyciskami myślę że są niewielkie na pewno proporcjonalnie mniejsze niż bym wykorzystywał cały zakres.
    co zrobiłem źle że mi tak wyszło?? Gdzie popełniłem błąd?? Sprawdziłem już rezystory w dzielniku- wszystkie ok przyciski mają 0,20-0,30Ω na zwarciu. TL431 wzięte nowe wcześniej sprawdzane na stykówce.
    ATMEGA 16A - Zle wskazania klawiatury
    ATMEGA 16A - Zle wskazania klawiatury
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Moderator Mikrokontrolery Projektowanie
    Jak chcesz za pomocą 10-bitowego ADC obsłużyć więcej niż 10 przycisków? Jeśli przycisk przyjmuje dwa stany, to do ich reprezentacji potrzebujesz 1 bita, masz 14 przycisków, czyli potrzebujesz co najmniej 14 bitów z ADC, a tylu nie masz. Oczywiście problem nie istnieje, jeśli na raz można nacisnąć tylko jeden przycisk...
    Kolejna sprawa - po co oddzielne napięcie referencyjne? Bierz referencję z napięcia zasilającego drabinkę - jego zmiany tak samo wpłyną na referencję, jak i na napięcie z wyjścia drabinki, więc się zniosą. Kolejna sprawa - przyciski mają drgania. W stanie przejściowym ich opór jest pomiędzy praktycznie zerem, a nieskończonością, to nakłada się na opór powiązanego rezystora. Wniosek taki, że dla takiego układu też trzeba zrobić eliminację drgań i odczytywać stan dopiero kiedy sie ustabilizuje. No i cała drabinka jest źle - powinieneś zbudować drabinkę R-2R, teraz jest tak, że jak naciśniesz np. S14 to masz na wyjściu 2,56V i stan pozostałych przycisków nie ma żadnego znaczenia. BTW, napięcie na wejściu ADC nie powinno przekraczać wartości napięcia referencyjnego, bo dochodzi po prostu do saturacji ADC.
  • Poziom 20  
    tmf napisał:
    Jak chcesz za pomocą 10-bitowego ADC obsłużyć więcej niż 10 przycisków? Jeśli przycisk przyjmuje dwa stany, to do ich reprezentacji potrzebujesz 1 bita, masz 14 przycisków, czyli potrzebujesz co najmniej 14 bitów z ADC, a tylu nie masz. Oczywiście problem nie istnieje, jeśli na raz można nacisnąć tylko jeden przycisk...
    Kolejna sprawa - po co oddzielne napięcie referencyjne? Bierz referencję z napięcia zasilającego drabinkę - jego zmiany tak samo wpłyną na referencję, jak i na napięcie z wyjścia drabinki, więc się zniosą. Kolejna sprawa - przyciski mają drgania. W stanie przejściowym ich opór jest pomiędzy praktycznie zerem, a nieskończonością, to nakłada się na opór powiązanego rezystora. Wniosek taki, że dla takiego układu też trzeba zrobić eliminację drgań i odczytywać stan dopiero kiedy sie ustabilizuje. No i cała drabinka jest źle - powinieneś zbudować drabinkę R-2R, teraz jest tak, że jak naciśniesz np. S14 to masz na wyjściu 2,56V i stan pozostałych przycisków nie ma żadnego znaczenia. BTW, napięcie na wejściu ADC nie powinno przekraczać wartości napięcia referencyjnego, bo dochodzi po prostu do saturacji ADC.


    Add 1 oczywiście na raz wciskam tylko jeden przycisk ilość klawiszy mogę zawsze zmniejszyć.
    Add 2 Też doszedłem do takich wniosków że osobne napięcie dla samej klawiatury jest bez sensu starczył by tu sam potencjometr
    Add 3 wartości rezystorów są z kalkulatora z waszego bloga schemat również
    Add 4 drgania styków eliminuje w podanym algorytmie
    Najpierw sprawdzam czy klawisz znajduje się w zakresie adc np > 10 i <20
    wtedy ustawiam flagę sprawdzenia klawiatury, ktora uruchamia zliczanie przerwań u mnie jest to 45 (500 to 1 sekunda)
    i po tym wykonuje jakąś akcje i niby tych drgań nie zauważam zmienne inkrementują się o 1. Troche pokrętnie może je eliminuje ale chyba działa jakby ktoś rzucił okien na to może można jakoś lepiej to zrobić. Może większe znaczenie ma to że, przetwornik działa w trybie free.
    sprawdzenie klawiatury i akcja
    Kod: c
    Zaloguj się, aby zobaczyć kod

    zliczanie i przerwania i obsługa
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Moderator Mikrokontrolery Projektowanie
  • Poziom 20  
    tmf napisał:
    Wszystko jest ok, jeśli zakładasz, że na raz naciskasz tylko jeden przycisk. Oryginalny kod ze strony ci działa?

    Nie testowałem tylko się wzorowałem na nim i zrobiłem swoją własna obsługę(by coś zapamiętać a nie tylko kopiuj i wklej).
    Którą wkleiłem w poprzednim poście. Mogę przetestować twój kod ze strony ale rewelacji nie wróże dopóki po zwarciu S14 nie osiągnę napięcia zbliżonego do 1.20V
    narazie uzyskuje 414mV(zmierzone multimetrem AGND i Analog_out) gdyż przy takim VCC( max 414mV)i rezystorach 5% odstępy nieraz wynoszą np S13(404mV) w stosunku do S14(414) wtedy wychodzi na tzw.styk nie mam pojęcia co może powodować taki spadem napięcia aż (786mV)?? mikroswitche mam duże takie 12x12 mm są to wyluty z klawiatury przekształtnika tyrystorowego może są już zaśniedziałe w środku tylko dziwne że, wszystkie 14.
  • Moderator Mikrokontrolery Projektowanie
  • Poziom 20  
    tmf napisał:
    To nie jest mój kod! BTW, po zwarciu S14 powinieneś dosatać napięcie jakie na S14 podajesz - dla tego przycisku nie ma żadnego dzielnika.

    No właśnie a nie dostaje nawet zbliżonego napięcia do tego co daje (1.20V) dlaczego??
  • Moderator Mikrokontrolery Projektowanie
    Odepnij tymczasowo wszystkie inne przyciski i rezystory i uruchamiaj po kolei. Przyczyną może być po prostu błąd w montażu, jakaś pomyłka. To napięcie mierzysz miernikiem? Bo jeśli wynika ono z pomiaru ADC to sprawdź miernikiem, niezgodność sugeruje błąd w programie.
  • Poziom 20  
    tmf napisał:
    Odepnij tymczasowo wszystkie inne przyciski i rezystory i uruchamiaj po kolei. Przyczyną może być po prostu błąd w montażu, jakaś pomyłka. To napięcie mierzysz miernikiem? Bo jeśli wynika ono z pomiaru ADC to sprawdź miernikiem, niezgodność sugeruje błąd w programie.

    Mierze multimetrem dość dobrym i dla napięcia(415mV przetwornik wykazuje około 350-360 ADC) Płytka robiona przez firme z opisami że, wystarczyło tylko przylutować rezystorem w swoje miejsce opisane na PCB mierzyłem każdy rezystor osobno i każdy mieści się w tolerancji 5% lub 1% bo cześć mam takich i takich.
    Może coś wycina dławik 10uH którym łącze masy GND i AGND. Bo problem wykazuje TL431 który jest na masie AGND druga TL431 która jest na GND zachowuje się normalnie i ma wyższe napięcie o 0.7V na wyjściu.
  • Specjalista - Mikrokontrolery
    Zastanów się czy masz dobrze podłączony rezystor R4.
  • Poziom 20  
    michalko12 napisał:
    Zastanów się czy masz dobrze podłączony rezystor R4.

    Jest dobrze podłączony jest na nim 5V od strony zasilania(AVCC) a z drugiej strony 2V.Podłączyłem płytkę z klawiaturą pod inne zasilanie i żadnych zmian dopiero jak podniosę zasilanie do 3.3V to uzyskuje 1.20V na wyjściu S14, sprawdziłem cała płytkę (tzn tor ścieżka przyciski bez kalkulatora opory sumują się poprawnie) bez rozbierania jej na części pierwsze. Sprawdzałem na zwarcie z innymi przyciskami czymkolwiek co jest na płytce nawet ułamka Ω niema :(. Niewiem co jest ale bez względu na to jaki przycisk wcisnę obojętnie jaki zmienia się napięcie zasilania np wcisne np S14 na zasilaniu spada mi napięcie z 1.20V do 0.414 najmniejszy spadek jest na S1 bo wynosi tylko 0.2V. Sprawdziłem jeszcze ten 90R i tu jest coś nie tak bo od strony AVCC jest 1.2V i 1.2V za rezystorem opornik sprawny multimetr pokazuje 93R na tym drugim źródle jest ok bo 5V od VCC i 1.8V za opornikiem. czyżby TL431 robił zwarcie??
  • Specjalista - Mikrokontrolery
    Przyjrzyj się jeszcze raz na aplikację TL431! R4 nie powinien być podłączony do AVCC!
  • Poziom 20  
    michalko12 napisał:
    Przyjrzyj się jeszcze raz na aplikację TL431! R4 nie powinien być podłączony do AVCC!

    Właśnie patrze figura 2 rezystor od strony input(nie napisane jakie to ma być napięcie VCC czy AVCC) i rezystory ustawiające Vref na poziomie 2.55V rezystorami.
    Figura 2 gdy Vk>Vref (mój przypadek) też z rezystorami. Niech kolega uzasadni sensownie dlaczego VCC a nie AVCC ( u mnie AVCC to to samo co VCC tylko że, filtrowane dławikiem). Czyli podłączone tak jak w nocie żadnych anomalii niema.
  • Pomocny post
    Specjalista - Mikrokontrolery
    No to gratuluję umiejętności czytania ze zrozumieniem.
    Podeślę Ci kolorowy obrazek to może Ci coś rozjaśni
    ATMEGA 16A - Zle wskazania klawiatury

    I z tego co widzę to chyba nie rozumiesz zasady działania tego układu.
  • Poziom 20  
    michalko12 napisał:
    No to gratuluję umiejętności czytania ze zrozumieniem.
    Podeślę Ci kolorowy obrazek to może Ci coś rozjaśni
    ATMEGA 16A - Zle wskazania klawiatury

    I z tego co widzę to chyba nie rozumiesz zasady działania tego układu.

    Rozumieć rozumiem jak to działa tak z grubsza:
    Rezystor na zasilaniu ogranicza prąd idący z zasilania na dzielnik złożony z rezystorów żeby układ działał musimy podać napięcie na Vref tl431 wymaga 2,55V gdy to napięcie zostanie osiągnięte wtedy ustala się napięcie na katodzie które jest naszym napięciem wyjściowym. Nie zauważyłem tego że, biorę napięcie na dzielnik bezpośrednio z zasilania a nie przez ten rezystor 90R jak w dokumentacji pomroczność jasna taki niuans....:(

    Edit:
    Panowie chyba doszedłem do istoty problemu :)
    Wykonałem jeszcze dzisiaj parę testów podłączyłem na stykówce moją klawiaturę z TL431 i potencjometrem ustawiłem napięcie, dokładnie jak w nocie żadnej poprawy:(
    Następnie podłączyłem klawiaturę bezpośrednio pod VCC i potencjometrem ustawiłem pożądany poziom napięcia efekt ten sam.
    Aż w końcu nerwy mi puściły i podłączyłem klawiaturę bezpośrednio pod VCC aż zaniemówiłem z wrażenia podając 4.30V na klawiaturę jako VCC wciskając S14 miernik pokazał ładne napięcie napięcie 4.20V:) czyli wszystko w miarę ok klawiatura jest sprawna.

    Po prostu muszę zmienić źródło napięcia odniesienia na dedykowane 1.2V bez dodatkowych elementów (na zasadzie podłączamy zasilanie masę i na wyjściu jest odpowiednie napięcie) i źródłem w rozsądnej kwocie cenowej 9zl netto jest MAX6120 i na niego się planuje zdecydować rozważałem jeszcze REF3112AIDBZT ale jest dość drogi 16zł netto myślę że, tamten wystarczy mam rację??