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.

Atmega głupieje/zwisa po podłączeniu pullup'a do portu...

05 Wrz 2008 11:49 1515 13
  • VIP Zasłużony dla elektroda
    witam Szanownych Kolegów po fachu...

    Układ:
    Atmega16 - 16 portów pracujących jako wyjście (podają na zewnątrz urządzenia dwa bajty danych).
    Na zewnątrz podpięta karta pomiarowa (zczytuje te dwa bajty do kompa przez USB).

    Problem:
    Po podłączeniu karty Atmega głupieje albo całkiem zwisa.

    Przyczyna:
    Wejścia pomiarowe karty są podwieszone do +5V przez wew. rezystancje 10k. Panuje na nich 5V, ale przecież Atmega powinna bez problemu zciągnąć to do zera. Z odłączoną kartą wszystko pracuje pięknie. Jak spolaryzuje się piny wyjściowe atmegi po podłączeniu karty to od razu dzieją się dziwne rzeczy.

    Pytanie:
    Dlaczego tak się dzieje? Dlaczego Atmega nie umie sterować poprawnie wejściem, które jest podciągnięte do 5V? Przecież wydajność prądowa portu to 40mA (200mA na cały procek).
  • Poziom 34  
    Sprawdź czy feralne końcówki nie są fabrycznie przestawione na funkcje alternatywne np. JTAG.
  • Poziom 25  
    Sprawdż miliamperomierzem (zalecałbym rezystor szeregowy dla bezpieczeństwa), czy rzeczywiście te wejscia są widoczne jako 10k do VCC. Wystarczy takie wejscie zewrzeć miliamperomierzem do GND.

    Pozdrawiam
    Mariusz
  • VIP Zasłużony dla elektroda
    wszystkie 16 portów zachowuje się tak samo. Nie są w stanie wymusić stanu niskiego na porcie podwieszonym przez 10k do plusa. Nic już z tego nie kumam. Jeśli port obciążę do masy to daje bez problemu 20mA...a jeśli jest obciążony do plusa to dzieją się cuda. Patrzyłem w dokumentacji na budowę wew. portu I/O atmegi. Nic nie wskazuje, że powinny być kłopoty.
  • Poziom 31  
    Głupie pytanie... A masa pomiędzy kartą pomiarową i mikrokontrolerem jest dobrze połączona?

    Poza tym używasz detektora BROWN-OUT w ATMedze? Miałem kiedyś podobny problem, ale z innym AVR (Tiny12). Pomogło wstawienie kondensatora do układu RESET mikrokontrolera i wyłączenie wszystkich innych resetów.

    A może to problem z programem w AVR? Przypadkiem gdzieś nie odczytujesz stanu portów wyjściowych? Jeśli chcesz je odczytać, to nie z PINx, ale z PORTx. Zaznaczam - odczyt stanu portów wyjściowych.

    Pozdrawiam.

    PS. Choć głupio mi udzielać takich porad ludziom obeznanym w temacie powiem, że niedawno sam zrobiłem taki błąd i odczytywałem stan portu wyjściowego z rejestru PINB... No, dwa dni szukałem błędu... :D
  • VIP Zasłużony dla elektroda
    Dzięki za porady...ale chyba nie tędy droga.
    Masy oczywiście są OK. Zaznaczam, że jak odłączę kartę pomiarową to atmega (całe urządzenia na niej zbudowane) pracuje wyśmienicie. Jeśli obciążę porty wyjściowe do masy (np. przez 10k) też wystawia mi na wszystkie 16 pinów poprawne stany. Tylko jak podepnę kartę, która wszystkie linie atmega-karta podciąga do 5V przez Rwew.=10k to mi procek staje. Czyżbym musiał dobudować bufor pomiędzy Atmelem a światem zewnętrznym? Dziwna historia...

    Co do głupich błędów to zdarzają się każdym. Ja ostatnio czytałem wartość pinu ustawionego jako wejście instr. PORTx.x zamiast PINx.x ;) i szukałem przyczyny kilka godzin (nawet procek wymieniłem, bo myślałem, że padł port).

    W elektronice siedzę około 20lat...zawodowo od 8...więc masę raczej dobrze podłączyłem :D
  • Poziom 20  
    Po pierwsze upewnij się że atmega ma ustawione te dwa porty na wyjścia, po drugie że w karcie podłączasz się pod wejścia, po trzecie czy to podciąganie rzeczywiście ma 10k i jest do +5V. Niby głupoty ale czasem może okazać się że się coś przeoczyło i się człowiek głowi. Pytanie jeszcze jak zbudowane jest wejście w karcie pomijając już te 10k
  • Poziom 25  
    Jeszcze raz powtórzę to, co napisałem kilka postów wstecz: trzeba wziąć miliamperomierz połączony szeregowo z rezystorem np. 470 ohm i zwierać do masy takim testerem wszystkie wejścia karty po kolei. Jeśli jest to rzeczywiście wejście z rezystorem podciągającym 10k, to amperomierz pokaże ok. 0.5 mA (5V/10k); natomiast jeśli jest to wyjście w stanie wysokim lub VCC to amperomierz pokaże ok. 10mA (5V/470).

    Pozdrawiam
    Mariusz
  • Poziom 31  
    W sumie zrobiłbym to, co zaproponował kulmar. W ten sposób byłoby jasne, czy w dokumentacji karty piszą prawdę. Jeśli to faktycznie wina karty, przydałby się jakiś bufor pomiędzy mikrokontrolerem, a kartą. Chociaż dziwi mnie do tej pory, jak wejście może powodować tak dziwne zachowanie mikrokontrolera?

    Zrobiłbym jeszcze jeden test. Spiąłbym wszystkie używane do połączenia z kartą wyjścia ATMegi drabinkami rezystorowymi 8x10k i podciągnął je zewnętrznie do +5V, bez karty. Ciekawe, czy wtedy też będzie podobny efekt. Ale to dopiero po tym, jakbym zmierzył prąd wejściowy karty, aby mieć pewność, że nie ma tam większego prądu. :)

    Pozdrawiam.
  • VIP Zasłużony dla elektroda
    Prąd jaki wpływa z karty do portu jest taki jak wynika z podanej przez producenta rezystacji pullupa (10k). Zrobię eksperyment z podwieszeniem portu wyjściowego do plusa przez drabinkę.
    Jest jeszcze jeden ciekawy efekt. Karta podpięta jest pod 8 pinów portu A i 8 pinów portu C. Na porcie D wisi LED sygnalizująca transmisję pomiędzy urządzeniami. Nie podłączam w ogóle zasilania mojej atmegi...a jak podłączę kartę pomiarową LED wisząca na pinie portu D zaczyna lekko świecić (minimalnie). Kosmos.
  • Poziom 28  
    mdcs napisał:

    Jest jeszcze jeden ciekawy efekt. Karta podpięta jest pod 8 pinów portu A i 8 pinów portu C. Na porcie D wisi LED sygnalizująca transmisję pomiędzy urządzeniami. Nie podłączam w ogóle zasilania mojej atmegi...a jak podłączę kartę pomiarową LED wisząca na pinie portu D zaczyna lekko świecić (minimalnie). Kosmos.

    To akurat zjawisko całkiem normalne, uC zasila się poprzez piny.
  • Poziom 31  
    Dokładnie przez diody, które są w strukturze pomiędzy pinami I/O, a szyną zasilania. U mnie taki efekt też występuje i to nie tylko w przypadku mikrokontrolera, a również przy buforach TTL. Może napięcie na wejściach karty jest większe, niż zasilanie mikrokontrolera i stąd ten cyrk?

    Pozdrawiam.
  • VIP Zasłużony dla elektroda
    A no masz rację Nemo. Faktycznie może się to zasialć przez diody pomiędzy pinem a zasilaniem i masą. To w sumie mało istotne. Nie głowię się już nad tym. Dobuduję bufor. Co polecacie? Nie musi być TRI-state. Potrzebuję zbuforować 18 pinów.