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

[ATTINY26][BASCOM] Przetwornik analogowo cyfrowy

Sabre 26 Cze 2008 14:49 3103 18
  • #1 5287359
    Sabre
    Poziom 18  
    Mam pytanie odnośnie ustawienia rejestru ADMUX w attiny26, używam kilku wejść przetwornika (z dostępnych 11 używam 5), ale chcę aby pomiar był wykonywany względem masy układu na każdym z 5 wejść, bez wzmocnienia. Nie chcę aby pomiar odbywał się na jednym wejściu względem innego.

    Odczytywanie wartości napięcia na poszczególnych wyprowadzeniach dokonywany jest w pętli. Czy muszę za każdym razem ustawiać wartość rejestru ADMUX dla każdego z wyprowadzeń aby pomiar odbywał się względem masy zgodnie z tabelką poniżej?

    [ATTINY26][BASCOM] Przetwornik analogowo cyfrowy

    Czy mogę wpisać do rejestru ADMUX inną wartość, która załatwi mi od razu pomiar na wszystkich kanałach względem masy? Jeśli jest taka wartość to jak ją wpisać w Bascomie pomijając 3 najstarsze bity tego rejestru?
  • #2 5288026
    ZbeeGin
    Poziom 39  
    Przetwornik nie zmierzy kliku kanałów na raz. Nie ma takiej opcji.

    Proszę dokładnie czytać noty katalogowe. Ze zrozumieniem.
  • #3 5288062
    Sabre
    Poziom 18  
    ZbeeGin napisał:
    Przetwornik nie zmierzy kliku kanałów na raz. Nie ma takiej opcji.

    Proszę dokładnie czytać noty katalogowe. Ze zrozumieniem.


    Przepraszam bardzo, ale czytanie ze zrozumieniem nie boli, przecież napisałem, że pomiar z poszczególnych wyprowadzeń odbywa się w pętli.
  • #4 5288080
    ZbeeGin
    Poziom 39  
    Sabre napisał:
    Przepraszam bardzo, ale czytanie ze zrozumieniem nie boli, przecież napisałem, że pomiar z poszczególnych wyprowadzeń odbywa się w pętli.

    A jakże.
    Sabre napisał:
    Czy mogę wpisać do rejestru ADMUX inną wartość, która załatwi mi od razu pomiar na wszystkich kanałach względem masy?

    I na to masz właśnie odpowiedź.
  • #5 5288110
    Sabre
    Poziom 18  
    Nie mam siły ani ochoty aby łapać się z kimkolwiek za słówka.
    Pytanie brzmi, czy muszę za każdym razem wchodząc w pętlę, odczytującą wartość z poszczególnych wyprowadzeń, wpisywać przed odczytem kolejne wartości do rejestru ADMUX?
    Czyli przy odczycie ADC3 najpierw wpisuję do ADMUX 00011
    przy odczycie ADC4, ADMUX=00100
    ADC5, ADMUX=00101
    ....itd?

    Jest jeszcze ADMUX =11111:

    [ATTINY26][BASCOM] Przetwornik analogowo cyfrowy

    ale nie wiem co to oznacza.
  • #6 5288131
    ZbeeGin
    Poziom 39  
    Jeśli piszesz w BASCOM to wystarczy polecenie GETADC z parametrem liczbowym określającym numer kanału.
  • #7 5288152
    Sabre
    Poziom 18  
    ZbeeGin napisał:
    Jeśli piszesz w BASCOM to wystarczy polecenie GETADC z parametrem liczbowym określającym numer kanału.


    Gdzie jest napisane, że polecenie Getadc(x), gdzie x jest numerem kanału zmierzy mi wartość na tym kanale, ale względem masy a nie względem kanału "sąsiedniego", np adc4 będzie mierzył nie względem masy tylko względem adc3.

    Aha żeby było jasne, mierzę wartość napięcia na 5 kanałach, mam tam założone rezystory 1% (wszystkie mają identyczną wartość, są sprawne), a mimo to wartość ADC jest inna na co drugim kanale np na jednym jest 300 na drugim 50 (10-cio bitowy przetwornik), stąd moje obiekcje co do polecenia Getadc(x), że nie mierzy na wszystkich kanałach względem masy.

    A tak mam skonfigurowany przetwornik:
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
  • #8 5288165
    ZbeeGin
    Poziom 39  
    Napisane jest to w helpie - angielskim oraz polskim mojego autorstwa. Ponadto jest to napisane w nocie katalogowej. Skoliduj to razem a otrzymasz odpowiedź.
  • #9 5288208
    Sabre
    Poziom 18  
    ZbeeGin napisał:
    Napisane jest to w helpie - angielskim oraz polskim mojego autorstwa. Ponadto jest to napisane w nocie katalogowej. Skoliduj to razem a otrzymasz odpowiedź.


    Tak się składa, że mam przed oczami Twój polski help do Bascoma AVR i chyba mi na oczy padło, bo nigdzie nie widzę ani słowa, przy opisie polecenia Getadc(), na temat tego względem czego dokonywany jest pomiar.
  • #10 5288237
    ZbeeGin
    Poziom 39  
    Cytat:
    Przetwornik A/D posiada 8 lub więcej – w nowszych konstrukcjach – końcówek wejściowych które są wybierane za pomocą multipleksera (elektronicznego przełącznika). Numer wybranego wejścia przekazywany jest za pomocą parametru nr_kanału.

    Jakim rejestrem i jakimi bitami wybiera się wejście przetwornika w układzie ATTiny26? Co pokazuje cała tabelka Table 46 której to fragment załączyłeś? Co to jest Single Ended Input? Co pisze w ostatnim zdaniu na stronie 96 aktualnej noty katalogowej w pierwszym akapicie? Czy mam udowadniać dalej?
  • #11 5288256
    Balu
    Poziom 38  
    ZbeeGin spokojnie;)

    Kolego nie próbuj udowadniać komukolwiek, że masz racjęjak jej nie masz, sama nazwa wskazuje (ADMUX) że jest to selektor (multiplexer) wejść do przetwornika....

    Nie masz zbyt dużej wiedzy z tego co piszesz, jak to działa, a próbujesz użytkownikowi który tutaj z bascomem ma chyba najwięcej wspólnego (no jeszcze Zumek:) ), że on nie ma racji,a Ty ją masz...
  • #12 5289198
    dawid512
    Poziom 32  
    Na początek trochę pokory kolego Sabre. Przetwornik A/D mierzy napięcie pomiędzy kanałem ADC a masą! Zapamiętaj to. Nie mierzy także "na raz" ze wszystkich bo istnieje takie coś jak selektor wejść.
  • #14 5289487
    Sabre
    Poziom 18  
    Panowie jak do tej pory to ja widzę tylko próbę zrównania mnie z ziemią, a brak rzeczowego tłumaczenia :). Forum jest od zadawania pytań i udzielania na nie odpowiedzi przez tych, którzy je znają.
    W takim razie gdybym chciał zmierzyć napięcie różnicowe pomiędzy ADC4 a ADC3 w Bascomie, to jak wyglądałby kod?

    Getadc(19)?

    Skoro ADMUX jest wskaźnikiem dla multipleksera z tej tabelki to właśnie przy ADMUX = 10011 dokonałbym pomiaru różnicowego (bez wzmocnienia) pomiędzy ADC4 a ADC3. Czy to jest dobry tok rozumowania?
  • #15 5289616
    Fyszo
    Poziom 37  
    Dobry tok, to zmierzenie najpierw jednego napięcia wzg. masy, potem drugiego, a na koniec ich różnica. Pod warunkiem że masa dla nich 'coś' znaczy (że nie są odseparowane od masy).
  • #16 5289749
    dawid512
    Poziom 32  
    Możesz także skorzystać z komparatora analogowego.
  • #17 5291552
    ZbeeGin
    Poziom 39  
    Sabre napisał:
    Panowie jak do tej pory to ja widzę tylko próbę zrównania mnie z ziemią, a brak rzeczowego tłumaczenia :). Forum jest od zadawania pytań i udzielania na nie odpowiedzi przez tych, którzy je znają.

    Pyt: Czy mogę wpisać do rejestru ADMUX inną wartość, która załatwi mi od razu pomiar na wszystkich kanałach względem masy?
    Odp: Przetwornik nie zmierzy kliku kanałów na raz. Nie ma takiej opcji.
    Bez komentarza.

    Sabre napisał:
    W takim razie gdybym chciał zmierzyć napięcie różnicowe pomiędzy ADC4 a ADC3 w Bascomie, to jak wyglądałby kod?

    Getadc(19)?

    Skoro ADMUX jest wskaźnikiem dla multipleksera z tej tabelki to właśnie przy ADMUX = 10011 dokonałbym pomiaru różnicowego (bez wzmocnienia) pomiędzy ADC4 a ADC3.

    Co za problem to sprawdzić:
    $regfile = "attiny26.dat"
    $crystal = 1000000
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Dim Result As Word
    Do
      Result = Getadc(19)
    Loop
    End

    Do rejestru ADMUX trafia wartość 19 (0b00010011), zgodnie z oczekiwaniem - to nawet można sprawdzić w symulatorze. A co to oznacza zgodnie z tabelą 46?
    A to że w symulatorze to nie zadziała tylko w realnym układzie to inna para kaloszy...
  • #18 5427862
    grabek_radek
    Poziom 21  
    moze sie wtrace ;)
    bo pewniej rzeczy nie rozumiem a mianowicie jesli program wyglata tak
    ...
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Start Adc
    Dim Wartosc_ac As Word
    Dim V As Single
    Dim Wartosc_nap As String * 4

    ...
     Wartosc_ac = Getadc(1)
       V = Wartosc_ac * 0.0049
       Wartosc_nap = Fusing(V, "#.&&&"

    i napiecie mierzone podaje na portc.1 (ADC1) to jesli podam na ADC2 to pewnie tez zmierzy
    tylko moj problem polega na tym aby inne piny nie sluzyly jako A/C bo chce w miejsce ADC3 i ADC2 tj portc.3 i portc.1 podlaczyc swithe ktore beda sluzyly aby podawac 1 albo 0 logiczne potrzebne w dalszej czesci programu do .....
  • #19 5429818
    ZbeeGin
    Poziom 39  
    Zmierzy tylko na ADC1 i nigdzie poza tym. Nie wybrany pin przetwornika ADC jest niczym innym jak zwykłym pinem we/wy. Podczas pomiaru jednak lepiej nie zmieniaj ich stanu z poziomu programu - a zwłasza PC1.
REKLAMA