Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

piątek, 18 marca 2011

Wersje mikrokontrolerów AVR na przykładzie ATmega8, ATmega8L i ATmega8A


Autor: Dondu

Artykuł jest częścią: Kurs AVR - Spis treści

Wersje mikrokontrolerów AVR na przykładzie ATmega8, ATmega8L i ATmega8A.
Producenci mikrokontrolerów bardzo często mają w swojej ofercie różne wersje danego mikrokontrolera oznaczone dodatkowymi literkami, czy cyframi.

Dla początkującego brak wiedzy na temat różnic między wersjami mikrokontrolerów stanowi często poważny problem, zarówno od strony zaprogramowania mikrokontrolera, jak i projektowania i poprawnego działania urządzenia.

Jest to tym istotniejsze, że z reguły początkujący nie posługuje się biegle dokumentacją mikrokontrolerów, lub po prostu nie wie, jak w nich szukać różnic pomiędzy wersjami tego samego mikrokontrolera.

Prowadzi to do tego, że co jakiś czas na forum pojawiają się np. takie problemy:


77PAGO77
... nie mogę wgrać programu do Atmega8A bo kompilator nie zna takiego procesora. Proszę o pomoc męczę się z tym problemem ...


mateusz93mk
... pojawił problem gdyż nie można wybrać uC typu atmega8L. Zawsze wybierałem chipa z listy dostępnych. Tylko tej ATmega8L nie ma na liście.


Jak to więc jest z tymi różnymi wersjami mikrokontrolerów AVR Atmela?

W artykule przydadzą się nam aktualne na dzień pisania niniejszego artykułu dokumentacje:

W artykule pokazuję także, że producent czasami podaje niezgodne dane w dokumentacji! :-)

Przeczytaj także:

Z punktu widzenia programatora i kompilatora

Programator wraz z programem go obsługującym rozpoznają mikrokontrolery po tzw. sygnaturze.

Sygnatura to w przypadku mikrokontrolerów AVR trzy bajty, które są zapisane w procesie produkcji na stałe (bez możliwości ich zmiany) w odpowiednim miejscu w mikrokontrolerze.

Programator i program go obsługujący mogą dokonać odczytu sygnatury podłączonego mikrokontrolera i porównując z posiadanym wykazem sygnatur mogą rozpoznać typ mikrokontrolera (ATmega8, ATmega16, ATmega32, itd.). Zobaczmy więc, jakie sygnatury posiadają mikrokontrolery ATmega8 w różnych jego wersjach:

ATmega8 oraz ATmega8L:

Sygnatura mikrokontrolerów ATmega8 i ATmega8L


ATmega8A:

Sygnatura mikrokontrolera ATmega8A


Jak zapewne zauważyłeś dla wszystkich trzech wersji ATmega8 sygnatury są takie same i dlatego:

Jeżeli sygnatury różnych wersji mikrokontrolera są takie same, to z punktu widzenia programatora i kompilatora oznacza to, że:
  • programator i kompilator nie są w stanie rozróżnić podłączonej do programatora wersji mikrokontrolera,
  • w konsekwencji nie ma znaczenia, którą wersję ustawisz ręcznie (w programatorze lub kompilatorze), ponieważ dla nich wszystkie te wersje mikrokontrolera są identyczne.

Innymi słowy jeśli w programatorze ustawisz mikrokontroler ATmega8, a w kompilatorze ATmega8A, to nadal program wygenerowany dla ATmega8A jest dokładnie taki sam jak dla ATmega8. W związku z tym programator ustawiony na ATmega8, poprawnie zaprogramuje podłączoną do niego dowolną wersję tego mikrokontrolera, przygotowanym przez kompilator dla ATmega8A plikiem .hex .

Pozostałe kombinacje ustawień programatora i kompilatora pomiędzy ATmega8, ATmega8L oraz ATmega8A, oczywiście także zadziałają poprawnie.



Z punktu widzenia projektanta

Dla projektanta urządzenia wykorzystującego mikrokontroler powstaje zasadnicze pytanie:

Czym różnią się wskazane wersje mikrokontrolera?

Skoro ATmega8 oraz ATmega8L mają tę samą dokumentację (datasheet) oznacza to, że pod względem zaimplementowanych w nich wewnętrznych układów, rejestrów i zestawu instrukcji kodu maszynowego są one dokładnie takie same!

Dlaczego więc ATmega8A ma osobny datasheet? Powinniśmy być czujni i sprawdzić przez porównanie dokumentację wszystkich trzech mikrokontrolerów i szukać różnic. Jednakże ich dokumentacja to prawie 300 stron razy dwa dokumenty :-)

