Autor: Dondu
Artykuł jest częścią: Kurs AVR - Spis treści
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 ...
... 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.
... 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:
- Wersje mikrokontrolerów AVR na przykładzie ATmega8, ATmega8L i ATmega8A
- Dział: Datasheet, Aplication Notes, etc.
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:
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:
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:
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)
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.
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 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:
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.
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 |
która upewnia nas co do wcześniej wyciągniętych wniosków.
W przypadku ATmega8A jest nieco inaczej. Z pierwszej strony dokumentacji:
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:
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 |
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:
Jak widać różnice występuję, czego potwierdzeniem jest także informacja zawarta w dokumencie migracji:
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):
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:
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:
oraz od -40°C do 105°C:
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:
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:
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:
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:
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:
- Wersje mikrokontrolerów AVR na przykładzie ATmega8, ATmega8L i ATmega8A
- Dział: Datasheet, Aplication Notes, etc.
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ńTak jak napisałem w artykule - nie ma znaczenia (także wersja obudowy).
Usuń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ńPrzygotowałem odpowiedź w formie krótkiego artykułu: Jak znaleźć różnice pomiędzy mikrokontrolerami?
UsuńDondu mistrz świata ! Super artykuł !
OdpowiedzUsuńBardzo wyczerpująco napisany artykuł
OdpowiedzUsuń