Kiedy napiszesz Getadc(0) to żeby odczytać wartość napięcia z odpowiadającego ADC0 pinu program musi najpierw przestawić Multiplexer.
Przetwornik bowiem najczęściej jest jeden. Jest on tylko przełączany pomiędzy pinami.
Kiedy kanał zostanie przełączony to pierwszego odczytu nie powinniśmy brać pod uwagę. Taki odczyt chwilę trwa..
Bascom jednak musi przestawić multiplexer, wystartować konwersję, poczekać na jej zakończenie, wystartować nową i dopiero po jej zakończeniu oddać nam wynik...
Są sytuacje gdzie korzystamy sobie tylko z jednego kanału, na przykład potencjometru, ale program mamy trochę napięty czasowo.
Możemy wtedy nie korzystać z Getadc(). Możemy sobie ustawić ten wybrany kanał i uruchomić tryb w którym ADC będzie samplowało samo. Wynik będzie gotowy czekał na nas i wystarczy go sobie szybko wciągnąć i lecieć dalej

Czasami niepotrzebna nam jest też pełna dokładność przetwornika do 1024 i zupełnie zadowolilibyśmy się wynikiem do 255 i jeszcze dostali szybsze jego działanie

Funkcje Free Running, automatyczne dobranie optymalnego preskalera dla ADC i łatwy wybór napięcia odniesienia możemy powierzyć Bascomowej instrukcji Config ADC Włączy ona też i zainicjuje przetwornik.
Natomiast wybór kanału i zmniejszenie wyniku do 255 w odpowiedzialnym za to rejestrze ADMUX wygodnie ustawimy funkcją Bits()
Funkcją tą wybieramy sobie bity do ustawienia. Reszta nas nie interesuje

Za wybór kanału odpowiadają bity od 0 do 4, a wynik przesunie nam do rejestru ADCH bit ADLAR
Poniższy program będzie zmieniał wynik na LCD kiedy będziemy zmieniać położenie potencjometru..a Getadc() tam nie ma

Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "attiny26.dat" 'SRAM 128B, EE 128B, FLASH 2KB
- $crystal = 8000000
- $hwstack = 16
- $swstack = 2
- $framesize = 24
- Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
- Config Lcd = 16x2 'nowy sposob zapisu
- Cursor Off
- Cls
- 'ADC Settings
- '-------------------------------------------
- Config Adc = Free , Prescaler = Auto , Reference = Avcc
- ADMUX = Bits(MUX0 , MUX1 , ADLAR) 'bits 0&1=ADC3, bit 5=ADLAR
- Dim New_adc As Byte , Old_adc As Byte 'nowa i poprzednia wartość
- '-------------------------------------------
- Do
- New_adc = ADCH
- If Old_adc <> New_adc Then 'jeśli poprzednia wartośc różni się od nowej..
- Old_adc = New_adc
- Locate 2 , 1 : Lcd New_adc ; " "
- End If
- Loop
- End