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

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

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

    Kod:

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


    gdzie poszczególne funkcje i definicje:

    #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?
  • REKLAMA
  • #2 8927047
    krdln
    Poziom 13  
    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
  • REKLAMA
  • REKLAMA
  • #4 8927160
    krdln
    Poziom 13  
    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
  • #5 8927168
    mog123
    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ć.
REKLAMA