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

Atmega 8535 - niskie napięcie i prąd na porcie A przy podłączeniu LEDów

f-54 17 Mar 2013 12:43 1761 6
  • #1 12072337
    f-54
    Poziom 10  
    Witam;
    Uruchomiłem pierwszy testowy program na kontrolerze z tematu: binarne liczenie na 8 LEDach podpiętych do portu C - podwójne diody czerwono-zielone, wspólna katoda więc przez R=~300 omów do pinów kontrolera, katody na masę. Wszystko działa :) ale... dokładnie ten sam program, tylko z użyciem portu A owszem pracował, woltomierz pokazywał zmienne napięcie o prawidłowej amplitudzie na pinach portu w takim rytmie, jaki wynikał z programu (okres zmian 1 sekunda na PORTA-0, dalej też prawidłowo), ale tylko pod warunkiem, że piny nie były do niczego podpięte. LED podpięty do dowolnego pinu ledwo jarzył, napięcie na kontrolerze zamiast zmieniać się od ~0 do VCC (5V) rosło do najwyżej ~2V. Nawet zastosowanie wtórnika emiterowego do sterowania LEDem nic nie pomagało: napięcie na pinie kontrolera nie podnosiło się ani o ułamek wolta więcej niż przy bezpośrednim podłączenia LEDA. Wynika z tego, że port A dostarczał ułamków miliampera prądu, podczas gdy port C tak samo sterowany z programu dostarcza bez problemu około 6 mA i diody pięknie świecą...

    Pytanie: czy port A w 8535 wymaga innego podejścia w programowaniu go jako wyjście niż port C? Przekopałem Datasheet i żadnej wzmianki o czymś takim nie napotkałem :(

    Pozdrowienia
    Paweł S.
  • #2 12072363
    BlueDraco
    Specjalista - Mikrokontrolery
    Rejestr DDRA ustawiłeś?
  • #3 12072433
    tmf
    VIP Zasłużony dla elektroda
    Albo ustawiłeś pull up, a nie strong 1 na wyjściu, albo co nawet bardziej prawdopodobne nie podłączyłeś wszystkich pinów Vcc i AVcc do zasilania...
  • #4 12072823
    f-54
    Poziom 10  
    Tak, DDRC w obecnym chodzącym programie to był DDRA w poprzednim, ogólnie wszystkie PORTy przerobiłem z A na C i żadnych więcej zmian nie robiłem.

    Kod programu jest naprawdę prymitywny jak na pierwszą probę przystało:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i dalej dla pozostałych 6 diod analogicznie. A potem:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak, wszystkie (całe 2) piny VCC/AVCC są podpięte do +5V. Obydwie GND do masy też.
    Z obu stron scalaka przy samej podstawce są w zasilaniu kondensatory.

    Nie podpinałem AREF, może powinienem ??

    W programie działam tylko na rejestrach DDR i PORT, tak samo poprzednio na A jak teraz na C - stąd moje pytanie dlaczego porty reagują odmiennie? Gdybym przez przypadek ;) zmienił coś w ustawieniach pull-up albo innych globalnych to oczekiwałbym takiej samej reakcji...

    W fusebitach przestawiłem tylko (w celach treningowych) częstotliwość wewnętrznego oscylatora RC z 1 na 8 MHz. Korzystałem przy tym z Burn-O-Matic więc liczę, że udało mi się to zrobić bez błędu, co zresztą potwierdziły diody mrugając 8 razy szybciej :).

    Przy okazji małe wyjaśnienie: w poprzednim poście pisałem o okresie zmian napięcia 1 sek. - oczywiście dotyczyło to stanu programu kiedy _DELAY_ms miał odpowiednią do tego wartość.
    Potem zmieniałem tą wartość i obserwowałem reakcje układu - na porcie C były takie, jakich oczekiwałem.

    I jeszcze jedno wyjaśnienie: linia DDRC |= ... pochodzi z dawnych czasów, kiedy ten program używał tylko 4 diody i działał na innym procesorze. Jakoś z rozpędu napisało mi się to co wyżej zamiast DDRC = 255...
    ale to zdaje się wychodzi na to samo?

    Pozdrowienia
    P.
  • #5 12076229
    dondu
    Moderator na urlopie...
    AREF - nie musiałeś, bo nie używasz ADC. Na wszelki wypadek mógłbyś jednak pokazać schemat.
    W jaki sposób informujesz kompilator o częstotliwości zegara (F_CPU)?
    W czasie kompilacji otrzymujesz jakieś warningi?
  • #6 12077047
    f-54
    Poziom 10  
    Rysunek przedstawia kontroler działający poprawnie. Źle działał układ, w którym wszystkie oporniki 300 omów były podłączone do portu A (reszta doĸładnie jak na schemacie).

    Atmega 8535 - niskie napięcie i prąd na porcie A przy podłączeniu LEDów

    Zasilanie +5V z komputera (tego samego, do którego jest podłączony programator) z wyprowadzonego na zewnątrz obudowy złącza molex.

    Programator (najprostszy możliwy - 5 oporników do LPT) może być podłączony albo nie i nic to nie zmienia w pracy układu.

    O komunikatach z kompilacji na razie nie mogę powiedzieć (komputer prawdopodobnie padł i nie mam do niego zdalnego dostępu :( ), ale na pewno w ostatniej linii było "0 errors, 0 warnings".

    F_CPU ustawiana w AVRStudio: Toolchain->AVR/GNU C Compiler->Symbols
    Wypróbowałem kilka kombinacji F_CPU "prawdziwej" (ustawianej na fusebitach) i deklarowanej - wszystkie nic nie pomogły na porcie A i nic nie psuły na porcie C, zresztą zgodnie z moimi oczekiwaniami.
  • #7 12085902
    f-54
    Poziom 10  
    Okazało się oczywiście prymitywne: wyzerować bit ADEN. Tyle, że wielokrotna lektura datasheetu przekonywała mnie, że jest on domyslnie wyzerowany.
    Zrobiłem jednak eksperyment: wstawiłem ADC = 0; i...
    Teraz diody świecą pełną moca z portu A :)

    P.
REKLAMA