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.

[ATmega8][C]- niedziałający wewnętrzny pull-up

MacusBeal 08 Wrz 2012 09:23 972 2
  • #1 08 Wrz 2012 09:23
    MacusBeal
    Poziom 2  

    Witam,
    jestem początkujący jeśli chodzi o AVR i programowanie więc z góry dziękuję za wszelkie rady, otóż po programowym ustawieniu pull-up-ów na pinach z podłączonymi przyciskami mikrokontroler przy wykonywaniu programu zachowuje się tak jak by ich nie było (przy 1 przycisku działał normalnie) zaczął poprawnie wykonywać program dopiero po dodaniu zewnętrznych rezystorów podciągających.

    Poniżej wrzucam kod i schemat.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    [ATmega8][C]- niedziałający wewnętrzny pull-up

    Będę wdzięczny za wszelką pomoc.

    0 2
  • Pomocny post
    #2 08 Wrz 2012 10:03
    drzasiek
    Specjalista - Mikrokontrolery

    Jakbyś zerknął do pliku nagłówkowego - iom8 -który załączasz pośrednio poprzez

    Kod: c
    Zaloguj się, aby zobaczyć kod

    To byś zobaczył definicje wyprowadzeń, np dla portu D którego używasz:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jak widzisz PD0 to jest 0 lub binarnie 00000000
    A PD1 to jest 1 lub binarnie 00000001
    Więc teraz jeśli masz defincje następujące:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    I następnie używasz ich w programie w taki sposób:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    To poprostu tam gdzie chcesz ustawić przycisk 2 ustawiasz przycisk 1 a tam gdzie chcesz ustawić przycisk 1 nie robisz nic.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    czyli
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Kasuje "żaden" bit w rejestrze DDR.
    i analogicznie

    Kod: c
    Zaloguj się, aby zobaczyć kod

    czyli
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ustawia "żaden bit w rejestrze DDR.

    Jeśli używasz definicji w taki sposób:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    To jeśli chcesz ustawić/skasować dany bit w rejestrze, to musisz z tej definicji zrobić wartość bitową, czyli 0 to jest zerowy bit czyli 00000001 a 1 to jest pierwszy bit czyli 00000010.
    Można to zrobić np przesuwając bitowo liczbę 1 o PDx miejsc w lewo, np:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    lub korzystając z makra:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 08 Wrz 2012 10:14
    MacusBeal
    Poziom 2  

    Dzieki wielkie, ustawilem przesunięcie bitowe tak jak powiedziales i zadziałało :)

    0