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

ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

andrzejlisek 08 Cze 2019 17:52 336 0
  • #1 18002173
    andrzejlisek
    Poziom 31  
    Buduję pewien układ zawierający dwa mikrokontrolery ATMega328. Nazwijmy je A i B. Mikrokontroler A ma kwarc 16MHz, a mikrokontroler B ma kwarc 8MHz.

    Mikrokontrolery są połączone przewodem 4-żyłowym o długości ok. 30cm, z których dwie żyły to zasilanie i masa, trzecia żyła łączy B0 mikrokontrolera A z C4 mikrokontrolera B, czwarta żyła łączy B1 mikrokontrolera A z C5 mikrokontrolera B.

    Wszystko jest prawie dobrze, ale jest pewien problem z napięciami. Wszystkie pomiary robię w miejscu mikrokontrolera B.
    Na mikrokontrolerze A uruchamiam ten program (z kodu usunąłem wszystko, co nie jest związane z przedmiotem wątku, jednak podkreślam, że w mikrokontrolerze A korzystam z przetwornika ADC):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W mikrokontrolerze B mam taki kod (cały kod bez zmian, pierwsze testy i już widzę problem):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Podstawy czasu wszystkich przebiegów oprócz ostatniego to 0,2ms/div
    Pierwszy pomiar przeprowadzam bez mikrokontrolera B, jest wstawiony tylko mikrokontroler A.
    Przebieg na C4 mikrokontrolera B (a właściwie podstawki, bo mikrokontroler jest wyjęty) jest prawidłowy i zgodny z oczekiwaniem:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    Przebieg na C5 mikrokontrolera B nosi jakby przebicia z C4, teoretycznie powinna być stała 5V, jednak to ma być wejście a nie wyjście, więc załóżmy, że to nie przeszkadza:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    Teraz wstawiam mikrokontroler B i teraz tak się prezentuje przebieg na C4, w tym przypadku również jest zgodny z oczekiwaniem:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    Natomiast przebieg na C5 już na pierwszy rzut oka nie jest prawidłowy. Na tej linii w ogóle nie powinno być przebiegu z C4:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    W chwili obecnej na C5 powinny być impulsy z częstotliwością 150kHz. Po zmianie podstawy czasu na 5us/div, impulsy są generowane prawidłowo, ale wygląda na to, że ze stanem wysokim na tej linii jest jakiś problem:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    Co może być przyczyną niechcianego przebicia przebiegów pomiędzy liniami?
    Co może być przyczyną zaniżania napięcia stanu wysokiego przy przebiegu generowanego z mikrokontrolera B?
    Jak mikrokontroler B był osadzony w programatorze, to przebieg na linii C5 był generowany prawidłowo, z prawidłowymi poziomami napięć.

    Dodano po 25 [minuty]:

    Do mikrokontrolera A wgrałem poniższy program (zamieszczam całość) i problem nadal występuje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 18 [minuty]:

    Robię dalsze testy. Jak wyłączyłem podciągnięcie w B1 mikrokontrolera A, to przebieg bez mikrokontrolera B wygląda następująco:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    Pomiar z mikrokontrolerem B:
    ATMega328: Różnice napięć na portach przy łączeniu dwóch mikrokontrolerów

    Co ciekawe, powtórzyłem pomiary podłączając masę i sondę przy mikrokontrolerze A i wyniki są takie same. Następnie odłączyłem od przewodu płytkę z mikrokontrolerem B i pomiar przy mikrokontrolerze A również wykazywał przebicia. Następnie odłączyłem przewód i żadnych przebić nie było.

    Sam przewód jest przewodem USB 4-żyłowym pozyskanym z jakiegoś uszkodzonego gadżetu, więc mało prawdopodobne, żeby taki przewód nie nadawał się do przesyłania sygnałów cyfrowych wysokiej częstotliwości. Czy to jest możliwe, że sam przewód powoduje problemy? Jeżeli tak, to na na co zwracać uwagę przy wyborze przewodu?
REKLAMA