X

Arduino - kwestia zasilenia oraz klawiatura

bombardier89 21 Jan 2013 19:10
  • #1 21 Jan 2013 19:10
    bombardier89
    Level 14  
    Helpful post? (0)
    Witam,
    od jakiegoś czasu tworzę pewien projekt, który obecnie wykorzystuje klawiaturę z drabinki rezystorowej ( taką ) oraz LCD zgodny z HD44780. Projekt obecnie jest na płytce stykowej, zasilany jest stabilnym napięciem +5V z USB.
    Sprawa zaczyna wyglądać mniej kolorowo, gdy projekt był na tyle gotowy programistycznie, abym mógł go umieścić w obudowie. Zasilanie musi być bateryjne, a obudowa jest dość kompaktowa - mam więc pierwszy problem. Stąd moje pierwsze dwa pytania: jakim minimalnym napięciem musi być zasilane Arduino oraz czym je zasilić? Aktualnie moim jedynym pomysłem są dwa akumulatorki od telefonów 3,6V połączone szeregowo, rozumiem że stabilizatora nie trzeba bo Arduino posiada już własny. Obawiam się tylko, że przez kompaktowość obudowy mogę wszystkiego nie zmieścić wewnątrz - może są jakieś inne akumulatory zajmujące stosunkowo mało miejsca oraz dające wystarczające napięcie na zasilenie Arduino wraz z LCD (bez podświetlenia)?
    Drugim problemem jest klawiatura, klawiatura z drabinki rezystorowej jest dobra przy stabilnym, stałym napięciu, jednakże jeśli użyję zasilania bateryjnego to boję się o stabilność odczytu rezystancji przez piny analogowe (wszak napięcie będzie ulegało znacznym wahaniom z biegiem czasu pracy, a programistycznie rzecz jest rozwiązana przez okreslenie przedziału wartości z przetwornika ADC dla każdego utworzonego przycisku w drabince). Wygooglałem patent, który zwie się klawiatura matrycowa i tu właśnie pojawia się kolejny problem - docelowo muszę mieć 24 przyciski, czyli taka klawiatura zużyje mi 10 pinów cyfrowych (5x5). 7 (lub 8, nie pamiętam) pinów cyfrowych będzie zajęte przez LCD. Czy da się jakoś stworzyć taką klawiaturę korzystając również z pinów analogowych w Arduino? Czy macie jakiś inny pomysł na rozwiązanie problemu klawiszy?
    Proszę o pomoc,
    Pozdrawiam!
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Helpful post
    #2 21 Jan 2013 19:26
    BlueDraco
    Specjalista - Mikrokontrolery
    Helpful post? (0)
    Wystarczy zasilać drabinkę klawiatury z tego samego źródła, z którego pochodzi napięcie odniesienia ADC (być może wręcz z wyjścia VREF, jeśli rezystory nie są za małe) - wtedy napięcie może być dowolne. Z tym "stabilnym zasilaniem z USB" to niezły dowcip...)
  • #3 21 Jan 2013 19:32
    bombardier89
    Level 14  
    Topic author Helpful post? (0)
    Czyli w przypadku Arduino wystarczy, jeśli zamiast do +5V podepnę klawiaturę do pinu REF tutaj?
    Arduino - kwestia zasilenia oraz klawiatura
  • Helpful post
    #4 21 Jan 2013 19:40
    BlueDraco
    Specjalista - Mikrokontrolery
    Helpful post? (0)
    Pewnie tak, ale zmierz napięcie na VREF przed i po przypięciu. Jeśli się (prawie) nie zmieni - to ok.
  • #5 21 Jan 2013 19:42
    bombardier89
    Level 14  
    Topic author Helpful post? (0)
    Ok, przetestuję to - dzięki wielkie.
    W przypadku niepowodzenia chciałbym jednak wiedzieć, czy piny analogowe mogą mi zastąpić cyfrowe jeśli chodzi o tę klawiaturę matrycową ;) Jakieś mądre pomysły na zasilenie całości też by mi bardzo pomogły.
  • #6 21 Jan 2013 21:15
    BlueDraco
    Specjalista - Mikrokontrolery
    Helpful post? (0)
    To zależy, które analogowe. Linie portów - tak, ale specjalizowane - tylko analogowe - nie. ATmega8 w LQFP (poprawka) ma dwie linie tylko analogowe.
  • Helpful post
    #7 21 Jan 2013 23:14
    piotrva
    Moderator Mikrokontrolery
    Helpful post? (0)
    BlueDarco, no fajnie, każesz gościowi pobierać prąd ze źródła napięciowego zaznaczając tylko
    BlueDraco wrote:
    jeśli rezystory nie są za małe


    Skoro to ma być klawiatura rezystancyjna to robisz tak:
    1. Konfigurujesz źródło napięcia odniesienia na napięcie zasilania procesora.
    2. Górny koniec drabinki podpinasz pod to samo napięcie, którym zasilany jest procesor. Masz wtedy efekt, którego oczekiwałeś i dodatkowo pomiar "drabinki" jest zupełnie niezależny od napięcia zasilania. Jeśli np. wciśnięcie przycisku daje Ci wynik 649 to nieważne czy zasilisz całość z 5V, czy z 3V - wynik pozostanie niezmienny (pomijam normalne szumy i wahania), bo wraz ze zmianą zasilania zmieni się także napięcie odniesienia dla przetwornika, a jako że wynik pomiaru zależy od stosunku rezystancji nad i pod przyciskiem (a stosunek się nie zmienia) to wynik się też nie zmieni.

    Jeśli wykonujesz pomiary analogowe i musisz korzystać z wewnętrznego źródła napięcia odniesienia to możesz skorzystać z napięcia na nodze VREF, ale musisz w drabince dać na tyle duże rezystory, żeby w skrajnym przypadku nie obniżyć na niej napięcia i przez to nie uszkodzić źródła napięcia - na dobrą sprawę powinno się w takiej sytuacji zbudować wtórnik.

    Atmega8/168 ma 6 kanałów ADC dzielonych ze zwykłymi liniami I/O PORTC, a dodatkowo wersja SMD (nie wiem czy są one wyprowadzone w Arduino) posiada 2 dodatkowe kanały tylko ADC. Ale tak czy siak jeśli na każdym kanale ADC podpiąłbyś po 5 przycisków to masz już 30 przycisków na 6 pinach. A do klawiatury matrycowej możesz też zastosować jakieś układy rozszerzające ilości portów. Np. PCF8574 po I2C (na 2 kościach masz nawet 64 przyciski a w procesorze zajęte tylko 2 piny lub ewentualnie trzeci, jeśli chcesz mieć wykrywanie naciśnięcia na przerwaniu), albo komplet układów wejścia/wyjścia na magistrali SPI - wtedy na 4 przewodach masz też 64 przyciski.
  • #8 21 Jan 2013 23:35
    BlueDraco
    Specjalista - Mikrokontrolery
    Helpful post? (0)
    Można też wziąć mikrokontroler, który ma tyle linii portów, ile jest potrzebnych, zamiast wygłupiać się z ekspanderami I2C, których cena jest porównywalna z ceną mikrokontrolera.

    Tak to jest, kiedy projekt zaczyna się od określenia na sztywno typu mikrokontrolera, zamiast od spisania wymagań i wyboru układów na podstawie tych wymagań. Co za problem wziąć uC z 64 wyprowadzeniami, jeśli tyle trzeba?

    Gdybym tak postępował, do dzisiaj robiłbym wszystko na 80C51... ;)
  • Helpful post
    #9 22 Jan 2013 00:38
    dondu
    Moderator Mikrokontrolery Projektowanie
    Helpful post? (0)
    bombardier89 wrote:
    ... czy piny analogowe mogą mi zastąpić cyfrowe jeśli chodzi o tę klawiaturę matrycową ;)

    A czemu nie zrobić klawiatury na ADC?: http://mikrokontrolery.blogspot.com/2011/03/epp-klawiatura-adc-by-dondu.html
  • #10 22 Jan 2013 00:51
    piotrva
    Moderator Mikrokontrolery
    Helpful post? (0)
    Przecież właśnie o takim pomyśle dyskutujemy od początku tematu...
  • #11 22 Jan 2013 01:03
    dondu
    Moderator Mikrokontrolery Projektowanie
    Helpful post? (0)
    ... więc wskazałem konkretny przykład wraz z kalkulatorem rezystorów :)
  • #12 22 Jan 2013 01:07
    piotrva
    Moderator Mikrokontrolery
    Helpful post? (0)
    I chwała Ci za tego bloga, bo jest w nim kompendium wiedzy o avr;-)
  • #13 22 Jan 2013 01:10
    dondu
    Moderator Mikrokontrolery Projektowanie
    Helpful post? (0)
    Oj nie ... to tylko uzupełnienie książek Tomka, Mirka, czy też innych :)
    Zawsze będę uważał, że książka choćby wypożyczona z biblioteki, daje kopa w postaci skrócenia czasu nauki + fora dyskusyjne ...

    Ale nie róbmy off-top'u :)
  • #14 22 Jan 2013 02:02
    bombardier89
    Level 14  
    Topic author Helpful post? (0)
    piotrva wrote:
    Skoro to ma być klawiatura rezystancyjna to robisz tak:
    1. Konfigurujesz źródło napięcia odniesienia na napięcie zasilania procesora.
    2. Górny koniec drabinki podpinasz pod to samo napięcie, którym zasilany jest procesor. Masz wtedy efekt, którego oczekiwałeś i dodatkowo pomiar "drabinki" jest zupełnie niezależny od napięcia zasilania. Jeśli np. wciśnięcie przycisku daje Ci wynik 649 to nieważne czy zasilisz całość z 5V, czy z 3V - wynik pozostanie niezmienny (pomijam normalne szumy i wahania), bo wraz ze zmianą zasilania zmieni się także napięcie odniesienia dla przetwornika, a jako że wynik pomiaru zależy od stosunku rezystancji nad i pod przyciskiem (a stosunek się nie zmienia) to wynik się też nie zmieni.


    Ale bomba, właśnie takiej odpowiedzi oczekiwałem - super, bardzo mi pomogłeś :)
    Rozumiem więc, że zgodnie z TYM mam ustawić analogReference(EXTERNAL); w funkcji void setup()?
  • Helpful post
    #15 22 Jan 2013 09:27
    piotrva
    Moderator Mikrokontrolery
    Helpful post? (0)
    Nie, DEFAULT żeby pobierał odniesienie z zasilania
  Search 4 million + Products
Browse Products