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

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

mich1990 04 Lut 2015 12:57 804 6
REKLAMA
  • #1 14402528
    mich1990
    Poziom 8  
    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

    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?
  • REKLAMA
  • #2 14402595
    BlueDraco
    Specjalista - Mikrokontrolery
    Mamy. Pokaż cały program, a przynajmniej większą jego część.
  • REKLAMA
  • #3 14402654
    mich1990
    Poziom 8  
    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 / 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
    #4 14402661
    vania
    Poziom 24  
    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?
  • REKLAMA
  • #5 14402677
    mich1990
    Poziom 8  
    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.
  • REKLAMA
  • Pomocny post
    #6 14402734
    vania
    Poziom 24  
    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
  • #7 14402777
    mich1990
    Poziom 8  
    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 / 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!
REKLAMA