Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega128][C] ADC, coś źle robię - nie widzę tego.

28 Gru 2010 22:34 912 4
  • Poziom 15  
    Próbuję odczytać napięcie z li-pola. Wszystko skonfigurowałem jak poniżej.

    Kod:

    Code:
       DDRD=0xFF;
    
       DDRF=0x00;
       InitADC();
         while(1);
          {
          PORTD=ReadADC(BATT);
          TimeDelay(wait);
       }


    gdzie poszczególne funkcje i definicje:

    Code:
    #define BATT 1
    
    void InitADC()            // Inicjalizacja przetwornika A/C
    {
      ADMUX = 0x60;      // 0 1 1 0 0 0 0 0 - napięcie odniesienia zewn. 5V
      ADCSRA = 0x86;   // 1 0 0 0 0 1 1 0 - przetwornik wł±czony, tryb 'ręczny', bez przerwania,
    }

    unsigned char ReadADC(char channel)
    {
      ADMUX &= 0xE0;         // Wyzerowanie numeru kanału
      ADMUX |= channel;         // Wybór ż±danego kanału

      bit_set(ADCSRA, ADSC);   // Rozpoczęcie konwersjii

      while(bit_get(ADCSRA, ADIF)==0);   // Oczekiwanie na zakończenie konwersji

      return (unsigned char)ADCH;
    }


    Na wyjściu ciągle dostaje same 0. Pomiędzy próbami pomiarów czekam 200ms. Oczywiście napięcie z baterii (3v7) jest podłączone do PF.1(ADC1). Potrafi mi ktoś z tym pomóc?
  • Poziom 12  
    Code:
    ADMUX = 0x60;      // 0 1 1 0 0 0 0 0 - napięcie odniesienia zewn. 5V 

    a to nie jest przypadkiem wewnętrzne Avcc? Zewnętrzne (Aref) (przynajmniej na atmega8) to 0 0 1 ..., czyli 0x20
    I czy na pewno odczytujesz same zera? Jeśli odczytujesz same jedynki to by się zgadzało – odczytujesz coś większego niż Avcc
  • Poziom 12  
    Ok, w tym sensie zewnętrzne. Sorry, myślałem, że mówisz o arefie.

    Szczerze nie wiem, jak układ działa, gdy Avcc > vcc. W m8 one są chyba zwarte i tak nie można robić. Ja bym spróbował puścić przez dzielnik napięcia, dać avcc=vcc i porównywać z wewnętrznym 2.56V
  • Poziom 15  
    AVCC = VCC!

    wszystko idzie z LDO 5V
    Zasilane jest z li-pola 7.4V, a napięcie chce mierzyć z wyjścia do balancera 3.7V i jak pociągne zwyczajnie miernikiem to daje mi te 3.7V, ale atmega już nie chce tego zmierzyć.