Czy jest jakiś prosty sposób na szybkie wyszukanie różnic?

Tutaj z pomocą przychodzi nam producent dostarczając dokumentację w postaci tzw. Migration ...
Dla mikrokontrolerów typu ATmega8 jest to dokument: Migration from ATmega8 to ATmega8A (kopia)
Dla innych mikrokontrolerów po prostu wyszukaj na stronie Atmela lub za pomocą wyszukiwarki Google.

Już na wstępie znajdujemy w nim istotne informacje:


AVR523: Migracja pomiędzy mikrokontrolerami ATmega8 i ATmega8A


które mówią, że:
  • ATmega8A została wyprodukowana w innej technologii w celu redukowania poboru mocy,
  • ATmega8A jest funkcjonalnym zamiennikiem dla ATmega8 (w tym także ATmegaL),
  • różnice wynikają z zastosowanej technologii i dotyczą części parametrów elektrycznych.

Innymi słowy zawarte w ATmega8 i ATmega8L oraz ATmega8A wewnętrzne układy, rejestry i zestaw instrukcji instrukcji kodu maszynowego są identyczne!

Zerkamy więc do dokumentu i znajdujemy tam potwierdzenie informacji w zakresie różnic najważniejszych parametrów elektrycznych:


AVR523: Migracja pomiędzy mikrokontrolerami ATmega8 i ATmega8A - Ważne parametry


Stwierdzamy, że faktycznie występuje kilka różnic, które mogą być baaaardzo istotne w niektórych projektach. Różnice te dotyczą:
  • poboru prądu,
  • poziomów sygnałów logicznych,
  • napięcia źródła odniesienia przetwornika ADC.

Producent uczula nas także, żeby szczegóły sprawdzać w dokumentacji poszczególnych mikrokontrolerów (część datasheet dot. parametrów elektrycznych) w szczególności w części dot. rejestru zmian dokumentacji (rozdział: Datasheet Revision History)


ATmega8A - Wykaz zmian w dokumentacji

a także, by:

Posługiwać się zawsze najświeższą wersją dokumentacji (!), dlatego szukać jej należy wyłącznie na stronie Atmela za pomocą dostępnej tam wyszukiwarki!


Ja dodam jeszcze, że należy także sprawdzać część dokumentu dot. errat, o czym pisałem w artykule: Erraty - utrapienie elektroników, gdzie znajdziesz także informacje, jak ustalić datę dokumentacji.

Odnalezienie dokumentacji to jedno, a odnalezienie różnic to drugie i może początkującemu przysporzyć wielu kłopotu. Dlatego też zobacz na co należy zwracać uwagę:


1. Częstotliwość taktowania mikrokontrolera vs napięcie zasilania

Nowoczesne mikrokontrolery mogą z reguły pracować w szerokim zakresie napięć zasilających, ale nie ma nic za darmo:

Z reguły istnieje bezpośredni związek napięcia zasilania i częstotliwości taktowania mikrokontrolera.

Jest to związane z faktem, że żeby zapewnić pracę z dużą częstotliwością, wewnętrzne elementy muszą generować bardzo strome zbocza sygnałów (krótkie czasu propagacji), a to zmusza projektantów mikrokontrolerów do zwiększenia prądów sygnałów, a w konsekwencji napięcia zasilania mikrokontrolera.

Dlatego też w tym zakresie w dokumentacji mikrokontrolerów można znaleźć kilka informacji potwierdzających tę zależność. Już na pierwszej stronie znajdziemy informację:


ATmega8 i ATmega8LA - Dokumentacja (datasheet) pierwsza strona
ATmega8 i ATmega8L


która wyjaśnia, że:
  • ATmega8 może pracować w wąskim zakresie napięć zasilających 4,5V - 5,5V, ale za to z dużą częstotliwością taktowania, aż do 16MHz włącznie,
  • ATmega8L może pracować w szerokim zakresie napięć zasilania 2,7V - 5,5V, ale maksymalnie do częstotliwości 8MHz

W dalszej części dokumentacji dot. charakterystyk elektrycznych znajdujemy informacje dot. przypadku, gdy taktujemy mikrokontroler za pomocą zewnętrznego sygnału zegarowego:


ATmega8 i ATmega8L - Parametry zewnętrznego zegara taktującego


