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][C] ADC, napięciowy czujnik odległości SHARP

Papillon11 23 Cze 2011 21:12 1793 4
REKLAMA
  • #1 9643732
    Papillon11
    Poziom 10  
    Witam.
    Mam pewien problem z inicjalizacją przetwornika ADC i nie wiem gdzie robię błąd a próbowałem wszystkiego więc proszę o pomoc.
    Kod który zamieściłem jest tylko do testów.
    Przetwornik ma odczytywać na bieżąco wartość napięcia na wyjściu czujnika gdzie jego zakres wyjściowy wynosi od 0.2V do 3.2V, ma on wykrywać przeszkody w robocie mobilnym. Korzystam z napięcia referencyjnego z pinu AVcc podłączonego do +5V przez kondensator 100uF do GND, Aref podłączony przez kondensator 100uF do GND. Po wielokrotnych próbach myślałem że procek jest uszkodzony i próbowałem na atmedze16 bez powodzenia. Czujnik też sprawny bo sprawdzałem napięcie na jego pinie wyjściowym, zmienia się w danym przedziale. Nie mam już żadnych pomysłów,a na pewno robię gdzieś błąd, może ktoś widzi gdzie leży problem?

    #include <avr/io.h>
    
    int main()
    { 
    	DDRC = 0x00;
    	PORTC = 0x00;
    	DDRD = 0xff; 		
    	PORTD = 0x00;		
    	
    	
    	ADCSRA |= (1<<ADEN) |(1<<ADSC) |(1<<ADFR) |(1<<ADPS1) |(1<<ADPS0);//Włączenie przetwornika,start konwersji,
    																		    //free running,preskaler 8
    	
    	ADMUX |= (1<<REFS0) |(1<<ADLAR);									 //Napięcie na AVcc, wyrównanie do lewej
    	
    	for(;;)											
    	{												
    
    		if(ADCH>=400)
    		{
    			PORTD |= _BV(7);	//Zapal diodę
    		}
    		else
    		{
    			PORTD &= ~_BV(7);	//Zgaś diodę
    		}
    	}
    	
    	return 0;
    	
    	}
  • REKLAMA
  • REKLAMA
  • #3 9643854
    Papillon11
    Poziom 10  
    A to fakt. ADCH jest 8bitowy więc maksymalna wartość w nim przechowywana to 256. Sugerowałem się wzorem z dokumentacji tam była wartość 1024 ale to była wartość dla 10bitowej rozdzielczości, dobrze myślę?
    Ale wytłumacz czemu ADC? Przecież to oznacza sam przetwornik, w datasecie niema przecież takiego rejestru.
  • REKLAMA
  • Pomocny post
    #4 9643977
    skalsky5000
    Poziom 21  
    Jeśli wykorzystujesz 8bit z przetwornika to do wzoru wstaw 255.ADC, ADCW to są specjalne definicje które maja ułatwić obsługę przetwornika.
  • #5 9646010
    Papillon11
    Poziom 10  
    Witam. Winą niedziałającego przetwornika była próba porównania liczby większej niż jest w stanie zmieścić się w 8bitach, z wartością w ADCH. Aż mi wstyd... Temat zamknięty i dzięki za pomoc skalsky5000.
REKLAMA