Skocz do zawartości

[C] Atmega8 błąd odczytu ADC (zawsze wartość maksymalna)


szpic

Pomocna odpowiedź

Witam Mam problem z odczytem wartosci z ADC0

Mianowicie caly czas odczytywana jest wartosc maksymalna tj 1023 mimo ze powinno byc 0

Kod z moimi komentarzami:

void InitADC()
{
ADMUX=(3<<REFS0);                         // For Aref=2,56 internal;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(0<<ADPS1)|(0<<ADPS0); //Rrescalar div factor =16 bo mam ustawione 1mhz
}
uint16_t ReadADC(uint8_t ch)
{
  //Select ADC Channel ch must be 0-7
  ch=ch&0b00000000; // Aby czytac z ADC 0
  ADMUX|=ch;

  //Start Single conversion
  ADCSRA|=(1<<ADSC);

  //Wait for conversion to complete
  while(!(ADCSRA & (1<<ADIF)));

  //Clear ADIF by writing one to it
  //Note you may be wondering why we have write one to clear it
  //This is standard way of clearing bits in io as said in datasheets.
  //The code writes '1' but it result in setting bit to '0' !!!

  ADCSRA|=(1<<ADIF);

  return(ADC);

Nastepnie :

uint16_t adc_result;
InitADC();
adc_result=ReadADC(0);  // Pobieram wartosc z ADC




InitLCD();
ClearLCD();
char* bufor="Hello ";
char* bufor2=" XXX";
itoa(adc_result,bufor2,10);  // zamiana Na asci
//bufor = adc_result;
Println(bufor, 6);
Println(bufor2,4);  // wypisywanie

Widzi ktos jakies błędy przez które moj ADC zawsze podaje wartosc Max?

Link do komentarza
Share on other sites

Port C nie jest konfigorowany przeze mnie bo powiedziano mi ze nie jest to potrzebne.

Czyli jednak w kodzie mam zamiescic takie cos :

DDRA=0x00

PORTA=0x00 ?

z podlączone mam takie cos jak na obrazku ktory zamieszczam w poscie

Link do komentarza
Share on other sites

Upewnij się, że wzmacniacz operacyjny który zastosowałeś nadaje się do takiego układu pracy przy pojedynczym zasilaniu.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Upewnij się, że wzmacniacz operacyjny który zastosowałeś nadaje się do takiego układu pracy przy pojedynczym zasilaniu.

wzmacniacz operacyjny jest OK.

Sam producent w datasheet wymienia go jako polecany ukllad.

Link do komentarza
Share on other sites

Sam producent w datasheet wymienia go jako polecany ukllad.

Rozumiem, że zgodnie z datasheet wzmacniacza operacyjnego AD708 zasilasz go napięciem symetrycznym? Tzn. na nóżce 8 napięcie +3...18V a na nóżce 4 napięcie -3...18V względem potencjału masy?

Link do komentarza
Share on other sites

Sam producent w datasheet wymienia go jako polecany ukllad.

Rozumiem, że zgodnie z datasheet wzmacniacza operacyjnego AD708 zasilasz go napięciem symetrycznym? Tzn. na nóżce 8 napięcie +3...18V a na nóżce 4 napięcie -3...18V względem potencjału masy?

to jest OP07

na 7 dostaje 5 V

na 4 0V

Link do komentarza
Share on other sites

I w tym problem, układ ten wymaga symetrycznego napięcia zasilania! Rozwiązań jest kilka, najprostsze to dorobić zasilanie -5V 🙂 Mógłbyś spróbować wstawić inny układ pracujący na pojedynczym napięciu zasilania (np. LM358) i dać potencjał odniesienia w postaci dzielnika, do którego podpiąłbyś wejście nieodwracające i jedno z wyprowadzeń czujnika.

Link do komentarza
Share on other sites

OK ale to teraz jak mam odwrocic na -5?

pozatym czy potem moj wzmacniacz bedzie dawal napiecia z zakresu -5 do +5?

a na atmege moge dac tylko 0-5?

Link do komentarza
Share on other sites

Chyba bezpieczniej będzie, jak zastosujesz to drugie rozwiązanie... Jak będę w domu to narysuję na szybko schemacik

Link do komentarza
Share on other sites

Chyba bezpieczniej będzie, jak zastosujesz to drugie rozwiązanie... Jak będę w domu to narysuję na szybko schemacik

Dzieki wielkie 🙂

ja na szybko zaprojektowalem takie cos :

+ oczywiscie rezystor sprzegajacy miedzy Wejsciem - a wyjsciem

I chyba takie cos odpowiada podlaczeniu tego z op07

ok wpiąłem na sztywno bateria 1.5V

i otrzymalem wynik 620 co jest wsumie dobrym wynikiem jesli 2.56 jest napieciem odniesienia 🙂

ale nadal pozostaje pytanie

dlaczego dostaje wyniki z zakresu 980-1023 gdy wejscie wisi w powietrzu? nie powinno byc 0?

OK My OP07 zgodnie z schematem ktory widzicie wyzej ciagle daje na wyscie 4.8 V

czyzby to byl wynik tego ze jest zle zasilany przez to zle dziala?

Link do komentarza
Share on other sites

Armir, wisząca nóżka to stan nieustalony 😉 W zależności od tego, czy mamy pullupa/pulldowna mamy stan 1/0, a jak nie ma nic, to nie wiadomo co jest - jest syf.

Link do komentarza
Share on other sites

Z tymi stanami przy nóżce w powietrzu to jest różnie, bo to zależy od tego jakiego typy jest to układ w CMOS na wiszącej nóżce jest masa, a w TTL jest stan wysoki, ale nie zawsze. Nie można ufać takim wiszącym nóżkom, bo one zachowują się jak anteny i stan czasem się sam zmieni.

Link do komentarza
Share on other sites

Z tymi stanami przy nóżce w powietrzu to jest różnie, bo to zależy od tego jakiego typy jest to układ w CMOS na wiszącej nóżce jest masa, a w TTL jest stan wysoki, ale nie zawsze. Nie można ufać takim wiszącym nóżką, bo one zachowują się jak anteny i stan czasem się sam zmieni.

w moim przypadku wartosc latala od 100 do 1000 przy wiszacym.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.