Jak widać w przypadku takiego taktowania mikrokontrolera może on pracować:
  • z maksymalną częstotliwością wynoszącą 8MHz w szerokim przedziale przedziale napięć 2,7V - 5,5V,
  • ale powyżej tej częstotliwości (aż do 16MHz) może pracować  tylko będąc zasilanym napięciem z przedziału 4,5V - 5,5V.
Aby się upewnić, który typ mikrokontrolera odpowiada określonej części tabelki sięgamy do strony pierwszej dokumentacji omówionej wyżej i ustalamy, że na czerwono zaznaczyłem ATmega8L, a na zielono ATmega8 ... czyli właściwie tylko potwierdziliśmy znany już fakt.

Jest jeszcze jedno miejsce, gdzie w dokumentacji ATmega8(L) znajdujemy informacje pokazujące zależność maksymalnej prędkości mikrokontrolera od napięcia zasilania. Jest nim tabela oznaczeń mikrokontrolerów służąca do ich rozpoznawania i zamawiania:


ATmega8 i ATmega8L - Tabela oznaczeń, typów obudów oraz zakresów napięć i częstotliwości pracy
ATmega8 i ATmega8L

która upewnia nas co do wcześniej wyciągniętych wniosków.


W przypadku ATmega8A jest nieco inaczej. Z pierwszej strony dokumentacji:


ATmega8A - Dokumentacja (datasheet) pierwsza strona


możemy odnieść wrażenie, że ATmega8A może pracować w szerokim zakresie napięć nawet dla częstotliwości taktowania wynoszącej 16MHz. Tak jednak nie jest (!) ponieważ w dalszej części dokumentacji (Electrical characteristic) znajdujemy wykres:


ATmega8A - Wykres dopuszczalnych częstotliwości taktowania w funkcji napięcia zasilania


który uświadamia nam ograniczenia tego mikrokontrolera w zakresie napięcia zasilania vs częstotliwość taktowania.

Podobnie dla ATmega8A ma się sytuacja z tabelką (którą pokazałem wcześniej dla ATmega8 i ATmega8L) dot. taktowania zewnętrznym sygnałem:


ATmega8A - Parametry zewnętrznego zegara taktującego
ATmega8A


z tym, że tutaj obie zaznaczone kolumny dotyczą tylko i wyłącznie ATmega8A. Tak jak w poprzednim wypadku potwierdzamy jedynie, że ograniczenia występują oraz jakie są faktycznie.



2. Pobór prądu

Kolejnym parametrem którym różnią się wersje omawianych mikrokontrolerów jest pobór prądu w różnych stanach (pracy lub jednego z trybów uśpienia). Poniżej zestawiłem podstawową tabelkę znajdującą się w obu dokumentacjach:


Porównanie zmian parametrów poboru prądu mikrokontrolerów ATmega8, ATmega8L i ATmega8A


Jak widać różnice występuję, czego potwierdzeniem jest także informacja zawarta w dokumencie migracji:


Migracja - Porównanie zmian parametrów poboru prądu mikrokontrolerów ATmega8, ATmega8L i ATmega8A


Ale ponieważ mogą nas interesować dokładniejsze dane w tym względzie porównujemy (zgodnie z zaleceniami producenta) szczegółowe informacje z ich datasheet, co pokażę na wykresach w stanie pracy (Active):


Wykrews - Porównanie zmian parametrów poboru prądu mikrokontrolerów ATmega8, ATmega8L i ATmega8A w trybie Active


Jak widać różnica w poborze prądu jest ogromna co pokazałem czerwonymi liniami dla częstotliwości 16MHz.

Przy okazji na wykresie dot. ATmega8 i ATmega8L zaznaczyłem możliwy tzw. overclocking, który producent pokazał dla naszej wiedzy. Chodzi o fragment powyżej 16MHz, który producent pokazuje, ale nie gwarantuje (co napisał już na pierwszej stronie dokumentacji).


3. Napięcia sygnałów

Skoro wiemy, że napięcie zasilania ma znaczenie projektant powinien sprawdzić, czy w tym zakresie nie ma jakiś różnic we wspomnianych wersjach mikrokontrolera Te informacje wstępnie podał nam dokument dot. migracji:


Migracja - Porównanie napięcia stanu niskiego pinu mikrokontrolerów ATmega8, ATmega8L i ATmega8A


Producent zwraca naszą uwagę na fakt, że napięcie pinu wyjściowego w stanie niskim (VOL) różni się w przypadku ATmega8 i ATmega8A. W większości przypadków nie będzie to zapewne miało znaczenia, ale w sytuacjach, w których mikrokontroler współpracuje z układami zasilanymi napięciem innym niż on sam, może okazać się kluczowe!

