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

[ATMega8 SMD][C] Nie działają wejścia.. dziwny przypadek

kiuba 10 Lis 2009 02:20 1647 8
REKLAMA
  • #1 7239653
    kiuba
    Poziom 10  
    Dobra, poddaję się i piszę posta ;)
    Sprawa jest tak dziwna, że sam nie wiem co jest grane.
    W procesorze ATMega8 nie działają wejścia, nie mam pojęcia o co może chodzić.
    Do tej pory nie było z tym nigdy problemu, teraz przeszedłem na obudowę SMD (raczej bez związku) i mam problem.
    Do procesora jest podłączony DIPSwitch kodujący, miedzy innymi do nóżki PORTC-3.
    ustawienia:
    DDRC=0x00;
    PORTC=0xFF;
    Dipswitch zwiera do masy, napięcia pomierzone, wszystko się zgadza.
    Wyjście testowe podpisane pod makro OUTon; (oraz OUToff;) działa.


    Mam taką pętlę:

    
    while(1){
    	OUTon;
    	delayms(5);
    	if(!(PINC & _BV(PC3))) {OUTon;} else {OUToff;}
               delayms(60);
    
               OUToff;
    	delayms(200);
               }
    


    Czyli powinno migać delikatnie (5ms) jak włącznik do masy nie zwiera, a dłużej (65ms) jak zwiera.
    A tu nic, zawsze widzi tego if'a jako niespełnionego, nawet jak odwrócę logikę i wywalę "!".

    Co więcej nawet jak zrobię:
    
    if(PORTC!=0xFF) {OUTon;} else {OUToff;}
    

    i sobie zwieram do masy ładnie co popadnie to też NIC... if nigdy nie jest spełniony.
    Jakiś pomysł:?: :?: :?: :|
  • REKLAMA
  • #2 7239847
    mirekk36
    Poziom 42  
    ja tam zawsze robię tak:

    if(!(PINC & (1<<3))) {OUTon;} else {OUToff;} 


    albo tak:

    #define klawisz1 3
    if(!(PINC & (1<<klawisz1))) {OUTon;} else {OUToff;} 


    albo tak:

    #define klawisz1 (1<<3)
    if(!(PINC & klawisz1)) {OUTon;} else {OUToff;} 


    no chyba że PC3 jest zdefiniowane w avrio.h jako 3 to wtedy

    if(!(PINC & (1<<PC3))) {OUTon;} else {OUToff;} 


    i musi zadziałać ;)
  • REKLAMA
  • #3 7240007
    kamyczek
    Poziom 38  
    Tak jak napisał kolega mirekk36 port posiada rejestr do konfiguracji kierunku ddrx, podciągania lub sterowania stanem wyjścia portx i odczytem stanu na wejściu czyli pinx . Proponuję zerknąc w notę katalogową ;)
  • #4 7240460
    Freddy
    Poziom 43  
    kiuba napisał:
    ... Do tej pory nie było z tym nigdy problemu, teraz przeszedłem na obudowę SMD (raczej bez związku) i mam problem ...

    Zadam może i głupie pytanie, oczywiście zwróciłeś uwagę na inną numerację pinów. Obudowa DIP ma 28, a SMD 32 piny !
  • REKLAMA
  • #5 7241124
    zdebel
    Poziom 15  
    A ja przy okazji spytam, czy takie bezposrednie zwieranie przez dipswitcha nóżek do masy to dobre rozwiązanie? Wystarczy wewnętrzny pull-up, czy warto dorzucić zewnętrzny pull-up? Chodzi mi o kwestię wydajności prądowej.
  • #6 7241302
    tmf
    VIP Zasłużony dla elektroda
    Wewnetrzny pull-up ma ok. 50kom, zauwazylem, ze kiedy sa zewnetrzne zaklocenia to jest problem, bo nozka z takim pull upem je lapie, dlatego do switchy jednak daje zwenetrzny rezystor 4k7. Jesli pobor pradu jest problemem to mozna go podlaczyc do pinu IO i wylaczac kiedy nie czytamy stanu klawisza. Ma to tez ta zalete, ze latwo mozna wyeliminowac bouncing.
  • REKLAMA
  • #7 7241420
    zdebel
    Poziom 15  
    hm to dziwne, bo w swoim układzie zauważyłem, przy naciśnięciu, pobór prądu rzędu kilkunastu amperów (układ podłączony pod zasilacz, wskazówką sie mocno wychyla, w rytm klawiszy :D)
  • #8 7241549
    mirekk36
    Poziom 42  
    zdebel napisał:
    hm to dziwne, bo w swoim układzie zauważyłem, przy naciśnięciu, pobór prądu rzędu kilkunastu amperów (układ podłączony pod zasilacz, wskazówką sie mocno wychyla, w rytm klawiszy :D)


    kilkunastu amperów ????? to już chyba fantazja albo fantasmagoria nawet ;)

    lilkudziesięciu mili-amperów to tak - i to wtedy jeśli nie ustawiłeś pinów portu jako wejścia. Być może masz ustawione jako wyjścia ze stanem wysokim i wprost zwierasz to do GND. Oczywiście na jakiś czas zadziała ograniczenie prądowe w procku i się nie upali od razu - no ale prąd będzie dochodził do maksymalnych wartości dla procesora.... nigdy jednak nie będą to całe Ampery ;)
  • #9 7241897
    zdebel
    Poziom 15  
    O mój boże, tak oczywiście że mA :D i faktycznie tak mam zrobione :)
REKLAMA