Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega16] problem z przyciskami

retriever 18 Wrz 2009 02:24 771 5
  • #1 18 Wrz 2009 02:24
    retriever
    Poziom 2  

    Witam. Właśnie jestem w trakcie mojego pierwszego projektu (chyba zbyt wymagającego jak na moje umiejętności). Mój problem polega na tym, że kilka przycisków zachowuje się tak, jakby zawsze były wciśnięte (schemat płytki zamieszczam poniżej). Przyciski w zielonej elipsie działają poprawnie, natomiast te zaznaczone w czerwonej sprawiają mi problem.

    [atmega16] problem z przyciskami

    Program na razie miał za zadanie po prostu sprawdzić czy przyciski działają, no i problem w tym, że tak nie jest. Najpierw zapalam diodę, następnie po wciśnięciu przycisku gasi ją - i nic poza tym. Wiem, że program dobrze jest napisany, bo w przypadku tych "działających" przycisków wszystko gra. Przyciski też nie są zepsute (sprawdzone multimetrem). Jako, że jestem początkujący - nie mam pojęcia o co może chodzić i co z tym zrobić. Próbowałem odlutować kondensatory przy przyciskach, co też nie dało żadnego efektu. Czy to możliwe, że ścieżka prowadząca do GND jest zbyt długa? Ma ktoś jakiś pomysł?

    Z góry dziękuję za pomoc,
    pozdrawiam

    0 5
  • #3 18 Wrz 2009 11:47
    retriever
    Poziom 2  

    Tak.

    Code:
    #include <avr/io.h> 
    
    #include <util/delay.h>               

    int main(void)
    {
        DDRB  |= _BV(3);               
        PORTB &= ~_BV(3);
       DDRC = 0xC0;
        PORTC |= 0x3F;                     
        unsigned char i;
       for (i = 0; i <100; i++)
               _delay_ms(5);
        while(1)
        {
          if(bit_is_clear(PINC, PC1))
            PORTB |= _BV(PB3);
          if(bit_is_clear(PINC, PC0))
            PORTB |= _BV(PB3);
          //if(bit_is_clear(PINC, PC2))   // to już nie działa
          //  PORTB |= _BV(PB3);
        }
        return 0;
    }

    Program niby głupi, ale ma tylko wyłączyć diodę. Dla PC0 i PC1 działa, ale jak już każdy inny przycisk uwzględnię to dioda po opóźnieniu programowym gaśnie.

    Sprawdzałem też na innej ATmedze, więc wina uC to też nie jest :/

    0
  • Pomocny post
    #4 18 Wrz 2009 12:41
    cackoarek
    Poziom 25  

    Drogi przyjacielu. A czy masz wyłączonego Jtaga? Bo to chyba są akurat te końcówki uP (JTAG: PC.2 do PC.5)

    0
  • #5 18 Wrz 2009 12:55
    retriever
    Poziom 2  

    Dzięki :D Nie był wyłączony. W życiu bym na to nie wpadł :) Pozdrawiam.

    0
  • #6 18 Wrz 2009 12:57
    cackoarek
    Poziom 25  

    W woli podsumowania:

    datasheet napisał:
    When the JTAGEN fuse is unprogrammed, these four TAP pins are normal port pins and the TAP controller is in reset. When programmed and the JTD bit in MCUCSR is cleared, the TAP input signals are internally pulled high and the JTAG is enabled for Boundary-scan and programming.
    In this case, the TAP output pin (TDO) is left floating in states where the JTAG TAP
    controller is not shifting data, and must therefore be connected to a pull-up resistor or other hardware having pull-ups (for instance the TDI-input of the next device in the scan chain).


    I najważniejsze zdanie:

    datasheet napisał:
    The device is shipped with this fuse programmed.


    Pozdrawiam i radź tam sobie :)

    0