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

Dlaczego Atmega8 ADC pokazuje błędne napięcia przy pomiarze do 3.5V?

Brodowski 02 Maj 2007 23:08 6683 8
REKLAMA
  • #1 3843137
    Brodowski
    Poziom 11  
    Posty: 71
    Ocena: 2
    Witam mam pewien problem a mianowicie chce zrobić prosty miernik napięcia akumulatorów do 3.5V.Ustawiłem napięcie referencyjne wew w atmedze 8 i na wejście przetwornika wew ADC podaje napięcia od 0-3.5V jednak ciągle mi sie wyświetla napięcie 2.55 lub 0...co jest nie tak?
    
    'Program obsługi wbudowanego w mikrokontroler
    '10-bitowego przetwornika A/C
    
    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
          'LCD                                                                                                      $regfile = "m8def.DAT"
    
    Config Lcdbus = 4
    
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portd.7 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
           'konfiguracja linii
          'mikrokontrolera, do których
          'dołączono wyświetlacz
          'LCD
    Config Adc = Single , Prescaler = Auto , Reference = Internal       'konfiguracja wewnętrznego
          'przetwornika A/C
    
    Dim Wart_ac As Word                                         'zmienna na wartość odczytaną
          'z przetwornika
    Dim V As Single                                             'zmienna przechowująca obliczoną
          'wartość zmierzonego napięcia
    Dim Wart_nap As String * 3                                  'zmienna, do której wpisywana
          'zostaje przetworzona wartość
          'zmiennej V na tekst
    Start Adc                                                   'uruchamia wbudowany przetwornik
    
    Do                                                          'początek pętli programu
     Wart_ac = Getadc(1)                                        'odczytanie wartości z wejścia
          'ADC1 mikrokontrolera
     Cls                                                        'czyszczenie LCD
     Lcd Wart_ac                                                'wyświetlenie w pierwszej linii
          'Lcd odczytanej wartości
          'z przetwornika
     Lowerline                                                  'kursor do drugiej linii LCD
     V = Wart_ac * 0.0025                                       'zamiana odczytanej wartości
          'z A/C na napięcie
          'Wart_ac * ok. 4,8 mV
     Wart_nap = Fusing(v , "#.&&")                              'formatowanie wartości zmiennej
          'V do do formatu x.xx i zamiana
          'tej wartości na postać tekstową
    
     Lcd Wart_nap                                               'wyświetlenie obliczonej
          'wartości Wart_nap w drugiej
          'linii LCD
     Waitms 100                                                 'opóźnienie 100 ms
    Loop                                                        'koniec pętli Do...Loop
    End
  • REKLAMA
  • #2 3843416
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Może dlatego, że wewnętrzne napięcie referencyjne to 2,56V więc to 3,5 jest zdecydowanie poza zakresem...
    Jeżeli nie chcesz dawać zewnętrznego napięcia referencyjnego to ustaw AVCC jako napięcie referencyjne...
    Wtedy zakres masz do napięcia zasilania...
  • #3 4775348
    kaka22
    Poziom 18  
    Posty: 375
    Pomógł: 3
    Ocena: 4
    Witam.
    Co trzeba zmienić w tym programie, aby nie były wyświetlane liczby po przecinku?
    Wgrałem to do symulatora Bascoma i pomiar miga. Idzie w jakiś sposób zlikwidować to miganie?
  • REKLAMA
  • #4 4775843
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Tak uśrednia się pomiar...
    Robisz pomiar np 100 razy i liczysz średnią...
    Dopiero taki wynik wyświetlasz...
    Oczywiście to jak fizycznie na płytce rozwiązana jest część analogowa też ma na to wpływ...
  • #5 4776325
    Konto nie istnieje
    Konto nie istnieje  
  • #6 4776343
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    heh chyba kolega saper słabo orientuje się w arytmetyce i matematyce używanej w kontrolerach.... na pewno dzielenie i mnożenie to nie jest dobry sposób. Uśrednianie albo po prostu rzadsze odświeżanie wystarczy. Nie wiem o co również Ci chodzi przy Vref = Vcc, nie zauważyłem żadnych problemów, a dzięki tej metodzie zwiększa się zakres pomiarów dwukrotnie a błąd spada (mniejsze szumy przy dobrym filtrowaniu)

    Link
  • REKLAMA
  • #7 4776617
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #8 4777368
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    100 czy 1000 pomiarów to nienajlepszy przykład...
    Ja daję zawsze potęgę 2...
    Łatwo i szybko się liczy...
    Np. 64 pomiary a potem -> Vśred = Vsuma >> 6
  • #9 4777418
    kaka22
    Poziom 18  
    Posty: 375
    Pomógł: 3
    Ocena: 4
    Dobrze. Ze wszystkim sobie poradziłem. Rozwiązałem problem trochę nietypowo i trochę ni po elektronicznemu , ale do rzeczy. Mam jeszcze jedno pytanie.
    Gdzie trzeba zmienić program, żeby za wynikiem pomiaru wyświetlała się (w tej samej lini) jednostka?

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczy błędnych odczytów napięcia z przetwornika ADC mikrokontrolera Atmega8 przy pomiarze napięć do 3,5V z ustawionym wewnętrznym napięciem referencyjnym. Wewnętrzne napięcie referencyjne Atmegi8 wynosi około 2,56V, co powoduje, że pomiar napięć powyżej tej wartości jest niestabilny lub błędny. Zaleca się użycie zewnętrznego napięcia referencyjnego lub ustawienie AVCC jako napięcia referencyjnego, co pozwala na pomiar w zakresie do napięcia zasilania mikrokontrolera. W dyskusji poruszono także kwestie uśredniania pomiarów ADC w celu stabilizacji wyniku oraz metody obcinania części ułamkowej wyświetlanego napięcia. Sugerowano wykonywanie wielu pomiarów (np. potęga 2, np. 64 pomiary) i obliczanie średniej przez przesunięcie bitowe, co jest efektywne obliczeniowo. Wskazano również, że stosowanie dzielnika rezystorowego pozwala na dopasowanie zakresu pomiarowego do potrzeb, a zasilanie mikrokontrolera nie jest optymalnym źródłem napięcia referencyjnego ze względu na zmienność napięcia zasilania. Dyskusja zawiera fragmenty kodu w Bascom AVR oraz sugestie dotyczące wyświetlania wyników na LCD.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA