LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Tania ATmega8 z Chin: podróbka czy okazja?

00

Artykuł publikujemy dzięki uprzejmości Andy’ego Browna, autora bloga AnydsWorkshop.

Ostatnio pracowałem nad projektem z płytką uniwersalną w celu opracowania prototypu. Kupiłem sobie mikrokontroler ATmega328P firmy Farnell – ten sam, który znajduje się na każdej płytce Arduino Uno. Mój pomysł był taki, aby stworzyć firmware wykorzystując ogromną dostępną pamięć Flash 32 kB, a następnie zmniejszyć je do najmniejszego mikrokontrolera, który byłby w stanie je pomieścić.

 

1
Mikrokontroler ATmega328P, którego używałem w prototypowaniu

 

Ugniatanie kodu

Gdy skończyłem pisanie programu, miałem 37 klas umieszczonych w plikach .h oraz .cpp. Rozmiar skompilowanego oprogramowania wyniósł około 12 kB. Największa optymalizacja, którą można wykonać, to przeniesienie wszystkich ciał funkcji do plików nagłówkowych i nadanie im atrybutu inline – jest o modyfikator linkowania i nic poza tym. Jedynie procedury obsługi przerwań oraz definicje PROGMEM  powinny pozostać w plikach .cpp. Gdy całe drzewo wywołań jest widoczne dla optymalizatora, ma on szansę się wykazać, a efekt jest dramatycznie skuteczny. W moim przypadku oprogramowanie zmniejszyło swoją objętość z 12 kB do 7 kB (przy użyciu kompilatora avr-gcc 4.9.2). Teraz mógę je zmieścić w pamięci mikrokontrolera ATmega8.

 

Poszukiwania ATmega8

Następnie zajrzałem na stronę Farnell, aby sprawdzić ceny. Zazwyczaj korzystam z usług tego dystrybutora, bowiem zapewnia on darmową dostawę dla zamówień powyżej 20 GBP i mają kontrolowany, wysokiej jakości łańcuch zaopatrzenia. Cena 2,39 GBP + 20% VAT (w warunkach brytyjskich) za pojedynczy układ ATmega8 16PU w obudowie DIP to dużo, zwłaszcza, gdy za około jednego funta można dostać szybszego i bardziej rozbudowanego STM32F0. Co gorsza, nie miałem też wystarczającej wartości koszyka, aby otrzymać darmową dostawę.

Zawsze twierdziłem, że trzeba być naiwniakiem, aby zamawiać układy scalone bezpośrednio z Chin poprzez serwisy aukcyjne, ale tym razem postanowiłem spróbować. ATmega8 była dostępna u sprzedawców Ali Express w niesamowicie niskiej cenie 4,95 USD za pięć sztuk, czyli niecały dolar za jedną.

 

2

Mikrokontroler ATmega8 pochodzący z paczki importowanej z Chin

 

Nie mogłem się oprzeć i kupiłem opakowanie, które dotarło po około dwóch tygodniach. Nie wiedziałem, czy będą działać. W internecie krąży wiele opowieści o podrobionych układach z Chin, łącznie z mocno nagłośnionym zakupem przez firmę Sparkfun taśmy elementów wyglądających jak mikrokontrolery ATmega, które – jak się okazało – w środku były puste! dokonanym przez pewnych nieszczęśników ze Sparkfun, które następnie chcieli sprzedać. Szczerze mówiąc, nie byłem przekonany do tego pomysłu.

 

Przyjrzyjmy się bliżej

Nie miałem zamiaru tracić zbyt wiele czasu testując układy. Postanowiłem, że jeśli nie zadziałają za pierwszym razem, wylądują w koszu – mój czas jest warty więcej niż dopłata do mikrokontrolerów ze sklepu Farnell.

Pierwszą rzeczą, jaką sprawdziłem pod mikroskopem, były oznaczenia na obudowie. Często podróbki mają podejrzane napisy, nawet z błędami w pisowni. Tak wygląda ATmega328P w powiększeniu 1:1 z pierścieniem pośrednim 67 mm.

 

3

Powiększone logo Atmela na obudowie mikrokontrolera ATmega328P

 