Sprawdzamy w dokumentacji ATmega8 dla wersji pracującej z zakresem dopuszczalnej temperatury pracy od -40°C do 85°C:

Napięcia stanu niskiego pinu mikrokontrolerów ATmega8 i ATmega8L w zakrezie do 85 stopni Celsjusza


oraz od -40°C do 105°C:


Napięcia stanu niskiego pinu mikrokontrolerów ATmega8 i ATmega8L w zakrezie do 105 stopni Celsjusza


i ze zdziwieniem odkrywamy, że dane te nie są zgodne z tabelką migracji! Dlaczego? Na to pytanie może niestety odpowiedzieć tylko producent :-)

Dla porządku zerknijmy jeszcze na parametr VOL w tabelce ATmega8A:


Napięcia stanu niskiego pinu mikrokontrolerów ATmega8A w zakrezie do 85 stopni Celsjusza


i stwierdzamy, że tutaj wszystko się zgadza z dokumentem migracji.

Któremu dokumentowi więc wierzyć?

Zgodnie z zasadami przekazanymi w dokumencie migracji priorytetem należy traktować dane zawarte w dokumentacji mikrokontrolerów.


4. Napięcie źródła odniesienia

Jedną z istotniejszych różnic może okazać się źródło napięcia odniesienia dla przetwornika ADC, którą dokument migracji wskazuje następująco:


Migracja - Napięcia źródła odniesienia mikrokontrolerów ATmega8 i ATmega8L oraz ATmega8A


Wprawdzie wartość typowa nie różni się, ale wartość maksymalna już tak. Ponieważ napięcie to jest wykorzystywane przez przetwornik ADC, który może pracować z rozdzielczością 8-iu a nawet 10-ciu bitów, w skrajnych przypadkach może to znacząco wpływać na dokładność pomiarów.

Sprawdźmy więc czy faktycznie w dokumentacji mikrokontrolerów są takie same różnice:


Napięcia źródła odniesienia mikrokontrolerów ATmega8 i ATmega8L


Podobnie jak w poprzednim wypadku dokument migracji pokazuje nieco inne wartości niż dokument mikrokontrolera! W dokumencie migracji maksymalna wartość napięcia źródła odniesienia określona jest dla ATmega8 na poziomie 2,7V a w dokumentacji mikrokonrolera 2,9V, czyli więcej o 0,2V (czyli jakieś 7% !!!). 

Zobaczmy jak to się ma do dokumentacji ATmega8A:


Napięcia źródła odniesienia mikrokontrolerów ATmega8A


W przypadku ATmega8A dane z dokumentu migracji są więc zgodnie z dokumentacją mikrokontrolera.

Któremu dokumentowi więc wierzyć?

Zgodnie z zasadami przekazanymi w dokumencie migracji priorytetem należy traktować dane zawarte w dokumentacji mikrokontrolerów.



5. Inne

W przypadku innych mikrokontrolerów (oprócz wyżej omówionych parametrów) możesz spotkać różnice także w innych parametrach elektrycznych. Dlatego za każdym razem, gdy dokonujesz zmiany procesora na inną jego wersję należy sprawdzić dokumentacje i porównać w tych zakresach, w jakich wykorzystujesz mikrokontroler.

Bez takiej ostrożności (szczególnie w przypadku projektów komercyjnych) możesz narazić się na istotnej wielkości koszty reklamacji i ich usuwania.


Przeczytaj także:

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

6 komentarzy:

  1. No nareszcie, bo tego mi brakowało! Czyli nie ma znaczenia ani dla kompilatora, ani dla programatora, którą wersję mikrokontrolera podłączamy? Tak samo nie ma znaczenia, w której obudowie jest mikrokontroler (pytam, bo o tym nie napisaliście)?

    OdpowiedzUsuń
    Odpowiedzi
    1. Tak jak napisałem w artykule - nie ma znaczenia (także wersja obudowy).

      Usuń
  2. A może posiada ktoś informacje bez przeszukiwania dużej ilości dataszitów jakie są różnice między mega328 a 328p ? Z tego co mi wiadomo, to ! chyba ! w 328p jest sprzetowa obsluga przyciskow pojemnościowych dotykowych ale juz nie jestem pewien ;)

    OdpowiedzUsuń
  3. Dondu mistrz świata ! Super artykuł !

    OdpowiedzUsuń
  4. Bardzo wyczerpująco napisany artykuł

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.