ATtiny13A BASCOM – aktywacja i użycie Uref 1,1V w ADC, konfiguracja Reference Internal1v1

Pytanie

jak włączyć i użyć w bacomie uref 1,1v w attiny13a?

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

• Ustaw źródło odniesienia ADC na 1,1 V poleceniem BASCOM:
Config Adc = Single , Prescaler = Auto , Reference = Internal1v1 'lub Internal
• Uruchom przetwornik: Start Adc
• Odczytuj pomiary: AdcVal = GetAdc(kanał) i przeliczaj napięcie:
U = AdcVal * 1.1 / 1023

Kluczowe punkty
– bit REFS0 w rejestrze ADMUX = 1 → wewnętrzne 1,1 V
– odczekaj ≥1 ms po włączeniu referencji i odrzuć pierwszy pomiar
– rzeczywiste Uref ma tolerancję ±10 %, warto je skalibrować

Szczegółowa analiza problemu

  1. Teoria
    Przetwornik ADC w ATtiny13A może korzystać z trzech źródeł odniesienia: VCC, AREF (brak w obudowie 8-pin) lub stabilizowane wewnętrzne 1,1 V. Wybór odbywa się bitem REFS0 rejestru ADMUX. Przy REFS0=1 układ przełącza precyzyjny band-gap ~1,1 V, niezależny od wahań zasilania.

  2. Implementacja w BASCOM-AVR

    $regfile = "attiny13.dat"
    $crystal = 9600000            'wewn. RC 9,6 MHz
    Config Adc = Single , Prescaler = Auto , Reference = Internal1v1
    Start Adc                      'włączenie modułu
    Dim AdcVal As Word
    Dim Uin    As Single
    Do
     AdcVal = GetAdc(0)         'kanał ADC0 = PB5
     Uin    = AdcVal * 1.1 / 1023
     Waitms 500
    Loop

    • Prescaler = Auto dobiera dzielnik tak, by fCLK_ADC 50-200 kHz.
    • Pierwszy pomiar po konfiguracji może być obarczony błędem – najlepiej go odrzucić.

  3. Bezpośredni zapis do rejestrów (gdy używasz asemblera/planujesz optymalizację):

    ADMUX  = &B01000000      'REFS0=1, kanał 0
    ADCSRA = &B10000111      'ADEN=1, preskaler /128

    Rozpoczynasz konwersję ustawiając ADSC, czekasz aż bit spadnie do 0, odczytujesz ADCL/ADCH.

  4. Zakres pomiarowy
    0 – 1,1 V z rozdzielczością ≈1,07 mV/LSB. Dla wyższych napięć stosuj dzielnik rezystorowy lub przełącz Vref na VCC.

Aktualne informacje i trendy

• Najnowsze wersje BASCOM (>2.0.8.8) akceptują słowa Internal, Internal1v1, a nawet 1100 jako parametr Reference.
• Popularne biblioteki „TinyCore” dla środowisk C/C++ również automatyzują przełączenie bitu REFS0, co pozwala portować kod między BASCOM a C bez zmian sprzętowych.
• W nowszych ATtiny (seria 0/1), Uref wzrosło do 1,024 V, a ADC ma wbudowaną fabryczną kalibrację w EEPROM – trend idzie w kierunku większej dokładności bez konieczności zewnętrznych komponentów.

Wspierające wyjaśnienia i detale

• Stabilizacja band-gap: wg noty aplikacyjnej Atmela trzeba odczekać min. 60-110 µs, lecz w praktyce bezpieczne jest 0,5-1 ms.
• Kalibracja: zmierz multimetrem napięcie na pinie VCC→GND przy włączonym Vref (metoda „pomiaru wewnętrznego VCC”) lub zewnętrznie doprowadź 1,000 V i koryguj współczynnik w programie:
Const Vref_real = 1.091 : Uin = AdcVal * Vref_real / 1023
• Zużycie energii: wyłącz ADC gdy nie jest potrzebny (Stop Adc lub ADEN=0) – oszczędza ok. 230 µA przy 5 V.

Aspekty etyczne i prawne

• Brak specyficznych kwestii prawnych; należy jedynie przestrzegać deklaracji RoHS przy projektach komercyjnych.
• Używając dzielników do pomiaru napięć powyżej 1,1 V, należy zapewnić, że przekroczenie zakresu nie uszkodzi mikrokontrolera (warto rozważyć diodę Zenera lub bezpiecznik polimerowy).

Praktyczne wskazówki

• Test dokładności: podaj na wejście ADC stabilne napięcie odniesienia 0,55 V (½ Uref) z rezystorowego dzielnika i sprawdź, czy odczyt ≈512 ±10 LSB.
• Jeśli w projekcie odczytujesz napięcie baterii >3 V, zastosuj dzielnik 1:3 (np. 470 kΩ/1 MΩ), a wynik skaluj w oprogramowaniu:
Ubat = AdcVal * 1.1 / 1023 * 3
• Zawsze umieszczaj kondensator 100 nF przy pinie VCC-GND i 10 nF przy AREF (nawet jeśli nie jest wyprowadzony – dołącz do VCC).

Ewentualne zastrzeżenia lub uwagi dodatkowe

• Tolerancja ±10 % Uref ogranicza absolutną dokładność bez kalibracji.
• Przy taktowaniu MCU >9,6 MHz prescaler może ustawić się na /128, co obniża szybkość pojedynczej konwersji (~104 µs); rozważ ręczny dobór preskalera.
• Nie każda wersja BASCOM obsługuje słowo Internal1v1; w starych kompilatorach użyj Config Vref = Int lub bezpośrednio modyfikuj ADMUX.

Sugestie dalszych badań

• Porównaj stabilność wewnętrznego band-gap z zewnętrznym wzorcem (np. REF192 1,2 V) i oceń wpływ temperatury.
• Sprawdź technikę „differential ADC with gain” dostęp­ną w większych AVR-ach (ATmega) – może zastąpić dzielnik napięciowy.
• Rozważ migrację do nowych mikrokontrolerów AVR-DB lub PIC 16-Fxx, które oferują wbudowane LUT-y kalibracyjne.

Krótkie podsumowanie

Ustawienie wewnętrznego Uref 1,1 V w ATtiny13A sprowadza się do ustawienia REFS0=1 (lub komendy Reference = Internal1v1) i uruchomienia ADC. Po krótkiej zwłoce odczytuj wartości przez GetAdc(), przeliczaj je ze wzoru U = ADC * 1.1 / 1023 i kalibruj według zmierzonego rzeczywistego Uref, jeśli potrzebujesz większej precyzji. Dzięki temu uzyskasz pomiary niezależne od wahań VCC w zakresie 0-1,1 V z rozdzielczością ~1 mV.

Oceń odpowiedź: 1

Zadaj dodatkowe pytanie Sztucznej Inteligencji

Czekaj (1min)...
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.