logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak poprawnie odczytać 10-bitową wartość ADC z rejestrów ADCL i ADCH w C?

damiano713 22 Wrz 2007 09:49 1128 3
REKLAMA
  • #1 4308636
    damiano713
    Poziom 15  
    Posty: 177
    Pomógł: 12
    Ocena: 299
    Witam!

    Mam mały problem, tzn nie jestem pewny czy dobrze napisałem pobranie wartości rejestrów ADCL i ADCH. Jest to wartość 10 bitowa i tu nie wystarczy skopiowanie do zmiennej typu byte...

    Wykombinowałem taki kod:
    
    volatile unsigned int value_adc0;
    value_adc0 = ADCL;
    value_adc0 |= (ADCH << 8);
    
    


    Dodam jeszcze że bit ADLAR jest ustawiony na 0, czyli zapis liczby w rejestrach ADCL i ADCH jest prawostronny...
  • REKLAMA
  • Pomocny post
    #2 4308662
    aster11
    Poziom 19  
    Posty: 211
    Pomógł: 36
    Ocena: 1
    Dobrze.
    Zmienna value_adc0 nie musi być volatile, chyba, że odwołujesz się do niej jednocześnie w programie głównym i w przerwaniu (przerwaniach).
  • REKLAMA
  • #3 4308670
    damiano713
    Poziom 15  
    Posty: 177
    Pomógł: 12
    Ocena: 299
    Dzięki za odpowiedź. Nie byłem pewny bo nie mam podłączonego LCD lub LED i nie mam jak sprawdzić wartości value_adc0.

    Ten kod jest zawarty w przerwaniu ADC...
    
    ////////////////////
    //Obsługa przerwań
    SIGNAL(SIG_ADC) {
    	value_adc0 = ADCL;
    	value_adc0 |= (ADCH << 8);
    }
    
    
  • Pomocny post
    #4 4308684
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Możesz także odczytywać wartość ADCW.
REKLAMA