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?
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;
}