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

ADC ATMEGA 8 - błędne obliczenia napięcia na LCD, jak poprawić?

rafcio363 16 Lut 2008 15:20 5571 16
REKLAMA
  • #1 4811048
    rafcio363
    Poziom 30  
    Posty: 2247
    Pomógł: 94
    Ocena: 266
    
    
                                                                        $regfile = "M8def.dat"       ' use the Mega8
    
    $crystal = 8000000
    
    
    
    Config Portc = Output
    
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    
    Config Lcd = 16 * 2
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'config ADC
    
    Start Adc
    
    
    Dim Volt1 As Single , V1 As Word ,
    Cls
    Cursor Off
    
    
    Do
    
    
    
    
    
    'wskaznik 0-15V
    
    V1 = Getadc(2)
    Volt1 = V1 * 0.0146 
     Locate 1 , 1
     Lcd "U="
      Lcd Fusing(volt1 , "#.##")
     Lcd "v"
    
    
     Locate 2 , 1
      Lcd "TEST LCD :)";
    
    
    
    
    
    
    
    
     Waitms 1000
    
       Toggle Portc.5
    
      Loop
    
    



    
    Volt1 = V1 * 0.0146 
    

    Jak to policzyć,licząć ze wzoru Volt1=Uwej * 1024 /nap odniesienia
    wychodzi 1024/5=204,8
    mnożać x 3 bo taki mam dzielnik napięcia daje 614.

    Licząć (5V nap ref / 1024 )*3 z dzielnika daje 0.0146

    Co oczywiscie jest źle wyliczone bo mi LCD pokazuje wynik 0.07 naprzemiennie z 0.09 zamiast 11.55V;)
  • REKLAMA
  • #2 4811202
    Tomasz.W
    Poziom 35  
    Posty: 2315
    Pomógł: 263
    Ocena: 161
    rafcio363 napisał:
    ....Licząć (5V nap ref / 1024 )*3 z dzielnika daje 0.0146.... zamiast 11.55V;)
    A co tak właściwie chcesz policzyć? Podajesz napięcie 11,55V przez dzielnik "3" . Jak by tego nie policzył to napięcie podane na wejście ADC będzie wynosiło 11,55/3=3,85V. To dlaczego z uporem maniaka do wzoru podstawiasz 5V?
  • #3 4811376
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Witam.

    Po pierwsze 5\1024=0.0048 teraz mierzysz napiecie na ADC w granicach 0-5V. Jeżeli masz dzielnik rezystorowy który dzieli Ci napiecie na 3 to wynik pomiaru musisz pomnożyć x3.

    Powinno to wyglądać tak:
    
    V1 = Getadc(2)
    Volt1 = V1 * 0.0048
    Volt1 = Volt1 * 3
    
     Locate 1 , 1
     Lcd "U="
      Lcd Fusing(volt1 , "#.##")
     Lcd "v" 
    
  • #4 4817262
    rafcio363
    Poziom 30  
    Posty: 2247
    Pomógł: 94
    Ocena: 266
    dawid512 napisał:
    Witam.

    Po pierwsze 5\1024=0.0048 teraz mierzysz napiecie na ADC w granicach 0-5V. Jeżeli masz dzielnik rezystorowy który dzieli Ci napiecie na 3 to wynik pomiaru musisz pomnożyć x3.

    Powinno to wyglądać tak:
    
    V1 = Getadc(2)
    Volt1 = V1 * 0.0048
    Volt1 = Volt1 * 3
    
     Locate 1 , 1
     Lcd "U="
      Lcd Fusing(volt1 , "#.##")
     Lcd "v" 
    


    Próbowałem już tak i dostaje wynik 0,07 V :(
    Czyżby port uwalony?
    Bo na port wchodzi napiecie dobrze podzielone z dzielnika.
  • REKLAMA
  • #5 4817310
    seba_x
    Poziom 31  
    Posty: 2071
    Pomógł: 29
    Ocena: 112
    najłatwiej jest podłączyć wszystko + dodatkowy woltomierz , puszczasz jakieś tam napięcie i eksperymentalnie dobierasz mnożnik tak żeby procek pokazywał to samo co woltomierz , zrobiłem tak kilka razy i nie było problemu , napięcie odniesienia nigdy nie jest równe 5V często jest 5,07V (przy zastosowaniu 7805) , żeby ci wynik nie skakał za bardzo zrób średnią ze np. 100 pomiarów .
  • #6 4820557
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Napewno powinieneś dać kondensatory 100nF jak najblizej procka, jeden do głównego zasilania atmegi a drugi miedzy kanal ADC i mase. Spróbuj takze zmierzyc napiecie za pomocą innego kanału ADC moze "uwaliłeś" jeden kanał przez podanie wiekszego napiecia niz 5V.
  • #7 4824736
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    Atmega8 ma 4 przetworniki 10bit (zakres 0...1023) i 2 8bit (0...255). Być może odwrotnie, ale może podłączyłeś sygnał do przetwornika o mniejszej rozdzilczości.

    Sam mam ten problem, bo projektuję płytkę i niewiem które przetworniki są 8bit. Potrzebuję uzyskać zmienną bitową, a dzielenie stałoprzecinkowe daje niepotrzebny błąd obliczeń.
    Czy ktoś wie, które ADC są 8, a które 10 bit??
  • REKLAMA
  • #8 4824929
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Z tego co wyczytałem z noty katalogowej atmegi8 to ma ona 6 kanałów przetwornika ADC 10-bitowego w wersji obudowy PDIP. W wersji TQFP jest 8 kanałów widocznie te dodatkowe dwa w tej wersji obudowy sa 8 bitowe.
  • #9 4825220
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    To jest jeden przetwornik ADC 10bit z przełączanymi wejściami. W danej chwili można pobierać wartość z jednego wejścia ADC i aby zmienić numer wejścia trzeba przestawić bity w rejestrze ADMUX.
  • #10 4826226
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    jak byk pisze:

    
    – 8-channel ADC in TQFP and MLF package
    Six Channels 10-bit Accuracy
    Two Channels 8-bit Accuracy
    – 6-channel ADC in PDIP package
    Four Channels 10-bit Accuracy
    Two Channels 8-bit Accuracy
    ATmega8L


    Z czego:
    ADC0 10bit
    ADC1 10bit
    ADC2 10bit
    ADC3 10bit
    ADC4 8bit
    ADC5 8bit

    w obudowie TQFP
    ADC6 10bit
    ADC7 10bit

    Jednak było w "tej długiej" nocie katalogowej... na 193str.
  • #11 4826286
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Ja na 193str. mam komparator ;)

    W normalnym PDF'ie jest:

    ADC ATMEGA 8 - błędne obliczenia napięcia na LCD, jak poprawić?

    i nie spotkałem się z tym żeby któreś z wejść (bo niby z jakiego powodu) miałoby być ograniczane do 8 bitów.
  • REKLAMA
  • #12 4831951
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    Jak widać czasem ma 8 bitów, i warto o tym wiedzieć.

    Ja natomiast mam inny problem. Na wejście ADC chcę podać napięcie z dzielnika 1/10, ale tak aby przez ten dzielnik płynął jak najmniejszy prąd (rozładowanie baterii). W nocie katalogowej napisano, że rezystancja źródła musi być mniejsza niż 10kohm. Jak policzyć rezystancję wyjściową dzielnika rezystorowego 1:10?

    Jeszcze jedna rzecz. Jakie jest minimalne napiecie, aby stan wyprowadznia procesor uznał za "logiczną jedynkę" Niewiem na jakie napięcie (4,7V czy 5,1V) ma być zenerka włączona od pinu procesora do masy, aby zabezpieczyć go przed spaleniem zbyt wysokim napięciem, jednocześnie zenerka ma umożliwiać odczytranie stanu wysokiego. Pin służy tylko jako wejście i prąd płynie do niego poprzez rezystor 10-20kohm.

    tomek
  • #13 4837255
    Tomek-85
    Poziom 14  
    Posty: 86
    Pomógł: 7
    Ocena: 1
    Ja mam Atmegę16 która pracuje na napięciu +5V.
    Logiczną jedynkę procek widzi już od napięcia 3.3V
  • #14 4841065
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    dzięki, włożyłem zenerkę 4V7 i zobaczymy czy będie działać.

    Wracając do ADC, na wejście ADC chcę podać napięcie z dzielnika 1/10, ale tak aby przez ten dzielnik płynął jak najmniejszy prąd (rozładowanie baterii). W nocie katalogowej napisano, że rezystancja źródła musi być mniejsza niż 10kΩ. Jak policzyć rezystancję wyjściową dzielnika rezystorowego 1:10?

    Czy to może być 9kΩ:1kΩ czy 90kΩ:10kΩ?
  • #15 4934507
    sułek
    Poziom 14  
    Posty: 102
    Pomógł: 4
    Ocena: 5
    IMO 9kOhm: 1kOhm


    Co do rozdzielczości ADC, to w książce "Programowanie AVR w Bascom'ie" jest potwierdzenie , że 4 kanały = 10bit a dwa pozostałe = 8bit
  • #16 5932050
    Konto nie istnieje
    Konto nie istnieje  
  • #17 5932442
    rafcio363
    Poziom 30  
    Posty: 2247
    Pomógł: 94
    Ocena: 266
    Ze swojej strony dziękuje za pomoc.
    Powiem tak - książka do Bascoma za 40 pare złoty rozwiała większość moich wątpliowości i innym początkującym też radzę z niej skorzystać :)

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemu błędnych odczytów napięcia z przetwornika ADC mikrokontrolera Atmega8 wyświetlanych na LCD. Użytkownik stosuje dzielnik napięcia o współczynniku 3, jednak wynik na LCD jest znacznie niższy niż oczekiwany (około 0,07 V). Wskazano, że do obliczenia rzeczywistego napięcia należy pomnożyć wartość ADC przez napięcie odniesienia podzielone przez 1024 (0,0048 V dla 5 V) oraz przez współczynnik dzielnika (x3). Zalecane jest także kalibrowanie mnożnika eksperymentalnie, porównując odczyty z woltomierzem, oraz uśrednianie wielu pomiarów dla stabilizacji wyniku. Poruszono kwestię możliwego uszkodzenia kanału ADC oraz konieczności stosowania kondensatorów filtrujących (100 nF) blisko mikrokontrolera. Wyjaśniono, że Atmega8 posiada 6 kanałów ADC 10-bitowych i 2 kanały 8-bitowe w wersji TQFP, natomiast w PDIP 4 kanały 10-bitowe i 2 kanały 8-bitowe. Poruszono także zagadnienia dotyczące rezystancji źródła sygnału ADC, zalecanej poniżej 10 kΩ, oraz ochrony wejścia ADC za pomocą diody Zenera 4,7 V. Wskazano, że logiczna jedynka jest rozpoznawana od około 3,3 V. Na koniec zasugerowano użycie bufora napięciowego (wtórnika) na tranzystorze lub wzmacniaczu operacyjnym dla zmniejszenia rezystancji wyjściowej dzielnika i poprawy dokładności pomiaru.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA