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

[Rozwiązano] ATMEGA 2560, wydajność prądowa portów na przykłądzie PORT J

login_juz_zajety 21 Lis 2023 11:43 528 8
REKLAMA
  • #1 20825982
    login_juz_zajety
    Poziom 4  
    Dzień dobry,
    najwyraźniej nie rozumiem tematu obciążalności prądowej, więc mam prośbę o nakierowanie mnie.

    Przykład mam taki:
    chciałem ustawić Port J (pin PJ1) jako wyjście i sterować nim ATF1504 (logika programowalna, wejście bramki). Nie działało, bo napięcie na PJ1 spadało do 1 volta.

    Usunąłem ATF1504 i na wolnej linii sprawdzałem sygnał PJ1 i był OK: 0-5v.

    Podłączyłem do PJ1 do masy przez rezystor 1k - napięcie znowu spadło do 1v. Podłączyłem 10k - podobnie sygnał był poniżej 2v.

    Wszystko odbywa się z podpiętym portem H (osiem linii OUTPUT) pod licznik, gdzie pojedyńcza linia nie bierze więcej niż 1.5mA (czyli w sumie 12mA)

    PORTH włączony instrukcjami:
    PORTH = 0b11111111; //rezystory podciągające
    DDRH = 0b11111111;

    Podobnie port J włączam:
    PORTJ = 0b11111111; //rezystory podciągające
    DDRJ = 0b11111111;


    Spadek napięcia na pinie PJ1 jest tak duży, że ledwo mogę nim sterować tranzystor BC237B.

    Wydaje mi się to niemożliwe, żeby nie móc z pinu portu J uzyskać nawet 1mA, więc będę wdzięczny za pomoc i wyjaśnienie.
  • REKLAMA
  • #2 20826090
    speedy9
    Pomocny dla użytkowników
    Port J ma wewnętrzne rezystory pull-up. Jeśli są aktywne i dałeś zewnętrzne rezystory do masy to pin przełączył się w tryb wejścia. Tak wynika z datasheeta:
    Cytat:
    Port J is a 8-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). The Port J output buffers
    have symmetrical drive characteristics with both high sink and source capability. As inputs, Port J pins that are
    externally pulled low will source current if the pull-up resistors are activated. The Port J pins are tri-stated when a
    reset condition becomes active, even if the clock is not running.
  • REKLAMA
  • Pomocny post
    #3 20826096
    viayner
    Poziom 43  
    Witam,
    Może pokaż dokładnie co i jak robisz, jak to jest podłączone. Zauważ, że wpływ mogą mieć inne układy, o których tu nie wspominasz.
    Bardziej mi to wygląda na problem z masą.
    Ogólnie wydajność prądowa jest, jak dobrze pamiętam, 40mA na pin, ale pod warunkiem nie przekroczenia dopuszczalnej mocy strat, czyli praktycznie te 40mA możesz uzyskać z jednego portu.
    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #4 20826105
    speedy9
    Pomocny dla użytkowników
    viayner napisał:
    Ogólnie wydajność prądowa jest, jak dobrze pamiętam, 40mA na pin,

    40mA na pin to "absolute maximum rating" czyli taka wartość "chwilowa". Typowa wartość to 20mA
  • Pomocny post
    #5 20826416
    tmf
    VIP Zasłużony dla elektroda
    speedy9 napisał:
    Port J ma wewnętrzne rezystory pull-up. Jeśli są aktywne i dałeś zewnętrzne rezystory do masy to pin przełączył się w tryb wejścia. Tak wynika z datasheeta:

    Przeczytaj jeszcze raz cytowany fragment, bo nic takiego nie ma miejsca. Nie ma żadnego automatycznego przełączania na wejście, kierunek portu określa rejestr DDR.
    speedy9 napisał:
    40mA na pin to "absolute maximum rating" czyli taka wartość "chwilowa". Typowa wartość to 20mA

    Niekoniecznie chwilowa, raczej jest to wartość, której niezależnie od innych parametrów nie wolno przekraczać. Natomiast do 40mA możesz sobie ciągnąć ile chcesz o ile spełnione są inne warunki. 20mA jest określone dla napięcia na pinie IO odpowiadającego granicznym parametrom dla stanu wysokiego i niskiego. Zresztą dysusja oboczna, bo autor ma problem z osiągnięciem tych kilkunastu mA.
    Przyczyny:
    - błędna konfiguracja pinu - najlepiej jeszcze raz sprawdzić, czy poprawnie jest skonfigurowany DDRJ i PORTJ.
    - sprawdzić, czy nie została włączona jakaś alternatywna funkcja pinu,
    - sprawdzić czy są podłączone wszystkie piny Vcc i GND,
    - mało prawdopodobne - ale może zdarzyć się uszkodzenie pinu, najlepiej sprawdzić zachowanie innych.
    Alternatywnie można sprawdzić jak pin się zachowuje przy wystawionym stanie niskim z zewnętrznym podciąganiem do Vcc. Jeśli rezystor przeciąga poziom w kierunku Vcc to znaczy, że pin jest ustawioy jako wejście, lub jest uszkodzony.
  • #6 20826565
    login_juz_zajety
    Poziom 4  
    Dzięki za zainteresowanie i wskazówki.
    Na płytce poodłączałem wszystki co się da, ale na porcie J zostały dwa niezidentyfikowane elementy podłączone do PJ3, PJ4 i PJ5 (tak drobne, że się dzisiaj nie podejmę wylutowania). No i USB na CH340G podłączone jak w arduino MEGA. I wspomniany wcześniej licznik na PORT H.

    1. Przeglądałem napięcia na pinach zasilania i masy i wygląda, że są OK, ale jutro sprawdzę je jeszcze raz, bo strasznie drobne i łatwo o pomyłkę.

    2. Żeby się pozbyć alternatywnych funkcji to uruchamiam ATMEGĘ wyłączeniem/włączeniem zasilania. Wtedy rejestry powinny ustawić się w stan domyślny, czyli wszystkie porty powinny się ustawić jako INPUT

    Na wszelki wypadek zostawiłęm wszystkie porty na INPUT (jak po resecie) i tylko jeden pin portu J ustawiam na OUTPUT z podciągnięciem:
    PORTJ = 0b00000010;
    DDRJ = 0b00000010;

    Będę próbował metody z "przeciągnięciem pinu" zewnętrznym rezystorem.

    Jutro po południu powinienem dać znać co mi wyszło.

    Jeszcze raz dzięki
  • Pomocny post
    #7 20827089
    Janusz_kk
    Poziom 38  
    login_juz_zajety napisał:
    Żeby się pozbyć alternatywnych funkcji to uruchamiam ATMEGĘ wyłączeniem/włączeniem zasilania. Wtedy rejestry powinny ustawić się w stan domyślny, czyli wszystkie porty powinny się ustawić jako INPUT

    No niekoniecznie, np: Jtag-a tak nie wyłączysz a on będzie mieszał na pinach.
  • #8 20829013
    login_juz_zajety
    Poziom 4  

    Problemem okazało się to, że ... konwerter USB (CH340G) nie pracuje właściwie i wgrywała się losowo co któryś zmiana programu (najczęściej ta, gdzie port J był ustawiony jako wejście).

    Problem okazała się nie "wydajność prądowa", a niestabilna praca konwertera CH340G (lub jakiś problem z bootloaderem), choć jedno i drugie wzorowane na Arduino MEGA 2560, a na oryginalnym Arduino MEGA wszystko działa bez problemu.

    Bardzo dziękuję za pomoc i wskazówki.
  • REKLAMA
  • #9 20829196
    login_juz_zajety
    Poziom 4  
    Problemem okazało się to, że ... konwerter USB (CH340G) nie pracuje właściwie i wgrywała się losowo co któryś zmiana programu (najczęściej ta, gdzie port J był ustawiony jako wejście).

    Problem okazała się nie "wydajność prądowa", a niestabilna praca konwertera CH340G (lub jakiś problem z bootloaderem), choć jedno i drugie wzorowane na Arduino MEGA 2560, a na oryginalnym Arduino MEGA wszystko działa bez problemu.

    Bardzo dziękuję za pomoc i wskazówki.
REKLAMA