Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

M8 - Jak zrobic 8 bit próbkowanie ?

Wr841nd 06 Paź 2012 05:48 2268 15
  • #1 06 Paź 2012 05:48
    Wr841nd
    Poziom 12  

    Houston mamy problem..
    Czyli płynące napiecie Vref ( wewnętrze 2.54 ) I nie jest to mało bo prawie kilkanaście mV.
    Nie byłby to problem gdy mierzymy stałe napięcie... ale ja mam OFFset i ustawione sztuczne "zero"
    Najlepiej by było gdyby podać V ref 10V/1024 ( co jest niemożliwe bo odparuje Atmege )
    I po włączeniu mam 0.020V które opada wraz z nagrzewaniem się UC aż do ustawionego zera ..

    Program jest pisany w B i jest to zwykła aplikacja miernika...

    Ma ktoś pomysł jak zmusić program by nie brał pod uwagę setnych V ?
    Ps Ukrywanie w funkcji Fusing nic mi nie da ( z tego napiecia jest mnożony inny wynik ) bo i tak mierzy go dalej...

    0 15
  • #3 07 Paź 2012 10:39
    Wr841nd
    Poziom 12  

    Narazie wstawiłem inne źrodło ref ( 431C ) stabilnosc pomiarów się zwiększyła ( juz tak nie płynie na zmianach temp..
    Dzięki za strone ... szukałem na różne frazy i nic sensownego nie mogłem znaleźć..
    Ten MCP to też świetny IC...

    Edit : Kurcze ustawiłem tak ADC=single prescaler = 128 ( czyli powinno mi to dac co 20mV rodzielczość ... ( zrodło 2.56/128 =0.020V ) na wyjsciu z OP-a mam zmiane napiecia 3mV( przy zmiane temperatury o 10C ) i skubany dalej to liczy... i zmienia mi sie wynik od 0.015 do 0.011... hmm gdzie robię bład ?

    Pomiar napiecia "żywego" stoi jak byk...wiec to nie referencyjne..

    Edit 2 :
    Kurcze czytam że zmiana rodzielczosci ADC to tez podział głownego zegara
    np 16mhz/128 = 125Khz ( rozdział dla 10bit 50-200Khz ) czyli jak mam to rozumieć ? Mam wstawić 4 Mhz by mieć podział dla 8 bitów ?

    Edit : nie tedy droga.... powoli wymiękam jak zmisić ADC do pracy z 8 bit rozdzielczoscia....

    0
  • #4 08 Paź 2012 04:34
    dondu
    Moderator Mikrokontrolery Projektowanie

    Wr841nd napisał:
    Edit : nie tedy droga.... powoli wymiękam jak zmisić ADC do pracy z 8 bit rozdzielczoscia....

    Nie bardzo rozumie Twój problem. Po prostu wystarczy korzystać z górnych 8 bitów.
    Nie pokazujesz programu więc trudno nam się odnieść.

    0
  • #5 08 Paź 2012 18:41
    Wr841nd
    Poziom 12  

    EDIT : Poradziłęm sobie ...
    W konf ADC : Resolution = 8 bit
    I w średniej z pomiarów nie single a WORD :D

    Google przeryte i nic nie znalazłem na ten temat... po porstu inaczej definice zmiennej trza dać...

    0
  • #6 08 Paź 2012 20:10
    dondu
    Moderator Mikrokontrolery Projektowanie

    Niestety w BASCOM nie pomogę.

    0
  • #7 08 Paź 2012 21:11
    gaskoin
    Poziom 38  

    Wr841nd napisał:
    EDIT : Poradziłęm sobie ...
    W konf ADC : Resolution = 8 bit
    I w średniej z pomiarów nie single a WORD


    Ale sprecyzuj o co Ci chodzi, bo chyba nikt nie rozumie Twojego problemu.

    Ustawiasz wyrównanie do lewej (domyślnie jest chyba do prawej) czytasz starszy rejestr i masz 8 bitów, nie wiem o co Ci jeszcze chodzi.

    0
  • #8 14 Paź 2012 11:56
    Wr841nd
    Poziom 12  

    Ok jednak sa problemy : As byte liczy na odwrót ( pojawiają sie ujemne napiecia )
    As WORD zamiast Single : Liczy tylko do 2V z kawałkiem pozniej spada...

    Wiadomo domyślnie ADC w M8 =10 bit czyli przy V ref masz 1 LSB =2.45mV ( około dla 2.45V V ref ) wiadomo zwiększe V ref na 5V =5mV rozdzielczość .
    Ja potrzebuje 20-30mV w przyblizeniu ale dla v ref 2.45V

    TMF podał mi linka ... wszytko fajnie tylko są pewnie niejasności( ostatnie wiersze linku)
    Szukam szukam szukam... probowałem wpisać w kofigu ADC w Bascomie resolution = 8 / 7 BIT etc nic zero reakcji... ( widziełm posta ale z X mega nie wiem czy to zapali z M8 ale po próbach widze że nie ) również help bas nie pomaga mi tu wiele..

    Jak zmusić ADC w m8 do pracy z 8 /7 bit ? Jaka komenda ? Bo ja juz przetrenowałem wszystko.. i dalej 10 bit

    0
  • #9 14 Paź 2012 12:08
    tmf
    Moderator Mikrokontrolery Projektowanie

    W nocie katalogowej procka masz napisane jak zmienić rozdzielczość. Co zresztą nie jest specjalnie potrzebne, bo to od programisty zależy sposób interpretacji danych. Jeśli je wyrównasz do lewej i będziesz odczytywał tylko ADCH to będziesz miał 8 bitów niezależnie od trybu pracy ADC. Z kolei jeśli rozdzielczość masz lepszą niż porządana (2,54mV vs. 20-30 wymagane) to nic tylko się cieszyć. W czym ci to przeszkadza?

    0
  • #10 14 Paź 2012 14:06
    Wr841nd
    Poziom 12  

    Wyrównasz do lewej -- mów mi jeszcze jak ja zaczynam przygode z programowaniem :D

    Ok dlaczego chcę zmniejszyć rozdzielczość ? Mam Offset i "sztuczne" zero //niestety wzmacniacz op troche płynie 3-4mV( zwłaszcza przy zmianach temperatury ) no i oczywiscie wynik mi zamiast stac na zero pływa i chcę "ukryć" to lekkie płynięcie za pomocą 8 bitowego pomiaru. wiem ze zmniejszy mi się rozdzielczosc i bedzie wiekszy bład pomiarowy ale cóż....

    0
  • #11 14 Paź 2012 14:34
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zacznij od czytania noty katalogowej procesora, bez tego dyskusja jest bezcelowa. Rozdzielczość zawsze możesz zmniejszyć programowo, np. zakładając, że x zawiera 10-bitowy wynik pomiaru, operacja x=x & 0xfffc; obetnie 2 najmłodsze bity (będą one miały wartość 0), co ma skutek taki sam jak zmniejszenie rozdzielczości pomiaru. Alternatywnie możesz stosować inne techniki, np. uśredniania wielu pomiarów ADC w celu zwiększenia stabilności.

    0
  • #12 14 Paź 2012 15:44
    Wr841nd
    Poziom 12  

    Próbowałem tej akcji :
    GETADC(1)
    Volty1= GETADC(1) / 4 ( znalazłem taki opis gdzies ) no ok czyli mamy 1023/4=255 LSB
    Tyle że jak sobie wszystko ustawie ( mnożnik ) To jest jeszcze gorzej...
    Wynik przy 1024 : Płynie 0.060 wynik przy 256 : Płynie 0.120 i więcej...
    Akurat próbkowanie w tym przypadku nie ma nic wspólnego..

    Właśnie to jest dla mnie niepewne czy ADC 1023 jest liczone dla 5V na wejsciu ADC czy 2.5 ?( zależne od Vref ? )

    0
  • #13 14 Paź 2012 16:26
    tmf
    Moderator Mikrokontrolery Projektowanie

    Napięcie referencyjne nie ma nic do tego - zapewne GETADC zwraca wartość rejestru ADC. To ty musisz przeliczyć uzyskaną wartość na napięcie wiedząc jakie masz napięcie referencyjne.
    No i skoro się dopiero uczysz to ucz się C, a nie jakiejś egzotyki typu BASCOM.

    0
  • #14 15 Paź 2012 20:51
    Wr841nd
    Poziom 12  

    Tylko teraz nie wiem czy dam rade przekonwertowac cały progs do C ( pewnie tak ale ile mi to zamie to nie wiem )

    Ale ale da sie pożenić rejestry z bascomem:
    Admux = &B01100001
    Adcsra = &B11100111
    Volt 1 = ADCH
    Narazie liczy napiecie ... ( robi to troche chaotycznie i za szybko )

    Ale jest inne cudo ! CPU pożera w takiej konfiguracji do 100mA !!! jesli wyłącze 7 bit w ADCSRA ( wyłacz ADC ) to nie ma takiego poboru ( czasami się zdarza )..
    Ale pytanie jak ustawić by były 2 kanały pomiarowe aktywne a nie jeden ?
    Admux(2) ? =&BB01100000 ale jak wtedy powiedziec bascomowi że ma 2 gi ADCH ?

    Narazie zabawa trwa ... ( teraz zaczynam rozumiec co mowiłeś o przesuwaniu bitów...)

    0
  • #15 15 Paź 2012 23:21
    tmf
    Moderator Mikrokontrolery Projektowanie

    Na raz aktywny jest tylko jeden kanał - M8 ma tylko jedno ADC! Ma natomiast multiplekser, czyli wejście ADC możesz połączyć z jednym z kilku pinów na obudowie. Nie mniej na raz dokonujesz tylko jednego pomiaru. W związku z tym niezależnie jak ustawisz multiplekser zawsze czytasz ten sam rejestr ADC w którym masz wynik konwersji.

    0
  • #16 17 Paź 2012 19:34
    Wr841nd
    Poziom 12  

    Ok znalazłem rozwiązanie:

    Code:
    Shift ADC_VAL , Right , 2 
    


    I faktycznie miernik przy 10 bit wykazywał 12V teraz pokazuje 3V..

    Ten link co mi podałeś niestety trochę w błąd wprowadza .. Wartości rozdzielczosci podane w linku odnosi się do 0-5V na wejsciu ADC ( a co dopiero po dzielniku rezystorowym )

    Bo niezłe cuda mi wychodziły jak mnożnikiem podnosiłem wynik ADC by miec wartość 12V skok pomiarowy wynosił 4 x tyle..

    Do tego dochodzi Vref ( 2.5 lub 5V ) i robi się ciekawie..
    Szkoda że nie ma 9 bit ale ... ciekawe jak zachowa sie program jak mu wymnoźe X2 ADC... ( przy 8 bit )

    0