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

[atmega8] Napięcie na kanale wejściowym ADC.

pawelecW 19 Sty 2009 09:17 1893 10
REKLAMA
  • #1 6020932
    pawelecW
    Poziom 10  
    Witam
    Próbuję uruchomić przetwornik ADC (Atmega8) i zauważyłem że na wejściu przetwornika tzn kanału z którego chcę odczytywać sygnał analogowy pojawia się dodatnie napięcie o wysokości ok 1.4V.
    Napięcie to pojawia się jeśli wejście ADC "wisi w powietrzu"
    Jesli podaję na wejście ADC sygnał analogowy to napięcie na wejściu ADC jest wypadkową tych dwóch napięc
    Czy jest to normalne ?

    Poprawiłem tytuł - Regulamin. [c_p]
  • REKLAMA
  • #2 6020950
    snow
    Poziom 31  
    Czy ustawiłeś ten pin jako wejście bez pull-up'a?
  • REKLAMA
  • #3 6020957
    dawid512
    Poziom 32  
    Zobacz czy po podaniu na przetwornik napięcia 5V on zwróci wartość 1023. Jeżeli tak to wszystko jest ok. Po za tym gdy któraś noga od ADC wisi w powietrzu to jakieś napięcie na niej się pojawia.
  • REKLAMA
  • #4 6021395
    wader_669
    Poziom 28  
    podaj kod i schemat
  • #5 6023301
    pawelecW
    Poziom 10  
    dołączam schemat
    [atmega8] Napięcie na kanale wejściowym ADC.
    i kod
    
    #include "definicje.h"
    int pomiar, wynik;
    
    void Init_ADC(void)
    
    {
    // Wybranie wewnetrznego  napiecia odniesienia
    	ADMUX |=_BV(REFS0);		
    	ADMUX |=_BV(REFS1);
    //	ADMUX |=_BV(REFS1);
    
    // Sposób zapisu chce odczytac 10 bitów
    ADMUX &=~_BV(ADLAR);
    
    // Wybranie kanalu wejscia ADC
    ADMUX |=_BV(MUX0); 
    
    // Wlaczenie przetwornika
    ADCSRA |= _BV(ADEN);
    
    // Wybranie czŕstotliwoťci dla taktowania przetwornika
    ADCSRA |=_BV(ADPS0);
    ADCSRA |=_BV(ADPS1);
    ADCSRA |=_BV(ADPS2);
    } 
    
    void Start_ADC(void)
    {		pomiar=0;
    		wynik = 0;
    		i=10;
    		while(i>0)	
    		 {
    		  ADCSRA |=_BV(ADSC);  				 // Rozpoczecie przetwarzania
    				while(bit_is_set(ADCSRA,ADIF))   // Oczekiwanie na zakonczenie przetwarzania
             		{}; 
    		 		pomiar = (ADCL|(ADCH<<8));
    				_delay_ms(20);
    				wynik=(wynik+pomiar);
    			i--;
    			}
    }	
    void NaEkran(int pomiar,int x,int y )
    {
    	lcd_init(LCD_DISP_ON);
    	lcd_clrscr(); 
    	lcd_gotoxy(x,y);        
    	itoa (pomiar,bufor1,10); 
    	lcd_puts(bufor1);
    }
    
    
    int main(void)
    {	
    Init_ADC();
    
    	while (1)
    	{	
    		Start_ADC();
    		pomiar = (wynik/10);
    	   	x=1;
    		y=0;
    		NaEkran(pomiar, x, y);
    		_delay_ms(20);
    	
    	}
    }
    

    próbowałem zastosowa rezystor na wejściu adc, ale to nie załatwia sprawy i napięcie aczkolwiek mniejsze nadal istnieje
  • #6 6025079
    kasaidolar
    Poziom 19  
    Przed init_adc ustaw pin adc1 na wejscie i daj mu wartosc 0.
  • #7 6030450
    pawelecW
    Poziom 10  
    Próbowałem ustawić PINC jako niski ,wysoki lecz to powodowało jedynie wzrost napięcia.
    Znalazłem jakieś rozwiazanie które się sprawdza jak na razie. Link

    chodzi mi o fragment kodu dotyczący wybrania kanału dla prztwornika:
    // Wybór kanału wejścia - PC3 (ADC3)
    ADMUX |= _BV(MUX1)|_BV(MUX0);

    u mnie było
    ADMUX |= _BV(MUX0);

    z tego co wyczytałem do tej pory kanał wybiera się
    ADMUX |= _BV(MUXx); gdzie x jest numerem kanału
    nie rozumiem powyższego zapisu
  • REKLAMA
  • #8 6030784
    kasaidolar
    Poziom 19  
    Cytat:
    z tego co wyczytałem do tej pory kanał wybiera się
    ADMUX |= _BV(MUXx); gdzie x jest numerem kanału
    nie rozumiem powyższego zapisu


    Zagladnij na strone 206 dokumentacji to wszystko sie wyjasni. A ustawileś port na wejście? Przed INIT_ADC?

    Cytat:
    ADMUX |= _BV(MUX1)|_BV(MUX0);
    to ustawienie na ADC3
  • #9 6035510
    pawelecW
    Poziom 10  
    Tak, port ustawiłem, źle zinterpretowałem sposób włączania portu. wszystko już jasne.
    port 3 działa, na 2 i 1 nadal są te same problemy, być może są uszkodzone, nie będę już dłużej drążył tematu.
    Pozdrawiam i dziękuję za podpowiedz i pomoc
  • #10 6035849
    kasaidolar
    Poziom 19  
    A nie masz gdzies zwarcia? moze wyciagnij procka (jak mozesz) i sprawdz czy w podstawce tam gdzie jest ten problematyczny pin czy nie masz czasami napiecia czy cos
  • #11 6042000
    pawelecW
    Poziom 10  
    Pomogła wymiana kontrolera na nowy(wcześniej już sprawdzałem czy nie ma zwarcia), wszystkie kanały działają. Swoją drogą to dziwne ze uszkodzenie tych wejść nie wpływało na prace całego kontrolera....

    temat zakończony
REKLAMA