Nigdy nie miałem do czynienia z częściami będącymi wadliwymi cieśninami od digikey, ale 3 nowe Atmel ATmega164A, które otrzymałem, wykazują bardzo dziwne zachowanie.
Zawęziłem go do czegoś związanego z zegarem i okazało się, że wynikowy sygnał zegarowy z rzekomo „fabrycznie skalibrowanego” wewnętrznego oscylatora drga między 650-700 kHz zamiast solidnego 1 MHz, jaki powinien być. Byłem w stanie zapisać bajt kalibracyjny, aby uzyskać to bardzo blisko 1 MHz (nadal z pewnym drganiami) i większość rzeczy działa, ale UART po prostu nie zachowują się prawidłowo, wydają się wytwarzać ciągły strumień krótkich impulsów bez względu na to o co ich poprosisz.
Miałem wcześniej do czynienia z wersją tego mikrokontrolera o niskiej mocy (164P) z zerowymi problemami i postanowiłem go upuścić na miejscu i sprawdzić na nim wyjście zegara, a także jego solidny 1 MHz bez zakłóceń. Przechylam się do wniosku, że te układy 164A są wadliwe, ale czy byłyby jakieś inne testy, które mógłbym to potwierdzić?
Edycja: Pomyślałem, że opiszę proces, według którego mierzę zegar. Włączyłem bit bezpiecznika wyjściowego zegara i zmierzyłem odpowiedni pin przy pomocy próbkowania analizatora logicznego z bardzo dużą szybkością. Mam program, który zapisuje się w rejestrze kalibracji OSCCAL
i byłem w stanie przetestować i naprawić moją drogę do 1 MHz.
Edycja # 2: Po dalszych badaniach wydaje się, że mikrokontroler zaczyna działać po określonym rozmiarze programupróg. Projekt z otwartymi kośćmi, w którym pojedynczy plik źródłowy miga diodą LED, wydaje się być w porządku, ale kompilowanie i łączenie w dowolnym innym moim pliku (powiedzmy w bibliotece UART itp.) Bez wywoływania funkcji do tych metod powoduje, że mikrokontroler zachowuje się w opisane zachowanie powyżej. Połączenia zasilania są w porządku i zastosowano właściwe odsprzęganie. W tej chwili nie mam czasu na debugowanie, więc zamiast tego wybraliśmy wersję o małej mocy. Nie jestem pewien, gdzie dokładnie może być problem 1) 164A i 164P nie są kompatybilne z kodem 2) Procedura programowania jest inna dla tych dwóch komputerów uC 3) Jednostki są wadliwe. Jestem przekonany co do projektu naszej płyty i wykluczę problemy z zasilaniem. Niestety, nie mogę naprawdę wybrać prawidłowej odpowiedzi, więc pozostawię to pytanie bez zmian - może „ Wrócę do problemu w przyszłości. Dzięki wszystkim, którzy dostarczyli wnikliwe komentarze lub odpowiedzi, mogą być przydatne innej osobie z problemami związanymi z UC.
Odpowiedzi:
Tego rodzaju porażka rzadko występuje. Możesz spodziewać się, że zobaczysz nieco więcej szumu na szpilce lub że ten pin będzie zupełnie niefunkcjonalny. Ale posiadanie go „trochę działa, ale nie w użyteczny sposób” jest rzadkością. Podejrzewam, że są problemy projektowe, które powodują problemy, i mają coś wspólnego z różnicą między 164A i 164P. Ponieważ jitter jest wysoki, patrzę na rzeczy związane z mocą. Czy wszystkie piny zasilania / gnd są podłączone? Czy styki we / wy są napędzane, wyciągane wysoko lub nisko? Itp.
Ale nadal istnieje możliwość, że części są złe. To rzadkie, ale nie niespotykane. Jedynym prawdziwym sposobem na to jest zdobycie kilku części od innego dostawcy i wypróbowanie ich. Jeśli działają, musisz zbadać dalej i sprawdzić, czy zabiłeś ich podczas obsługi / lutowania lub czy naprawdę pochodzą od Digikey źle.
źródło
Kiedyś miałem bardzo podobny problem z podstawowymi częściami Microchip. Mieliśmy problemy z programowaniem ICSP i znaleźliśmy sposób na usunięcie trymera oscylatora, powodując poważne błędy w dokładności wewnętrznego zegara. Upewnij się, że urządzenie programujące i / lub narzędzia programujące są prawidłowo podłączone i są używane poprawnie.
Nie ma łatwego sposobu zweryfikowania dokładności oscylatora bez programowania części, więc po prostu napisałbym trywialny program do przełączania portów (taki, który nie robi nic poza poruszaniem linii we / wy) i kazał komuś innemu zaprogramować części, najlepiej z innym sprzętem do programowania. Po zweryfikowaniu poruszenia można ponownie wykonać flashowanie własnym kodem i sprawdzić, czy problem nadal występuje.
źródło