logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega 8A - Wykorzystanie pinu raz jako wejście a raz jako wyjście

yaceq8 30 Mar 2013 12:51 2943 8
REKLAMA
  • #1 12131647
    yaceq8
    Poziom 10  
    Witam
    Mam taki problem. Brakuje mi w mojej Atmedze 8a jednego pinu... Nie chcę kupować 16tki z tego powodu, staram się jakoś wykombinować jak zmieścić wszystko w 8. I wpadłem na pomysł czy da się podłączyć dwa urządzenia do jednego pinu - jedno wejściowe a drugie wyjściowe i zamiennie sterować nimi. Urządzeniem wyjściowym miałby być buzzer natomiast wejściowym odbiornik radiowy. Buzzer będzie załączany o konkretnych godzinach ustawionych przez użytkownika, podobnie jak odbiornik radiowy, będzie włączany tylko na pewien czas po czym nie będzie trzeba z niego korzystać. Jednocześnie nigdy nie będą działały, a jeżeli by zaszła taka potrzeba to 'większy priorytet' będzie mieć buzzer. I tutaj moje pytanie czy da się coś takiego zrealizować?
    Buzzer podłączam przez tranzystor i opornik do pinu, natomiast odbiornik radiowy bezpośrednio. Jeżeli chodzi o programowe zrobienie tego wydaje mi się, że nie będzie problemu, wystarczy tylko przed przystąpieniem do użycia buzzera ustawić port jako wyjściowy, dla odbiornika odwrotnie jako wejściowy. Ale jeżeli chodzi o fizyczne podłączenie elementów domyślam się, że będzie trzeba zastosować jakieś dodatkowe części, żeby można było użyć odpowiedniego układu. Dla buzzera żeby transmisja była tylko z pinu w jego stronę a dla odbiornika żeby transmisja mogła być tylko z niego do Atmegi. I pytanie tutaj czy dobrze myślę i jeżeli tak to jakie układy można zastosować? Jakieś bufory jednokierunkowe?
  • REKLAMA
  • REKLAMA
  • #3 12131743
    yaceq8
    Poziom 10  
    Ogólnie robię dla siebie taki zegar/budzik wraz z pomiarem temperatury w domu i na dworze - do tego na dworze właśnie potrzebuje odbiornik. Do schematu teraz dostępu nie mam, wrzucę później.
    Mam 6 przycisków ustawionych matrycowo - 3 linie wejściowe i 2 wyjściowe podłączone do INT0 i INT1 także w sumie 5 linii na to potrzebuje. Do tego 4 wyświetlacze 7seg multipleksowane co zużywa kolejne 8+4 linii czyli 12. Do tego jest ten odbiornik, buzzer, termometr wewnętrzny i fotorezystor do sterowania jasnością wyświetlaczy czyli dodatkowe 4 linie. W sumie do mi daje 21 linie... A w ATmedze 8 mam ich 20.
  • #5 12131890
    piotrva
    VIP Zasłużony dla elektroda
    Dalej sterowanie LED możesz zrobić na driverze jakimś, choćby 74hc595. Wtedy z 12 linii robi Ci się 8 lub nawet 4.
  • REKLAMA
  • REKLAMA
  • #8 12132346
    yaceq8
    Poziom 10  
    dondu napisał:
    Możliwości jest wiele.
    Możesz np. zrobić klawiaturę na ADC: http://mikrokontrolery.blogspot.com/2011/03/epp-klawiatura-adc-by-dondu.html

    Schemat przyda się na pewno.

    Dzięki! Wygląda to interesująco i pewnie z tego pomysłu bym skorzystał, gdyby nie to, że... chciałem jednak mieć podłączone przyciski pod piny INT0 i INT1 żeby nauczyć się obsługiwać przerwania zewnętrzne tym sposobem ;) Chyba, że to też nie jest najlepszy pomysł?

    piotrva napisał:
    Dalej sterowanie LED możesz zrobić na driverze jakimś, choćby 74hc595. Wtedy z 12 linii robi Ci się 8 lub nawet 4.

    Również dziękuję! I jak na razie ten pomysł najbardziej mi się podoba. Ciężko jest oprogramować takie wyświetlanie przez te rejestry? Na razie mam zrobione liczenie czasu na timerze2, na timerze0 obsługę wyświetlacza no i pomiar temperatury.

    snnaap napisał:
    Jaki "termometr" - 1 wire?

    Myślał bym nad połączeniem przycinku z termometrem.

    A co to za odbiornik?

    Tak, termometr na 1-wire, DS18B20.
    Odbiornik jakiś z Chin za 5zł z e-baya ;) Model odbiornika to MX-05V a nadajnika MX-FS-03V.

    Tomasz Gumny napisał:
    Temat był już poruszany, m.in tutaj: www.elektroda.pl/rtvforum/topic2381880.html lub bezpośrednio: http://www.edn.com/file/25459-Eight_digit_cou...s_with_common_anode_or_common_cathode_PDF.pdf

    I dzięki za te linki. Nie brałem pod uwagę żeby oszczędzić na pinach przy wyświetlaczu, jakoś nie przyszło mi to do głowy ;) Jedyny pomysł jaki miałem to podłączenie dwóch urządzeń pod jeden pin, ale jeżeli o tym nic nie piszecie to pewnie nie jest to najlepszy pomysł ;)

    Dołączam też schemat.
    W kwestii wyjaśnienia oznaczeń i schematu. Zegarek ma się składać z 3 płytek - dolnej czyli tej, którą dołączam, przedniej z wyświetlaczami i gornej z klawiaturą. Dlatego wszędzie tam są jumpery podłączone do pinów.
    TERM to termometr wewnętrzny (też na osobnej małej płytce zrobiony) TEMP_ZEW to ten odbiornik, BUZZ wiadomo. KLAW, KLAW2 i KLAW3 to moja klawiatura z 6 przyciskami, wykorzystująca 5 linii. Dlaczego jest tam GND? Otóż nie jest związane z klawiaturą a wyświetlaczem. Kropek w nich nie podpinałem, zamiast tego jako ósmy pin mam dwa LEDy oddzielające godziny od minut. I do nich właśnie potrzebuję masę. WYSW i WYSW2 to 7 segmentów + diody a WYSW3 steruję multipleksowaniem. Zasilania są oznaczone jako 5V i 5V/1 - jedno to zasilanie główne bateryjne z aku AA, natomiast drugie to awaryjne podtrzymujące zsilanie z mniejszej baterii zasilające tylko ATmegę. Fotorezystora nie mam jeszcze zaprojektowanego. I zamiast kwarcu 16MHz mam podłączony oczywiście zegarkowy 32kHz ;) Zapomniałem tego na schemacie zmienić.

    ATmega 8A - Wykorzystanie pinu raz jako wejście a raz jako wyjście
  • #9 12134192
    Pittt
    Poziom 32  
    Próbkowanie klawiatury połącz z multipleksowaniem wyświetlaczy.
REKLAMA