Tym razem opiszę – zanotuję sobie, 😀 jak to jest z tymi wewnętrznymi pull-up resistor i pull-down resistor w µC AVR.
Dla świętego spokoju można wyczytać w nocie katalogowej każdego µC jakie ma te rezystory i czy w ogóle ma, oraz o jakich są one wartościach. Rezystancja tych elementów jest odmienna dla pinów reset i GPIO. Stosowne informacje o wartościach zawiera dział Electrical Characteristics tabela – DC Characteristics, – wiersze u dołu.
Technologia w jakich są wytwarzane nasze µC oraz zoptymalizowany koszt wykonania tych obwodów w masowej produkcji gwarantuje tylko niewielką dokładność (duża tolerancja wartości). Niemniej jest to wystarczające w większości zastosowań i upraszcza tworzenie PCB. Zawsze dodatkowo można przylutować swój pull-up resistor, lub pull-down resistor, gdyby ten wewnętrzny okazał się niestosowny.
Typowe ich wartości w rodzinach Mega i Tinny wynoszą:
Reset Pull-up Resistor – 30 do 60kΩ (lub do 80kΩ małe tinny z 8pin)
I/O Pin Pull-up Resistor – 20 do 50kΩ
Eeee nie da się tak uogólnić, Tinny 24/44/84 np mają pull-up resistor w granicach 20 do 100kΩ. Czyli ta rodzinka rządzi się „swoimi wartościami”. Gdyby to było istotne trzeba indywidualnie zaglądać.
Aby uaktywnić funkcjonalność pull-up resistor lub pull-down resistor w kodzie po deklaracji funkcji pinu należy wydać polecenie Set, np
1 |
set Pinc.7 |
lub
1 |
Pinc.7=1 |
Ot i cała magia. Teraz nie trzeba lutować opornika, gdy do wejścia połączony jest np przycisk. Dla takiej funkcjonalności pin powinien być mieć zadeklarowaną funkcjonalność jako wejście. Czyli aby prawidłowo korzystać z tej możliwości uaktywniamy podciąganie do Vcc, a wykrywamy stan przeciwny.
Dla ścisłości wspomnę też o tym, iż rodziny Tinny i Mega mają tylko pull-up resistor (podłączany do VCC), a rodzinka XMega posiada dodatkowo pull-down resistor (podłączany do GND).