Autor: Dondu
Mikrokontrolery często mają wiele pinów, z których wykorzystujesz tylko nieliczne. Jednakże niektóre z nich pomimo, że niewykorzystane muszą być w odpowiedni sposób podłączone.
Niestety na forum często spotykamy "znawców", którzy bez odpowiedniej wiedzy doradzają innym jak należy zrobić to, czy tamto:
atek000
W tym układzie nie musimy podłączać ARef i AVcc, bo ADC nie jest wykorzystywany.
W tym układzie nie musimy podłączać ARef i AVcc, bo ADC nie jest wykorzystywany.
Wypowiedź dotyczyła ATmega8, więc sprawdźmy, co napisał producent w datasheet, w opisie pinów na stronie 6:
przetłumaczony tekst:
Datasheet ATmega8 - Pin Descriptions, str. 6
AVcc jest pinem zasilającym dla przetwornika ADC, PortC (od PC0 do PC3) oraz kanałów ADC (ADC6 i ADC7). AVcc musi być podłączone zewnętrznie do Vcc, nawet wtedy gdy ADC (przetwornik analogowo-cyfrowy) nie jest wykorzystany.
AVcc jest pinem zasilającym dla przetwornika ADC, PortC (od PC0 do PC3) oraz kanałów ADC (ADC6 i ADC7). AVcc musi być podłączone zewnętrznie do Vcc, nawet wtedy gdy ADC (przetwornik analogowo-cyfrowy) nie jest wykorzystany.
No więc jak to jest z tymi minimalnymi wymaganiami?
Niestety nie ma jednej możliwej odpowiedzi, ponieważ każda rodzina mikrokontrolerów, bądź nawet pojedynczy z nich może mieć swoją specyfikę - czytaj dokumentację!
Ale są pewne zasady, które "w ciemno" możesz stosować:
- GND - podłączaj wszystkie piny do masy, nawet jeśli sąsiadują ze sobą.
- Vcc - podłączaj wszystkie piny do zasilania, nawet jeśli sąsiadują ze sobą.
- AVcc - podłączaj do zasilania Vcc przez filtr dolnoprzepustowy (sugerowany filtr LC)
- AGND - podłączaj do masy
- RESET - podłączaj do zasilania Vcc przez rezystor z przedziału 4,7k-10k
Magiczna literka A przed Vcc i GND, czyli AVcc i AGND oznacza, że te piny dotyczą zasilania części analogowej mikrokontrolera.
Przykład ATmega8
Na przykładzie ATmega8 w obudowie TQFP (32 piny) pokażę możliwe sposoby podłączania mikrokontrolera.
Zacznij od prawidłowego zasilania i filtrowania zakłóceń:
Nie sugeruj się numerami pinów
ponieważ w różnych typach obudów mogą być różnice.
Wersja 1: Totalne minimum !!!
Rys. Najmniejszy możliwy prawidłowy sposób podłączenia ATmega8 (obudowa TQFP) |
Ta wersja zapewnia prawidłową pracę wszystkich wewnętrznych układów, z wyjątkiem ADC. Oczywiście będziesz mógł wykorzystać ADC, ale pomiary mogą być bardzo niestabilne, co praktycznie oznacza zmniejszenie rozdzielczości ADC z 10 do 8, a w skrajnych przypadkach nawet do 6 bitów.
Sytuację znacznie poprawi podłączenie pomiędzy ARef i masę (GND), kondensatora 100nF tak jak kolega sevotharte:
sevotharte Programowy PWM - silnik DC
Problem odnaleziony. Zabrakło kondensatora przy AREF do masy. Teraz silnik śmiga, aż miło. Więc przestroga - dbajmy o filtrację zasilania, ja o niej zapomniałem :-)
Problem odnaleziony. Zabrakło kondensatora przy AREF do masy. Teraz silnik śmiga, aż miło. Więc przestroga - dbajmy o filtrację zasilania, ja o niej zapomniałem :-)
Wynika to z zaleceń producenta, o których można przeczytać w datasheet tego mikrokontolera:
Datasheet ATmega8 str. 196
Internal reference voltages of nominally 2.56V or AVCC are provided On-chip. The voltage reference may be externally decoupled at the AREF pin by a capacitor for better noise performance.
Internal reference voltages of nominally 2.56V or AVCC are provided On-chip. The voltage reference may be externally decoupled at the AREF pin by a capacitor for better noise performance.
oraz:
Datasheet ATmega8 str. 197
The internal voltage reference may thus be decoupled by an external capacitor at the AREF pin to improve noise immunity.
The internal voltage reference may thus be decoupled by an external capacitor at the AREF pin to improve noise immunity.
a także:
Datasheet ATmega8 str. 201
... and the reference voltage can be made more immune to noise by connecting a capacitor between the AREF pin and ground.
... and the reference voltage can be made more immune to noise by connecting a capacitor between the AREF pin and ground.
Wersja 2: Podłączenie zalecane
Jeżeli zależy Ci na prawidłowej pracy mikrokontrolera oraz maksymalnej możliwej dokładności ADC, to powinieneś podłączyć go tak, jak na poniższym schemacie. Jednakże powinieneś wtedy przeczytać bardzo ważny temat: ADC - Dokładność vs podłączanie
Rys. Zalecany sposób podłączenia ATmega8 (obudowa TQFP) |
Dławik L1 oraz kondensator C4 dodatkowo filtrują zasilanie przetwornika ADC, by pomiary były dokładniejsze.
Doceń artykuł, jeżeli Ci pomógł: |
RESET vs rezystor
Jeżeli czytałeś uważnie tekst powyżej oraz przeanalizowałeś schematy zauważysz, że do pinu RESET podłączony jest rezystor 10k. Rezystor ten służy do wymuszenia stanu wysokiego na pinie RESET, tak aby mikrokontroler nie został zresetowany przez zakłócenia pochodzące z np. silników, zasilania, przekaźników itp.
Alternatywne funkcje pinu RESET.
Pin RESET w większości mikrokontrolerów, posiada alternatywne funkcje. Funkcje te mogą być różne w różnych mikrokontrolerach. Przełączanie funkcji pinu RESET realizowane jest w niektórych mikrokontrolerach programowo, a w innych poprzez ustawienie fusbitów.
W przypadku gdy funkcja pinu RESET jest zależna od działania programu, a domyślnie (przy starcie mikrokontrolera) pin ten pełni funkcję RESET, to zachodzi sytuacja, w której program może nie zostać wykonany, gdy na pinie reset poziom ładunku będzie poniżej stanu wysokiego. Mikrokontroler będzie wtedy w stanie ciągłego resetu.
Niektórzy podchodzą do tego tak:
Pewniak
Ale ja na początku programu włączę pull-up, więc zewnętrzny rezystor jest zbędny.
Ale ja na początku programu włączę pull-up, więc zewnętrzny rezystor jest zbędny.
Oczywiście, jest to prawidłowe podejście, ale programowe włączanie pull-up, nadal obarczone jest ryzykiem opisanym przeze mnie powyżej oraz przez producenta:
Przetłumaczony tekst:
Pin RESET posiada wewnętrzny rezystor podciągający tzw. pull-up, ale jeżeli środowisko pracy mikrokontrolera jest narażone na zakłócenia, wewnętrzny pull-up może być niewystarczający, co może powodować sporadyczne zakłócenia. Właściwej wartości zewnętrznego rezystora szukaj w dokumentacji mikrokontrolera.
A jeżeli w dokumentacji mikrokontrolera nie znajdziesz informacji, to powinieneś stosować
czyli 4,7k lub 10k gdy używany jest lub może być debugWIRE.
nsmarcin
OK, już działa, po prostu reset nie był podłączony tylko korzystał z przycisku na programatorze, podłączenie na stałe przez 10k załatwiło sprawę.
OK, już działa, po prostu reset nie był podłączony tylko korzystał z przycisku na programatorze, podłączenie na stałe przez 10k załatwiło sprawę.
1 Jeżeli więc chcesz być pewien, że Twój układ na 100% wystartuje prawidłowo i pin RESET ma pełnić funkcję RESET, podłączaj go przez rezystor 10k do Vcc.
2. Jeżeli natomiast chcesz wykorzystać pin jako jego alternatywną funkcję, podłączanie rezystora jest nie wskazane lub należy zastosować większą jego wartość, np. 50k.
Doceń artykuł, jeżeli Ci pomógł: |
RESET vs kondensator
Bardzo często spotykamy się z opinią, iż do pinu RESET należy obowiązkowo podłączyć dodatkowo kondensator, połączony z masą:
Nawigator
Moje uwagi: brak kondensatora (typowy 10n) na pinie reset ...
Moje uwagi: brak kondensatora (typowy 10n) na pinie reset ...
Wypowiedź dotyczyła mikrokontrolera Atmega128L, czyli rodziny AVR. Zobaczmy więc, co firma ATMEL pisze w swoim dokumencie AVR042: AVR Hardware Design Considerations
przetłumaczony tekst:
AVR042 str. 4
W celu ochrony RESET przed zakłóceniami, zaletą jest podłączanie kondensatora z RESET do masy.
Nie jest to bezpośrednio wymagane, odkąd AVR-y mają wewnętrzny filtr dolnoprzepustowy, do eliminowania szpilek i zakłóceń, które mogą powodować niekontrolowany reset. Dodanie tego kondensatora, jest więc tylko dodatkowym zabezpieczeniem.
Należy jednak pamiętać, że kondensator nie może być podłączony, jeśli debugWIRE jest używany.
W celu ochrony RESET przed zakłóceniami, zaletą jest podłączanie kondensatora z RESET do masy.
Nie jest to bezpośrednio wymagane, odkąd AVR-y mają wewnętrzny filtr dolnoprzepustowy, do eliminowania szpilek i zakłóceń, które mogą powodować niekontrolowany reset. Dodanie tego kondensatora, jest więc tylko dodatkowym zabezpieczeniem.
Należy jednak pamiętać, że kondensator nie może być podłączony, jeśli debugWIRE jest używany.
Reasumując, mikrokontroler pod tym względem jest samowystarczalny i nie musisz dodawać kondensatora. Jednakże, gdy Twój układ pracuje w trudnym środowisku narażonym na duże zakłócenia, producent zaleca ten kondensator jako dodatkowe zabezpieczenie.
Jak duży może być ten kondensator - zalecany jest 100nF. Większy może dodatkowo utrudnić, lub wręcz uniemożliwić programowanie mikrokontrolera.
Problem z programowaniem
Podłączenie kondensatora do pinu RESET może (choć nie musi) uniemożliwić programowanie mikrokontrolera, co jest spowodowane tym, iż kondensator poprzez swoją pojemność wprowadza opóźnienia sygnału programującego.
W przypadku problemów z programowaniem, należy usunąć ten kondensator na czas programowania lub wykorzystać jumper (JP1) jak na schemacie obok i zdjęciu poniżej lub po prostu dwa punkty lutownicze zlutowane lub rozlutowane w zależności od potrzeb. Niektórzy producenci programatorów zwracają na to uwagę w ich instrukcjach: ISP - Co to takiego?
Listwa kołkowa (goldpiny) ze zworkami (jumpery). |
Owszem tak było za "dawnych czasów" i może w przypadku niektórych aktualnie produkowanych mikroprocesorów tak jest nadal.
Nie dotyczy to jednak większości mikrokontrolerów, a już na pewno nie AVR firmy ATMEL, która wyposażyła swoje mikrokontrolery w wewnętrzny moduł reset-u, który załatwia za Ciebie prawidłowy reset mikrokontrolera podczas włączania zasilania.
Atmel rozwiązał to tak, że za pomocą bitów konfiguracyjnych możesz ustawić opóźnienie początkowe zgodnie z powyższą tabelką i innymi w datasheet tego procesora. W innych procesorach tej rodziny jest podobnie. Także inni producenci jak np. Microchip w swoich PIC-ach stosują takie opóźnienia.
Idea mikrokontrolerów jest prosta: Co się da, ma być w nich zawarte.
Doceń artykuł, jeżeli Ci pomógł: |
RESET vs kondensator + przycisk
Jak już przeczytałeś powyżej, w przypadku pracy mikrokontrolera w środowisku narażonym na duże zakłócenia lub gdy chcesz zwiększyć niezawodność Twojego projektu, powinieneś zastosować kondensator zabezpieczający podłączony do pinu RESET.
Jednakże gdy chcesz zastosować jednocześnie przycisk umożliwiający Ci zresetowanie mikrokontrolera powinieneś wiedzieć jeszcze o jednej istotnej sprawie.
Bardzo często początkujący z braku doświadczenia, podłączają przycisk pomiędzy pin RESET i masę, czyli równolegle do kondensatora zabezpieczającego. Nie biorą pod uwagę, istotnego zjawiska polegającego na tym, że w przypadku przycisk zostanie naciśnięty, cały zgromadzony w kondensatorze ładunek, w ułamku sekundy zwierany jest do masy, a prąd który płynie przez przycisk jest co najmniej duży :-)
Jakie są możliwe tego skutki?
Powstawanie "szpilek" o wysokim napięciu (przewyższającym dopuszczalne), które:
- mogą spowodować uszkodzenie mikrokontrolera,
- generują zakłócenia dla całego lub części Twojego urządzenia.
Trzeba ograniczyć prąd rozładowania kondensatora, co można zrobić dołączając do przycisku szeregowo rezystor np. 330Ω. W momencie gdy przycisk zostanie naciśnięty, prąd rozładowania kondensatora będzie ograniczony. Dodatkowo w przypadku części mikrokontrolerów niezbędne jest także podłączenie diody zabezpieczającej.
Dokładne wytłumaczenie tego problemu znajdziesz tutaj: Przycisk - drgania styków - bouncing
Doceń artykuł, jeżeli Ci pomógł: |
Jeżeli podłączasz zewnętrzny rezonator kwarcowy niezbędne są dwa takie same kondensatory, każdy od kilku do kilkudziesięciu pF (pikofaradów). Dokładną ich wartość znajdziesz w datasheet rezonatora lub mikrokontrolera.
Jeżeli ich nie zastosujesz to częstotliwość drgań kwarcu może nie być zgodna z jego parametrami lub w niesprzyjających warunkach kwarc nie wzbudzi się i mikrokontroler nie będzie pracował.
Niektóre mikrokontrolery, mają wewnętrzne kondensatory, które dla konkretnego przypadku (np. kwarcu 32,768Hz) mogą zostać włączone przez ustawienie fusebitów.
W takim przypadku nie należy podłączać zewnętrznych kondensatorów.
Więcej o kwarcach: Czas - odmierzanie
Doceń artykuł, jeżeli Ci pomógł: |
Przeczytaj także
Z tym tematem nierozerwalnie połączone są następujące dwa:
Dokumenty producentów
Podsumowanie
Zaniedbywanie prawidłowego podłączania podstawowych dla pracy mikrokontrolera pinów, jest grzechem początkujących elektroników, który doprowadza ich do niepotrzebnej frustracji, a w konsekwencji do wyciągania wniosków często noszących znamiona "bajek nie z tej Ziemi", czego przykładem jest opinia, iż mikrokontroler był uszkodzony fabrycznie :-)
Po prostu - super :) !!
OdpowiedzUsuńW jednym miejscu zebrane wszystkie majważniejsze, podstawowe informacje (odnosi się to to całego bloga, nie tylko do tej stronki). A co ważniejsze - poparte konkretnymi cytatami i ich tłumaczeniami, co tylko podnosi ocenę rzetelności opracowania.
Pozdrawiam, i dziękuję.
Witam ponownie:)
OdpowiedzUsuńPozwolę sobie na malutką prośbę.. Jeśli moje rozumowanie jest poprawne (rodzina Atmega ma jednakowe wymagania minimalne, czyli - opisane w blogu informacje odnośnie dławika, kondensatorów i oporników odnoszą się również do innych modeli) - może można by zrobić dopisek, że zamieszczone informacje odnoszą się również do innych Atmeg?
Ponadto -proszę zerknąć tu http://img94.imageshack.us/img94/5913/25890993.pdf Jest to skan znaleziony gdzieś w sieci, na którym zamieszczono podstawowe informacje o chyba wszystkich Atmegach. Sądzę, że zamieszczenie go na Waszym Blogu nie złamało by niczyich praw autorskich?
Pozdrawiam
Dziękuję za uwagi.
OdpowiedzUsuńTak, zasady te bezpośrednio dotyczą wszystkich AVR-ów, ale także innych mikrokontrolerów Atmela oraz mikrokontrolerów innych producentów po sprawdzeniu w ich dokumentacji.
Ideą artykułu jest zwrócenie uwagi na ten BARDZO ISTOTNY a często niedoceniany problem minimalnych podłączeń dla wszystkich mikrokontrolerów. Innymi słowy, chcemy uczulić i nauczyć sprawdzania datasheetów pod tym kątem.
Sugerowany komunikat dopiszę na listę, spraw do zrobienia.
Co do skanu, niestety nie możemy go wykorzystać, nie znając źródła. Aktualnie (wreszcie) Atmel opracował dość dobrą wyszukiwarkę swoich mikrokontrolerów, stąd tabelka ta jest już mało istotna. Ale dziękuję, za informacje,
pozdrawiam!
Odnośnie kondensatorów przy kwarcu. Miałem sytuację że atmega8 leżała i udawała martwą po tym jak bawiłem się fusebitami. Myślałem że jest po niej i zacząłem wyjmować elementy z płytki testowej, wyjałem te dwa kondensatory i nagle odżyła! Potem robiłem testy z różnymi C i nie, działała tylko jak ich nie było. Uprzedzę że to na pewno nie wina płytki stykowej, bo zaczęło się od płytki PCB, a na stykową przeszedłem żeby podłączać różne układy taktowania. Potem z PCB wylutowałem C i działa. Potem na elektrodzie spotkałem się z podobnymi problemami, ale nie mogę znaleźć wyjaśnienia dlaczego tak się dzieje. Jak widać datashet nie zawsze ma rację :).
OdpowiedzUsuńCóż jak podłączyłeś C o dużej pojemności rzędu kilki nF to stłumiłeś oscylacje, jak byś dał 22pF jak jest w dokumentacji to działa prawidłowo.
UsuńSilnik w aucie także można pozbawić korka wlewu oleju, pozostawiając otwór niezabezpieczony, ale nie odważyłbym się jechać takim autem, by silnika nie zatrzeć.
OdpowiedzUsuńInnymi słowy, przypadek, który opisujesz jest możliwy, ale oznacza, błąd w PCB, schemacie układu, wartości kondensatorów ich uszkodzenia lub ustawieniach tego mikrokontrolera (np. fusy) lub jakiś inny.
Wszystkie te błędy leżą po stronie osoby wykonującej projekt, a nie po stronie datasheet producenta mikrokontrolera czy kwarcu.
Radzę jednak stosować się do datasheet-ów a błędów szukać w swoich poczynaniach, by Piekielnych Schodów nie zaliczać.
:-)
mam nadzieje ze ktoś jeszcze czyta te komentarze i może mi pomoc. mam nowiutki programator kupiony i podobno sprawny ale nie mam gotowej podstawki i muszę składać na płytce stykowej. nie jestem pewien czy przy programowaniu atmegi32 oprócz wyprowadzeń modułu SPI (danych) mam podpinać również drugi rezystor 10kOhm pomiędzy Vcc atmegi32 czy wystarczy to co jest podłączone w programatorze? dołączam obraz programatora.
OdpowiedzUsuńhttp://www.sklep.nestor-electronic.pl/sklep_files/product/61_58.jpg
Czyta i szybko odpowiada (porównaj czasy) :-)
OdpowiedzUsuńA odpowiadając na Twoje pytanie, rezystor, o który jak sądzę pytasz, jest pomiędzy Vcc, a pinem RESET. Jeżeli chodzi Ci o ten rezystor, to jest on potrzebny w programowanym mikrokontrolerze, tylko podczas jego działania, a nie programowania.
Zawsze możesz zapytać producenta na ich forum.
Witam,
OdpowiedzUsuńmam pytanie. Czy mogę wykorzystać część portów ADC do wykrywania stanu logicznego wysoki/niski? Wybieranie stanu odbywałoby się zwierając port z Vcc. Bez zworki port podciągnięty by był przez opornik 100k do GND.
Czy na Vcc należałoby wstawić opornik ograniczający prąd ?
Dziękuję!
Możesz tak zrobić, bez rezystora do Vcc. Powinno prawidłowo rozpoznawać stany 0 lub 1, bo jak rozumie, o to Ci chodzi.
OdpowiedzUsuńSprawdź woltomierzem czy przy stanie zera logicznego na pinie, napięcie na nim nie jest większe od maksymalnego poziomu zera logicznego, przy danym napięciu zasilania mikrokontrolera. Szukaj w datasheet.
Super!
OdpowiedzUsuńWszystkie informację, fakty i mity zebrane do "kupy"!
Dzięki!
Heja, mam pytanie: czy np. do pinu ARef mogę podać kondensator o pojemności o mniejszej pojemności? Przykładowo 100pF?
OdpowiedzUsuńDziękuje z góry za odpowiedź :)
PS. Pytam, gdyż akurat nie posiadam kondensatorów 100nF.. Aktualnie na stanie mam albo mały 100pF, albo duży 4.7uF.
OdpowiedzUsuńHej! Możesz oczywiście podłączyć do AREF jeden z nich lub oba naraz. Wartość tego kondensatora nie jest jednoznacznie określona i zależy od wielu czynników. Takim uniwersalnym jest kondensator zbliżonych do 100nF.
OdpowiedzUsuńJednakże postaraj się o kondensatory 100nF, bo one są bardzo często potrzebne.
Przy okazji przeczytaj: ADC - Dokładność vs podłączanie
A ja mam pytanie odnośnie kondensatora 100nF podłączonym między VCC + 5 a masą
OdpowiedzUsuńjaka może być jego maksymalna odległość od procka aby prawidłowo filtrował napięcie ?
Nie ma na to jednoznacznej odpowiedzi. Dlatego powinien być jak najbliżej, co nie zawsze jest możliwe, w szczególności w projektach z jednowarstwową płytką.
UsuńKażdy projekt płytki jest inny i trzeba tak kombinować, by wilk był syty i owca cała :-) Jeżeli więc na przykład masz do wyboru, umieścić blisko nóżek mikrokontrolera, kondensator filtrujący zasilanie lub tranzystor sterujący jakimś sygnałem cyfrowym, to wybierz kondensator.
Projektując PCB warto zacząć od rozmieszczenia elementów najistotniejszych, a do nich należą kondensatory filtrujące, kwarc oraz wejścia analogowe i masa analogowa (jeśli jest podział mas na cyfrową i analogową). Cyfrowe sygnały dopiero w drugiej kolejności, bo są bardziej odporne na zakłócenia.
czy kondensator 100nF między VCC a GND jest też potrzebny gdy korzysta się z modułu zasulającego ze stabilizatorem ?
OdpowiedzUsuńTak, ponieważ mikrokontroler także generuje zakłócenia na zasilaniu. Przeczytaj ten artykuł: Zasilanie mikrokontrolera.
UsuńCzy w momencie, gdy korzystam z portu C jako standardowego portu we/wy muszę korzystać z podłączenia jak gdybym korzystał z ADC czy wystarczy podłączenie minimalne z VCC podłączonym do AVCC?
OdpowiedzUsuńWystarczy minimalne.
UsuńCzy kondensatory filtrujące ceramiczne 100nF mogą być na napięcie 50v?
OdpowiedzUsuńMogą.
UsuńCo to jest i jak działa jumper JP1?
OdpowiedzUsuńDodałem w artykule zdjęcie, które mam nadzieję wyjaśnia czym jest JP1 i jak działa. Oczywiście należy odłamać tylko dwa piny.
UsuńWitam
OdpowiedzUsuńCzyli 100nF kondensatory C2 i C4 podłączone do pinów AVcc i Aref mają być ceramiczne a dławik L1 może być miniaturowy osiowy ?
Tak, ceramiczne są ok, dławik osiowy też, ale potrzebny jest tylko przy precyzyjnych pomiarach ADC.
UsuńMam problem dotyczący ATtiny13A a konkretnie I/O PB5 (RESET). Port zamierzam ustawić na wyjście, by sterował przekaźnikiem, niemniej jednak jeśli do portu podłączone jest zasilanie - poprzez 10K, to wytworzy ono zapewne IB wystarczający do uruchomienia prądu kolektora IC, a tym samym przekaźnik będzie cały czas zwarty. Co w takiej sytuacji zrobić? Zwiększyć wartość rezystora VCC-> RESET (ale jaka maksymalna wartość, by uK się nie resetował?) + wartość R przed bazą, by IC był minimalny?
OdpowiedzUsuńOk, już wiem.
UsuńNie zdążyłem odpowiedzieć, ale napiszę dla innych czytelników:
UsuńPin RESET / PB5 może być wykorzystany jako wyjście pod warunkiem, że wyłączy się jego funkcję RESET za pomocą fusebitu RSTDISBL.
Ale uwaga!!!
Straci się wtedy możliwość programowania mikorkontrolera za pomocą programatora ISP, czyli np. popularnego USBasp. By ponownie móc programować mikrokontroler będzie potrzebne użycie programatora wysokonapięciowego lub Fusebit Doctora.
Witam,
OdpowiedzUsuńKorzystam z tego artykułu już bardzo długi czas, zawsze jak mam wątpliwości z minimalnym podłączeniem pinów - coś pięknego!
Mam jednak dwa pytanka co do powyższego:
1. Informacje o podłączaniu dodatkowych elementów biernych są trochę porozrzucane w dokumentacji. O ile w przypadku AVR nie jest to ZBYTNIM problemem ze względu na spory support tych uC w Internecie i zaczynając nie musiałem przerabiać 330 stron dokumentacji, to wiadomo, że nie będę mógł na to CHYBA liczyć w przypadku wszystkich mikrokontrolerów. Czy w związku z tym zaczynając zabawę ze sprzętem innych producentów, który nie jest tak dobrze opisany w internecie jak AVR jest skazany na przeczytanie całej dokumentacji przed użyciem, aby uniknąć problemów np. ze złym podłączeniem gdzieś rezystora/kondensatora, czy w ogóle nie podłączeniem niczego do jakiegoś bardzo ważnego pinu?
2. W zacytowanych z dokumentacji ATmegi8 fragmentach nie ma informacji o wartościach np. kondensatorów, czy dławika - skąd wiadomo, że musi to być 100nF, 10uH itp?
Pozdrawiam
Witam.
UsuńBardzo dobre pytania :-)
Ad. 1.
Tak faktycznie nie zawsze w dokumentacji są jasno i klarownie pokazane wszystkie informacje w jednym miejscu. Ale jest to związane z faktem, że nie ma jednej jedynej słusznej wersji podłączenia i zależy to zawsze od projektu i jego wytycznych.
W takiej sytuacji należy szukać not aplikacyjnych danego producenta. Jeżeli natomiast nadal nie mamy źródła informacji to należy przyjmować pewne standardy:
- każdy pin zasilania ma być podłączony i mieć kondensator 100nF + dodatkowo (zależnie od projektu w tym takżę PCB kondensator elektrolityczny lub tantalowy liczony w uF.
- piny zasilające część analogową z reguły są oznaczone i łatwo je rozpoznać. W zależności od tego jakie cele stawiamy przed urządzeniami należy wtedy odpowiednio zadbać o zasilanie tej części mikrokontrolera. Można to zrobić adekwatnie do przedstawionych w artykule: ADC - Dokładność vs podłączanie
Jesli chodzi o piny cyfrowe, to właściwie problem ten nie występuje, tutaj decydują co najwyżej maksymalne prądy, a te parametry na pewno są w dokumentacji przedstawione: Mikrokontroler vs prądy pinów
Tak samo z pinami resetu - w ciemno można podciągać do Vcc przez rezystor większy od 10k. Czasami jest to niepotrzebne, bo mikrokontroler ma własne wewnętrzne układy podciągające ten pin do Vcc, ale w takiej sytuacji rezystor zewnętrzny nie zaszkodzi.
Może podasz konkretny przykład i piny, z którymi masz problem?
Ad. 2.
Wartości elementów filtrujących wynikają z częstotliwości pracy urządzenia na danym filtrowanym pinie mikrokontrolera. Dla urządzeń pracujących do około 100MHz 100nF i 10uH są właściwymi wartościami i dlatego w dokumentacjach właśnie takie z reguły znajdziesz.
Ale już dla urządzeń pracujących z częstotliwością wyrażoną w GHz (np. moduły Bluetooth, WiFi, GSM, itp.), wartości te są odpowiednio inne np. 100pF i 10nH.
Dodam jeszcze że RESET-y oczywiście zależnie jakim stanem są aktywowane (bo mogą być aktywowane stanem wysokim).
UsuńDziękuję za odpowiedź :)
UsuńAd. 1: Konkretnego przykładu na razie nie ma. Po prostu znowu tu zajrzałem z wiadomych powodów i przy okazji pomyślałem "Co by było, gdyby nie ten blog". Chciałbym kiedyś spróbować swoich sił na mocniejszym sprzęcie niż AVR, np. na STM32 i wybiegłem trochę w przyszłość :>
Ad. 2 "Wartości elementów filtrujących wynikają z częstotliwości pracy urządzenia na danym filtrowanym pinie mikrokontrolera. Dla urządzeń pracujących do około 100MHz[...]" - to powyższa częstotliwość nie jest tożsama z częstotliwością taktowania?
Zalecany sposób podłączenia ATmega8 dla PDIP może ktoś mi podesłać? Będę wdzięczny.
OdpowiedzUsuńNazwy pinów i zasady ich podłączania są takie same niezależnie od rodzaju obudowy. Znajdź dokumentację Twojego mikrokontrolera i zobacz, które numery mają odpowiednie piny o nazwach omówionych w niniejszym artykule.
UsuńNo to ani nazwy ani numery sie nie zgadzają.
UsuńKonkretnie co się nie zgadza w jakim mikrokontrolerze?
UsuńNapisałem już... http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf
UsuńJa pytam o konkrety: Który pin Ci się nie zgadza i z czym się nie zgadza?
UsuńW PDIP 6 to PD4, a w TGFP 6 to VCC. Podałem ci strone masz dwa schematy obok siebie, sam zobacz reszte.
OdpowiedzUsuńJeszcze raz przeczytaj co napisałem:
Usuń"Nazwy pinów i zasady ich podłączania są takie same niezależnie od rodzaju obudowy. Znajdź dokumentację Twojego mikrokontrolera i zobacz, które numery mają odpowiednie piny o nazwach omówionych w niniejszym artykule."
Innymi słowy, skoro pytasz o pin zasilania np. Vcc, to mają one takie same nazwy i funkcje niezależnie od tego, że w jednej obudowie będzie to pin numer X, a w drugiej Y.
W artykule powyżej nie omawiamy pinu nr X, tylko na przykład pin Vcc. A to że on ma w obudowie TQFP numery 4 oraz 6, a w DIP numer 7, to już uwzględniasz sam w zależności, którą wersję obudowy zastosujesz.
Reasumując, zależnie od obudowy numery pinów mogą być inne, ale funkcje określone ich nazwą są zawsze takie same i należy odpowiednio je podłączać, wg zasad opisanych w artykule.
Czy teraz już wszystko jest zrozumiałe?
Witam,
OdpowiedzUsuńW swojej dev board do ATmega128A (zasilana 5V i zegar zewnętrzny 11Mhz) chciałem zastosować fizyczny przycisk reset więc zastosowałem się do schematu
http://1.bp.blogspot.com/-T13A998oTOs/TqtNyFbv0PI/AAAAAAAABeg/hKWcCikgKZU/s1600/AVR_RESET_kond_02.gif
Na początku myślałem że wszystko jest ok jak ATmega jeszcze była ustawiona na wewnętrzny zegar i programator (USBASP z autowykrywaniem slow sck) ustawiał się na slow sck.
Po zmianie fuse na zewnętrzny kwarc zaczął pojawiać się problem, że bez slow SCK AVR udawało się programować raz na 30 prób (przy fail error target does not respond) dopiero przy slow SCK (czasami wystarczało -b 0.5 a innym razem trzeba było zejść nawet do -b 375 losow) udawało się programować AVR raz po razie.
Wylutowałem z PCB kondensator i mogę bez problemu programować bez jakiejkolwiek slow SCK.
Czy zmniejszenie kondensatora np ze 100nF do powiedzmy 10nF pomoże?
Czy ktoś miał taki problem czy może jest to ograniczone tylko do Atmega128A?
Dioda 1n4148, R10 330ohm, R8 10k, C8 100nF
UsuńPrzyczyną jest oczywiście kondensator. Można go odłączać na czas programowania za pomocą np. jumperów. Możesz także zmniejszyć jego pojemność - lepsza mała niż żadna.
UsuńNiemniej jednak, ten schemat to tak zwane maksimum poprawności (wg zaleceń producenta mikrokontrolera) i powinien być używany przede wszystkim tam gdzie z zakłóceniami mamy spore problemy.
Jeśli więc nie pracujesz w takim środowisku, to nie musisz być aż tak skrupulatny. No chyba, że to urządzenie na sprzedaż, wtedy warto zadbać o szczegóły, by mieć pewność poprawnej pracy na wieki :-)
Kondensator na resecie jest dobry w ostatecznej wersji układu, gdy ma to pracować bez przypadkowych restartów powodowanych zakłóceniami. By zrobić reset i rozpocząć programowanie programator musi "wyssać" ten prąd, by na tyle obniżyć napięcie by wymusić reset. Im większy kondensator tym więcej czasu to zajmuje, co jest korzystne przy normalnej pracy, krótki spadek napięcia nie zresetuje układu, ale przy dużej szybkości programowania programator czeka krócej na ten reset i wywala błąd. Przy prędkościach niższych jest większa szansa na reset, czas "wysysania" prądu z resetu się wydłuża bo oczywiście wszystko dzieje się dłużej, programator dłużej czeka na reset. Jeśli u Ciebie tak reaguje tylko Atmega128A, to znaczy, że akurat ten egzemplarz musi mieć wyzwalanie reset bliżej 0V.
UsuńA dlaczego wszyscy zapomnieli o przerzutniku RS i/lub bramce Schmitta? Takie elementy w sposób sprzętowy i skuteczny rozwiązują problematykę :)
OdpowiedzUsuńJak się domyślam twój post dotyczy eliminacji drgań. To ja zapytam - po co stosować elementy zewnętrzne, skoro mamy MCU? Po to się ładuje uniwersalny układ jakim jest MCU, aby uprościć hardware, kosztem rozbudowy software. Przy czym dodanie paru linii kodu jest zazwyczaj tańsze, prostsze i bardziej uniwersalne, niż dodanie elementów sprzętowych.
UsuńWitam. Jak to jest z tym rezystorem przy pinie RESET w Atmega8? Czy na czas programowania także powinien być podłączony? Avrdude nie komunikuje się z atmegą i nie może odczytać sygnatury. Używam prostego programatora lpt bascom, tyle tylko że zamiast rezystorów 330R dałem 220R.
OdpowiedzUsuńJeśli na RESET masz rezystor rzędu 220 omów to programator może nie być w stanie wymusić aktywacji tego sygnału. Normalnie na tym pinie daje się rezystor rzędu 4k7-10k, a najczęściej w ogóle się nie daje.
UsuńMoże nieprecyzyjnie się wyraziłem - na pinie reset jest rezystor 10k. Programator wg. schematu na liniach SCK, MOSI, MISO i RESET powinien mieć rezystory 330 omów, ale nie miałem takich więc dałem 220 omów.
OdpowiedzUsuńPrzyjemny tekst, napisany zwięźle i czytelnie. Nic dodać nic ująć.
OdpowiedzUsuńPozdrawiam!
Przy zasilaniu bateryjnym rezystor 10k (RESET-VCC) pobiera stale 1,4mA?
OdpowiedzUsuńJak zwiększę rezystor do 100k to będzie wystarczające zabezpieczenie?
*Miałem na myśli zasilanie NE555 ze źródła 14V, gdzie wisi mi wolny reset
UsuńPytasz o układ NE555, a ten artykuł nie dotyczy tego układu.
UsuńJednakże, by nie pozbawiać Ciebie odpowiedzi informuję, że dokumentacji układu w tabelce parametrów elektrycznych znajdziesz parametr "Reset current", którego szukasz.
Dziękuję ślicznie.
UsuńYou are my hero!
OdpowiedzUsuńasf
OdpowiedzUsuń