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

pomiar napiecia na dwóch kanałach adc atmega8

tomasz36a 12 Wrz 2010 20:11 5273 19
  • #1 8503916
    tomasz36a
    Poziom 11  
    witam na elektrodzie znalazłem wiele informacji na temat przetwornika adc
    w atmega 8 jednak nie mogę poradzić sobie z jednym zjawiskiem mianowicie po odczytywaniu napięcia podawanego z potencjometru na wejście adc0 i adc2
    i wyświetlaniu na lcd obserwuje takie zjawisko jak :
    napięcie z adc0 zmienia sie od 0 do 1024 zrozumiałe tylu bitowy przetwornik aby mierzyć napięcie wystarczy pomnożyć przez odpowiedni współczynnik.
    jednak jednocześnie zmienia sie napięcie odczytywane z adc2 w sposób następujący:
    adc0 = 0       adc2 = 330
    adc0 = 330    adc2 = 490
    adc0 = 750    adc2 = 680
    adc0 = 970    adc2 = 830
    adc0 = 1023  adc2 = 1022

    gdy kręcę potencjometrem podłączonym do adc2 napięcie na graniczne wartości
    to na adc2 zmienia sie wynik w zakresie 40

    podsumowując potencjometr od adc0 zmienia oba wskazania a potencjometr od adc2 zmienia wskazanie tego przetwornika(adc2) o 30
    nie mam pojęcia dlaczego tak sie dzieje próbowałem na programie w bascom
    własny program i kilka z elektrody zamieszczam oba poniżej. proszę o wyjaśnienie dlaczego sie tak dzieje wg mnie atmega 8 w dip ma 5 niezależnych kanałów przetwornika adc multipleksowanych.
    wiec powinien odczytywać ich wartości kolejno a ja powinienem mógł je odczytywać np na lcd.
    jeżeli chodzi o schemat jest bardzo prosty lcd 2*16 podłączyłem do portu b
    a napięcie podaje za pomocą potencjometru na adc0 i adc2 vref jest podpięte do vcc nie (zależy mi na dokładności, powtarzalności i stabilności pomiaru) muszę korzystać jednak z 2...4 kanałów adc i niestety nie działa mi tak jak należy
    uwaga lcd konfiguruje przy kompilowaniu do hex nie w programie

    program nr 1

    Config Portd = &B0000111
           Portd = &B0000000
          Config Portc = &B0000111
          Portc = &B0000000
      Dim Adc0 As Integer
       Dim V1 As Integer
       Dim Adc2 As Integer
        Dim V2 As Integer
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    Do
        Adc0 = Getadc(0)
        V1 = Adc0
       Adc2 = Getadc(2)
       V2 = Adc2
       Cls
       Lcd "kanal1=" ; V1
       Lowerline
       Lcd "kanal2=" ; V2
    Loop
    


    program 2
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Config Watchdog = 2048 'reset wystąpi po 8192 ms
    'Start Watchdog
    Declare Sub Odcz_temp
    Config Pind.3 = Input    'porty jako wejściowe
    Config Pind.4 = Input    'porty jako wejściowe
    Config Pind.5 = Input    'porty jako wejściowe
    Set Portd.3              ' ustawia na stan wysoki
    Set Portd.4              ' ustawia na stan wysoki
    Set Portd.5              ' ustawia na stan wysoki
    Dim Wart_nap As Word
    Dim Wart_nap1 As Word
    Dim Wart_nap2 As String *
    Dim Wart_nap22 As Word
    Dim Wart_ac As Word
    Dim Wart_ac1 As Word
    Dim Wart_ac2 As Word
    Dim Wart_ac3 As Word
    Dim V As Single
    Dim V1 As Single
    Dim V2 As Single
    Dim V3 As Single
    Dim Adres As Byte , Command As Byte
    Enable Interrupts
    ' Set Portd.3 = Input
    Start Adc
    Do
    'czytam pierwszy czujnik
    'waitms 20
    Wart_ac = Getadc(0)
    V = Wart_ac
    'czytam drugi czujnik
    'Waitms 20
    Wart_ac1 = Getadc(1)
    V1 = Wart_ac1
    Reset Watchdog
    'czytam 3 czujnik
    'Waitms 20
    Wart_ac2 = Getadc(2)
    V2 = Wart_ac2
    Reset Watchdog
    'czytam 4 czujnik
    Wart_ac3 = Getadc(3)
    V3 = Wart_ac3
    Cls
    Lcd "in1:" ; V
    Lowerline



    proszę o pomoc
    Tomek

    Kod proszę umieścić w znacznikach code!
    Robak
  • #2 8503987
    tmf
    VIP Zasłużony dla elektroda
    A te potencjometry to mają jaką wartość? Zauważ, że na wejściu ADC w AVR jest kondensator, który trzyma napięcie w czasie samplowania. On musi się naładować, a po przełączeniu kanału naładować/rozładować. W zależności od częstotliwości sygnału impedancja wyjścia samplowanego układu nie powinna przekraczać 3-4kOm. No i przełączając kanały ADC musisz dać mu trochę czasu. Najlepiej po prostu pierwszy pomiar odrzucić.
  • #3 8504312
    tomasz36a
    Poziom 11  
    potencjometry 10kom
    jakie kondensatory gdzie i jak wpięte?
    masz może jakieś ciekawe materiały na ten temat czy moze schemat poglądowy wpięcia tych kondensatorów?
    Co znaczy pierwszy pomiar odrzucić?
    Dopiero zaczynam zabawę z atmega i w ogóle mikro kontrolerami
  • #4 8504354
    gaskoin
    Poziom 38  
    Zerknij do noty na stronę 202, Ty nie masz nic wpinać :D

    Odrzucić pierwszy pomiar, tzn nie brać go w ogóle pod uwagę.
  • #5 8504445
    tomasz36a
    Poziom 11  
    byłem już wielokrotnie na tej stronie a wynik mam pokazywany w pętli co 1 sekundę wiec odrzucanie pomiaru nie ma sensu bo sam sie zmienia co chwile
    problemem moim jest to ze albo nie umiem sie dostosować albo nie rozumiem informacji zawartej w nocie co prawda moj ang jest słaby a polskiej wersji nie mam.
    i dlatego zwróciłem sie z problemem wiec jak to możliwe proszę o prosta odpowiedz krok po kroku co źle zrobiłem i dlaczego
  • #6 8504475
    gaskoin
    Poziom 38  
    Jeżeli to błąd w programie to ja Ci nie pomogę.

    Nie, żebym nie chciał, ale nie znam bascoma:)
  • #7 8504478
    Konto nie istnieje
    Poziom 1  
  • #8 8504500
    tomasz36a
    Poziom 11  
    tak identyczny a połączenie elektryczne jest w porządku wyjścia z potencjometrów bezpośrednio na wejścia adc
  • #9 8507436
    piotr5000
    Poziom 21  
    Config Portc = &B0000111 ' ADC0 , ADC1, ADC2 - jako wyjście . dlaczego nie wejście

    zmień na :
    Config Portc = &B0000000 ' cały port jako wejście
  • #10 8509105
    tomasz36a
    Poziom 11  
    zmieniłem ale nic to nie dało niestety ten sam problem cały czas

    Proszę o poprawienie pisowni, w swoich postach - regulamin p.15
    [zumek]
  • #11 8510644
    piotr5000
    Poziom 21  
    Odczytywałem kiedyś 3 potencjometry na ATmega8535
    Podłączone było zewnętrzne Uref = Uzas = 4,98V

    konfiguracja

    Config Adc = Single , Prescaler = 16
    

    port w procku jako wej "pływające" czyli u Ciebie byłoby:

    Config Portc = &B0000000 
     Portc = &B0000000
    
    
    Odczyt u mnie



       Pot_1 = Getadc(7)
       Pot_2 = Getadc(6)
       Pot_3 = Getadc(5)
    

    zmienne Pot_x jako Word ( zawsze są dodatnie )

    i wywal na próbę watchdog'a
  • #12 8510880
    tomasz36a
    Poziom 11  
    Po zamianie adc0 i 2 na adc 5 i4 wszystko działa jak należy. Nie wiem dlaczego. Informacje na ten temat są mile widziane lub wasze zdanie.
  • #13 8724103
    krzysztofo
    Poziom 11  
    Tak na marginesie nie konfiguruje się pinów tylko porty.
    Więc zamiast:

    
    Config Pind.3 = Input 'porty jako wejściowe 
    Config Pind.4 = Input 'porty jako wejściowe 
    Config Pind.5 = Input 'porty jako wejściowe
    


    ma być

    
    Config Portd.3 = Input 'porty jako wejściowe 
    Config Portd.4 = Input 'porty jako wejściowe 
    Config Portd.5 = Input 'porty jako wejściowe
    
  • #14 8724776
    Konto nie istnieje
    Poziom 1  
  • #15 8726287
    xury
    Specjalista automatyka domowa
    krzysztofo napisał:
    Tak na marginesie nie konfiguruje się pinów tylko porty.
    Więc zamiast:

    
    Config Pind.3 = Input 'porty jako wejściowe 
    Config Pind.4 = Input 'porty jako wejściowe 
    Config Pind.5 = Input 'porty jako wejściowe
    


    ma być

    
    Config Portd.3 = Input 'porty jako wejściowe 
    Config Portd.4 = Input 'porty jako wejściowe 
    Config Portd.5 = Input 'porty jako wejściowe
    


    I tu się kolego grubo mylisz. Zajrzyj jeszcze raz do helpa i sprawdź.
  • #16 8730305
    asembler
    Poziom 32  
    Tak na marginesie spotkalem sie z takim zjawiskiem "przesłuchow" miedzy poszczególnymi wejsciami ADC szczególnie przy niskich napieciach (<2.7V)zasialania atmegi. Podejrzewam ze powodem jest to zbyt wolne przełączanie multipleksera wewnetrznego. Moment przełaczenia w/g noty nastepuje dopiero po wystartowaniu konwersji. Jedyną radą było to, że po przełaczeniu na kolejny kanał uruchamiamy konwersje odczekujemy ok 30uS po czy kolejny raz uruchamiamy konwersje.
  • #17 8730751
    Konto nie istnieje
    Poziom 1  
  • #18 8731081
    asembler
    Poziom 32  
    Dobrze prawisz konwersja zaczyna sie po przełaczeniu ale jezeli wczesniej nie właczysz przetwornika ADC to jezeli od wpisania do rejstru MUX do startu konwersji nie odczekamy odpowiedniego czasu to przełaczenie rzeczywiste nastepuje w trakcie konwerji.
  • #19 8732834
    Konto nie istnieje
    Poziom 1  
  • #20 8732878
    asembler
    Poziom 32  
    No to napisz sobie program na pomiar z dwoch zrodel i sam sie przekonaj,
    Oczywiscie jak dasz długi czas konwersji to bład bedzie minimalny, ale np u mnie przy min czasie konwersji mierzone napiecie 2.6v pokazywalo 1.4 po dodaniu opoznienia ok 30uS zaczelo wskazywac 2.6V. No cóż tez jestem tym zaskoczony bo kazde opoznienie dla mnie to wzrost poboru mocy urzadzenia o kilka uA.
    Tak dzieje sie tylko przy zmianie kanału.
    Moze potwierdzeniem bedzie tez fakt ze w nocie czas osiagniecia gotowosci napiecia BANDGAP 1.22v tp ok 30uS.
REKLAMA