Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega8 adc bascom błędny odczyt

Xenom 13 Aug 2012 22:17 3009 16
  • #1
    Xenom
    Level 10  
    Witam

    Problem jest taki że nie wiem co zrobić. przystawiam do adc 11V (przez dzielnik: od strony masy 47k a od drugiej 100k) a na wyświetlaczu pokazuje mi 717. gdy przystawię do masy to pokazuje 623.
    AREF do masy przez 100nF
    AvCC +5V i przez 100nF do masy

    czytałem że ma pokazywać od 0 do 1023 i jak to zrobić ?? czy błąd mam w kodzie ?

    Code: basic4gl
    Log in, to see the code
  • #2
    mickpr
    Level 39  
    Xenom wrote:
    ...przystawiam do adc 11V (przez dzielnik: od strony masy 47k a od drugiej 100k) a na wyświetlaczu pokazuje mi 717. gdy przystawię do masy to pokazuje 623.
    Xenom wrote:
    ..czytałem że ma pokazywać od 0 do 1023 i jak to zrobić ?? czy błąd mam w kodzie ?

    717 - pierwsza wartość jest ok. Ja z wyliczeń mam około 720 (3,517V na pinie).
    623 - druga wartość powinna być w zasadzie 0 (w obojętnie jakim dzielniku powinno dać 0). Dlaczego tak nie jest?
    Tego nie uda mi się wydedukować bez schematu.
    Narysuj schemat - http://www.digikey.com/schemeit
    Daj zrzut ekranu.
  • #3
    Xenom
    Level 10  
    gdy nie mam podłączonego adc lub jest do masy, to na pinie jest 2,68V

    Atmega8 adc bascom błędny odczyt [/img]
  • #4
    mickpr
    Level 39  
    No i dlatego masz te 623.
    Dzielnik masz źle policzony.
    To nie jest proporcja 100/47 tylko 147/47 - stąd ten błąd (dla pierwszej wartości).
    Proporcja napięcia mniejszego jest odwrotna = 47/147 = ~0,32 --> (0.32*11V=3,52V --> (3,52*1024(wartosci ADC)/5V) --> ~720 (wartość z ADC).

    Co do drugiej wartości : Nie znam się na BASCOM-ie... ale czasem na tym pinie nie jest załączony pull-up (wewnętrzny)?
    https://www.elektroda.pl/rtvforum/topic549828.html

    A to się przyda:
    http://elportal.pl/ea/prog001.html
  • #5
    Xenom
    Level 10  
    a ten pull-up to po prostu przypisać do portu jedynki ??
  • #7
    Xenom
    Level 10  
    poprawiłem układ o ten dzielnik. do kodu też dołożyłem te zera a wynik nic praktycznie się nie poprawił (jedynie o ten dzielnik)

    Code: basic4gl
    Log in, to see the code


    kod obciety.
  • #8
    mickpr
    Level 39  
    Chyba tak w BASCOMie
    Code: basic4gl
    Log in, to see the code
  • #9
    Xenom
    Level 10  
    tak się nie kompiluje

    jakieś pomysły jeszcze ?
  • #10
    mickpr
    Level 39  
    Jak to się nie kompiluje?
    Mi się kompiluje :)
    Specjalnie zainstalowałem BASCOM.
  • #11
    Xenom
    Level 10  
    racja, jednak się kompiluje ;) ale dalej nie działa poprawnie
  • #12
    mickpr
    Level 39  
    A możesz sprawdzić na innym pinie - może tego "upaliłeś".
  • #14
    mickpr
    Level 39  
    Sprawdziłem przed chwilą na mojej ATMEGA32
    kod:
    Code: basic4gl
    Log in, to see the code


    Zwieram do masy - 0
    Zwieram do VCC (przez rezystor 100ohm) - 1023 (około)
    Jedynie gdy zostawię pin odpięty od wszystkiego pomiar "lata" (normalne).
  • #15
    Xenom
    Level 10  
    wymieniłem procesor i zamieniłem kolejność kodu
    z:
    Code: basic4gl
    Log in, to see the code

    na:
    Code: basic4gl
    Log in, to see the code

    coś pomogło :) chyba zmiana kodu :) teraz chcę ten woltomierz podłączyć do czujnika temperatury w samochodzie. narazie wiem że gdy mam jakieś 6,6V to otwiera się termostat :)

    mam jeszcze problem po przerobieniu na volty wyświetla mi np. 345 a powinno 3.45

    stosuje:
    Code: basic4gl
    Log in, to see the code

    w3, x są single
  • #16
    emarcus
    Level 38  
    Xenom wrote:
    wymieniłem procesor i zamieniłem kolejność kodu

    ................
    coś pomogło :) chyba zmiana kodu :)


    Raczej pomogła zmiana processora...
    Obie alternatywy kodu nie różnią się od siebie, ponadto patrz wyjaśnienia;
    Code: basic4gl
    Log in, to see the code



    Quote:


    mam jeszcze problem po przerobieniu na volty wyświetla mi np. 345 a powinno 3.45

    stosuje:

    Code: basic4gl
    Log in, to see the code

    w3, x są single



    Pokaż w jaki sposób "przerabiasz" odczytaną wartośc z ADC na volty....
    - jaką wartoś ma współczynnik kompensujący dzielnik napięcia(?).
    Masz błędne stosowanie funkcji Fusing.
    Patrz Bascom Help...

    "6.222 FUSING
    Action
    FUSING returns a formatted string of a single value.
    Syntax
    target = FUSING(source, "mask")"

    -u ciebie: zmienna w3 powina byc zwymiarowana jako string; - nie single(!), tylko x jest single.
    również "mask" ma niepoprawny syntax - zawsze na początku ma byc #. (pojedynczy znak #).
    Wszystkie szczegóły sa dostatecznie objaśnione w tabelce 'Remarks' w dalszej częsci wyżej cytowanego paragrafu.

    e marcus
  • #17
    mickpr
    Level 39  
    emarcus wrote:
    Config Portc = Input ' ten wpis nie jest potrzebny - by default- port jest input
    DDRC = &B0000000 ' ten wpis jest to samo co wyżej (nie potrzebny)
    PORTC = 0 ' by default wszystkie piny portu mają stan niski (0), więc nie jest konieczne

    Pozwolę sobie nie zgodzić się z takim podejściem (nie z faktem).
    "Kiedy coś jest niepewne, jest pewne" (cytat z filmu Ronin)
    Lepiej, jeśli w kodzie jasno widać co jest jak ustawione,
    zamiast snucia domysłów.

    emarcus wrote:
    Raczej pomogła zmiana processora...

    Z tym się zgodzę. :) To najbardziej logiczne wytłumaczenie.