jak podłączyć potencjometr do Attiny2313
– ATtiny2313 nie ma wbudowanego przetwornika ADC, dlatego sam potencjometr można podłączyć tylko jako dzielnik napięcia, ale do poprawnego odczytu jego położenia potrzebna jest jedna z trzech metod:
1) pomiar czasu ładowania kondensatora (układ RC),
2) wykorzystanie komparatora analogowego (pomiar progowy),
3) użycie zewnętrznego układu ADC (SPI/I²C).
Kluczowe punkty
• skrajne wyprowadzenia potencjometru → VCC i GND
• suwak → wejście pomiarowe (pin cyfrowy, AIN0/AIN1 lub wejście układu ADC)
• konieczność dodatkowego hardware’u lub soft‑pomiaru czasu, bo brak ADC.
– 18 linii I/O, brak ADC, jest komparator analogowy (AIN0 = PB0, AIN1 = PB1), zegar do 20 MHz, licznik 16‑bitowy dla dokładnych pomiarów czasu.
Pomiar RC (software ADC)
Schemat:
• Potencjometr 10 kΩ między VCC a GND.
• Suwak → pin PB2 (przykład) + kondensator 100 nF do GND.
Algorytm:
1) PB2 jako wyjście LOW – rozładowanie C.
2) Po 5–10 µs przełączyć PB2 na wejście (tri‑state).
3) Timer1 start, czekać aż PINB&0x04==1.
4) Odczytać licznik – czas ∝ Rpot.
Równanie: \( V_C(t)=V_{CC}\bigl(1-e^{-t/(R\,C)}\bigr)\); próg logiczny ≈ 0,6·VCC (dla typowego CMOS).
Rozdzielczość: ~8–9 bitów po kalibracji; wrażliwe na zakłócenia, ale zero dodatkowych układów.
Komparator analogowy (pomiar progowy)
• Suwak → AIN0 (PB0).
• AIN1 → napięcie referencyjne (np. dzielnik 2,5 V lub DAC z PWM+RC).
• Przerwanie ACISR sygnalizuje przekroczenie progu.
Umożliwia detekcję „mniej/więcej”, nie pełną wartość.
Zewnętrzny ADC (najdokładniejsze) Przykład: MCP3008 (10 bit, SPI) Schemat połączeń: |
MCP3008 | ATtiny2313 |
---|---|---|
VDD/VREF | VCC (+5 V) | |
AGND/DGND | GND | |
CLK | PB7 (SCK) | |
DIN | PB5 (MOSI) | |
DOUT | PB6 (MISO) | |
CS | PB4 (dowolny GPIO) | |
CH0 | suwak potencjometru |
Kod (fragment, AVR‑GCC, SPI master, F_CPU=8 MHz):
uint16_t adc_read(uint8_t ch){
PORTB &= ~(1<<PB4); // CS low
spi_transfer(0x01); // Start bit
uint8_t hi = spi_transfer(0x80|(ch<<4)); // single‑ended ch
uint8_t lo = spi_transfer(0x00);
PORTB |= (1<<PB4); // CS high
return ((hi&0x03)<<8)|lo;
}
Rozdzielczość 10 bitów, ±1 LSB, szeroki wybór układów (ADS1115 16 bit I²C, MCP3208 12 bit SPI).
– Dla metody RC konieczne są:
• charakterystyka τ=R·C,
• tabela LUT ↔ napięcie,
• filtr medianowy lub uśrednianie z kilku pomiarów.
Kryterium | RC | Komparator | Zewn. ADC |
---|---|---|---|
Koszt | 1 × C | 0 (jeśli ref. już jest) | 3–5 zł (MCP3008) |
Dokładność | 6–9 bit | progowe | 10–16 bit |
Zużycie pinów | 1 | 2 | 3–4 |
Nakład soft | średni (timery) | niski | średni (SPI/I²C) |
– Coraz częściej stosuje się nowsze tinyAVR‑1 (ATtiny1616, 3217) z wbudowanym 12‑bit ADC, co eliminuje problem.
– Popularne „tiny‑core” do Arduino obsługują metodę RC (analogReadRC).
– Na rynku pojawiają się ultratanie 8‑kanałowe 12‑bit ADC (np. MCP3208 klony) w cenie < 1 USD.
– Próg logiczny HIGH dla wejść portu B przy VCC=5 V: typowo 0,6 VCC ≈ 3 V, co wpływa na stałą czasową wymaganą do detekcji w metodzie RC.
– Wersja niskonapięciowa (VCC=3,3 V) zmniejsza próg do ~2 V, skracając czasy ładowania.
– W metodzie RC warto dodać rezystor szeregowy 100 Ω przy przełączaniu wyjścia, by ograniczyć prąd rozładowania kondensatora.
– W aplikacjach bezpieczeństwa (np. sterowanie silnikiem) nie wolno polegać wyłącznie na metodzie RC (brak deterministycznej dokładności).
– Układy ADC muszą spełniać dyrektywę RoHS; dla produktów komercyjnych warto wybrać sprawdzone dostawy, unikać podróbek.
– W przypadku urządzeń łączących się z siecią – zapewnić ochronę danych (niezwiązane bezpośrednio, ale istotne dla całości projektu).
– Zawsze filtruj zasilanie: 100 nF ceramiczny przy VCC / GND ATtiny + 10 µF tantal przy złączu.
– Dla metody RC rób pomiar kilkukrotnie i uśredniaj.
– Przy SPI ustaw CPOL=0, CPHA=0, SCK ≤ 2 MHz dla MCP3008 przy 5 V (datasheet).
– Dla dokładności zewn. ADC użyj wspólnej masy analogowej i skróć ścieżki sygnałów.
– Offline‑odpowiedzi, które wskazują „8 kanałów ADC w ATtiny2313” są niepoprawne – mylone z ATmega/ATtiny z serii 24/44/84.
– Metoda RC traci liniowość dla niskich/długich czasów; wymaga mapowania nieliniowego.
– Komparator daje tylko wynik binarny, więc nie zastąpi pełnego pomiaru.
– Przegląd tinyAVR‑1/0 z wbudowanym ADC jako naturalnego następcy ATtiny2313.
– Analiza algorytmów linearyzacji RC (aproksymacja logarytmiczna).
– Testy stabilności pomiaru RC w różnych temperaturach (±20 ppm/°C).
– Integracja z tanimi cyfrowymi potencjometrami (np. MCP41010) jako alternatywa.
ATtiny2313 nie mierzy napięcia analogowo, ale potencjometr można wykorzystać:
• najprościej – metoda RC, jeden kondensator i pomiar czasu;
• bardziej niezawodnie – zewnętrzny ADC (np. MCP3008 przez SPI);
• opcjonalnie – komparator dla detekcji progowej.
Wybór zależy od wymaganej dokładności, kosztu i liczby dostępnych linii I/O.