Tak wygląda potencjalnie podejrzana ATmega8 w podobnym powiększeniu. Warto zauważyć, że oznaczenie daty jest podobne, zatem można oczekiwać, że oba układy zostały wyprodukowane w tym samym procesie.

 

4

Powiększone logo Atmela na obudowie mikrokontrolera ATmega8

 

Są podobne, ale z pewnością nie powstały na tej samej maszynie. Wytrawione logo 328P powstało z dwóch równoległych kresek, a w wersji 8 składa się z 3 równoległych kresek.

Co ciekawe i być może znaczące, litera „M” w logu Atmel w wersji 328P ma zakrzywienie w prawym górnym rogu, co odpowiada prawdziwemu logu Atmel sprzed kilku lat. „M” w modelu ATmega8 nie ma takiego zakrzywienia. Ponadto „L” w wersji ATmega8 ma jest wygięte do góry na końcu, czego nie obserwujemy w modelu 328P ani w oryginalnym logo firmy. Firmy przykładają dużą uwagę do swoich logo, a niedokładne odwzorowanie może oznaczać podróbkę.

 

Test – miganie diodami

Najczęstszym testem mikrokontrolera jest program migający diodami LED. To podstawowy test, który bada wewnętrzny oscylator i jeden z peryferyjnych czasomierzy w zaledwie kilku liniach kodu. Przygotowane demo zakłada, że mikrokontroler pracuje na częstotliwości 8 MHz. W swoim teście użyłem do tego celu zewnętrznego rezonatora kwarcowego.

Rzućmy okiem na kod. Po pierwsze musimy sprawić, aby czasomierz pracował z rozdzielczością milisekundową.

 

MilisecondsTimer.h

#pragma once
 
/*
 * Use Timer0 to count in milliseconds
 */
 
class MillisecondTimer {
 
  public:
    static volatile uint32_t _counter;
    static volatile uint8_t _subCounter;
 
  public:
    static void setup();
    static uint32_t millis();
    static void delay(uint32_t waitfor);
};
 
/*
 * Setup timer 0. It will tick at 1MHz (CLK/8) and count 0-255 then generate an overflow
 * interrupt. So interrupt frequency = (CLK/8)*256 = 256uS. We will increment the millisecond
 * timer every 4 ticks = 1.024ms. Each interrupt we add 6 to the counter register which has the
 * effect of changing the interrupt frequency to (CLK/8)*250 and that gives us an accurate 1ms counter. 
 */
 
inline void MillisecondTimer::setup() {
 
  // set up timer 0
 
  TCCR0 |= (1 << CS01);
  TIMSK |= (1 << TOIE0);
}
 
/*
 * Return the timer
 */
 
inline uint32_t MillisecondTimer::millis() {
 
  uint32_t ms;
 
  // an 8-bit MCU cannot atomically read/write a 32-bit value so we must
  // disable interrupts while retrieving the value to avoid getting a half-written
  // value if an interrupt gets in while we're reading it
 
  cli();
  ms=_counter;
  sei();
 
  return ms;
}
 
/*
 * Simple delay method
 */
 
inline void MillisecondTimer::delay(uint32_t waitfor) {
 
  uint32_t target;
 
  target=millis()+waitfor;
  while(_counter<target);
}

Do pobrania

Polski portal branżowy dedykowany zagadnieniom elektroniki. Przeznaczony jest dla inżynierów i konstruktorów, projektantów hardware i programistów oraz dla studentów uczelni technicznych i miłośników elektroniki. Zaglądają tu właściciele startupów, dyrektorzy działów R&D, zarządzający średniego szczebla i prezesi dużych przedsiębiorstw. Oprócz artykułów technicznych, czytelnik znajdzie tu porady i pełne kursy przedmiotowe, informacje o trendach w elektronice, a także oferty pracy. Przeczyta wywiady, przejrzy aktualności z branży w kraju i na świecie oraz zadeklaruje swój udział w wydarzeniach, szkoleniach i konferencjach. Mikrokontroler.pl pełni również rolę patrona medialnego imprez targowych, konkursów, hackathonów i seminariów. Zapraszamy do współpracy!