Potrzebuje pomocy. Mam takie dwa fragmenty kodu do obsługi przetwornika A/C w Atmega8. Przetwornik jest ustawiony na lewostronne wyrównanie wyniku. Jest ustawiony bit ADLAR=1.
Pierwsza część ta odczytuje wartość A/C
Kod: Zaznacz cały
int16_t adc_smp;
adc_smp = ((int16_t) ADC) - 0x8000;
Nstępna część ma służyć jako wskaźnik przekroczenia zakresu:
Kod: Zaznacz cały
/* overdrive indicator */
if((((adc_smp & 0xff00) >> 8) < -120) || (((adc_smp & 0xff00) >> 8) > 120)) {
PORTC |= _BV(PC3);
} else {
PORTC &= ~_BV(PC3);
}
PORTC &= (~_BV(PC2)) & 0xff;
Teraz mam probem.
Jeżeli jest left adjustment czyli ADLAR=1 to po odczycie z pierwszego fragmentu co jest odczytywane, Ponieważ A/c jest 10 bitowy to to oznacza że wszystkie bity są odczytane czy tylko 8 najstarszych a dwa pozostałe są pmninęte.
Jak to w ogóle działa i co dokładnie robi odjęcie 0x8000.
A teraz wskaźnik przekroczenia zakresu, Przy jakiej max warości podanej na wejście on zadziała. Niby sygnał H oznacza przekroczenie zakresu.
napięcie referencyjne dla przetwornika to 2.5 V
Program jest kompilowany przez AVR-Gcc (WinAVR)