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.

[ATmega32A][C] - Pin podciągnięty do Vcc nie wykrywa załączenia

04 Lut 2015 12:57 630 6
  • Poziom 6  
    Problem wygląda następująco...
    Mam 2 wyłączniki krańcowe podpięte do portu C (Piny 1 i 2). Obydwa są są podciągnięte do Vcc przez wewnętrzne rezystory podciągające. Wyłączniki są normalnie rozłączone i zwierają układ w momencie załączenia. Mój problem polega na tym że załączenie jest wykrywane tylko dla pinu 1, a 2 nie jest wykrywany.

    Zamieniałem przełączniki miejscami i mogę stwierdzić że obydwa działają poprawnie, problem leży po stronie mikrokontrolera. Obawiam się że nie dysponuję chwilowo miernikiem i nie mogę sprawdzić dokładnego poziomu napięcia na pinie. Z konieczności podłączyłem zwykłą diodę RGB, która wskazuje na normalną pracę układu (normalnie świeci, a gaśnie dla załączenia wyłącznika)

    Poniżej zamieszczam fragment kodu odpowiedzialny za detekcję załączenia. Nie sądzę by był tu błąd, gdyż działa normalnie po zmianie na PC1

    Code:
    while(1)
    
       {
          _delay_ms(500);
          if((PINC & 0b00000100) == 0)break;
       }


    Dla pinu 2 program wychodzi z pętli w pierwszym obejściu.

    Czy macie jakieś sugestie odnośnie przyczyny problemu?
  • Specjalista - Mikrokontrolery
    Mamy. Pokaż cały program, a przynajmniej większą jego część.
  • Poziom 6  
    Z wklejeniem całego kodu mogą być problemy bo jest pofragmentowany na wiele funkcji. Tu zamieszczam ustawienia pinów. To w sumie wszystko co odnosi się do tych nieszczęsnych krańcówek

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Moderowany przez dondu:

    Od następnego postu używaj proszę znacznika SYNTAX zamiast CODE. Ten post poprawiłem za Ciebie.

  • Pomocny post
    Poziom 22  
    mich1990 napisał:
    Problem wygląda następująco...
    Mam 2 wyłączniki krańcowe podpięte do portu C (Piny 1 i 2). Obydwa są są


    JTAG wyłączony fusebitami lub w kodzie?
  • Poziom 6  
    vania napisał:
    mich1990 napisał:
    Problem wygląda następująco...
    Mam 2 wyłączniki krańcowe podpięte do portu C (Piny 1 i 2). Obydwa są są


    JTAG wyłączony fusebitami lub w kodzie?

    JTAG nie ruszałem w ogóle bo korzystam z programatora usbasp, który nie ma tego interfejsu.
  • Pomocny post
    Poziom 22  
    mich1990 napisał:
    vania napisał:
    mich1990 napisał:
    Problem wygląda następująco...
    Mam 2 wyłączniki krańcowe podpięte do portu C (Piny 1 i 2). Obydwa są są


    JTAG wyłączony fusebitami lub w kodzie?

    JTAG nie ruszałem w ogóle bo korzystam z programatora usbasp, który nie ma tego interfejsu.


    Z tego co pamiętam domyślnie fusebit JTAGEN jest zaprogramowany (0). Oznacza to że JTAG jest włączony i niektóre z pinów portu C są zajęte pod sygnały JTAG.

    Pułapki AVR: JTAG blokuje piny portu
  • Poziom 6  
    vania napisał:
    mich1990 napisał:
    vania napisał:
    mich1990 napisał:
    Problem wygląda następująco...
    Mam 2 wyłączniki krańcowe podpięte do portu C (Piny 1 i 2). Obydwa są są


    JTAG wyłączony fusebitami lub w kodzie?

    JTAG nie ruszałem w ogóle bo korzystam z programatora usbasp, który nie ma tego interfejsu.


    Z tego co pamiętam domyślnie fusebit JTAGEN jest zaprogramowany (0). Oznacza to że JTAG jest włączony i niektóre z pinów portu C są zajęte pod sygnały JTAG.

    Pułapki AVR: JTAG blokuje piny portu


    Masz rację, po twoim poprzednim poście poczytałem troszkę i znalazłem temat na jakimś innym forum pokazujący jak ten interfejs wyłączyć. Wyłączyłem JTAG i wszystko działa!

    Dla innych z tym problemem...
    Musicie zaprogramować 7 bit rejestru MCUCSR, dwukrotnie w czasie 4 cykli. Wystarczy zwykłe:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    By zadziałało należy ustawić optymalizację kodu, dla atmel studio jest to w ustawieniach Project/properties.

    Szczerze dziękuję za pomoc!