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

[Atmega] [Bascom] Obsługa ADC. Przeliczanie na V.

klops_mops 17 Maj 2009 20:57 3706 3
REKLAMA
  • #1 6542300
    klops_mops
    Poziom 17  
    Naskrobałem taki oto program:

    $regfile = "m16def.dat"
    $crystal = 16000000
    
    Config Adc = Single , Prescaler = Auto
    Start Adc
    
    Dim W As Word
    Dim Swolty As Single
    Dim Gwolty As Single
    
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
    
    
    Cls
    
    
    Do
    
    W = Getadc(0)
    W = Getadc(0)
    
    Swolty = W * 4.9
    Gwolty = Swolty / 1023
    
    Locate 1 , 1
    Lcd "Napiecie 1: " ; Fusing(gwolty , "#.##") ; "V"
    Waitms 100
    Loop
    End
    


    Wszystko działa całkiem fajnie, tylko trochę musiałem się namyśleć w jaki sposób przeliczyć wynik podawany z Getadc na wolty.
    Wychodziło mi:
    Woltomierz 4,9V - ADC 1023
    Woltomierz 0V - ADC 0

    Dzięki temu ułożyłem równanie na policzenie wartości w V.

    Oczywiście zdaję sobie sprawę, że gdy napięcie Aref będzie inne niż 4,9V to wynik będzie błędnie podawany.

    Moje pytanie teraz:
    Czy jest to poprawne rozwiązanie, oraz czy można to zrobić prościej, dokładniej?

    Pozdrawiam
  • REKLAMA
  • #2 6542333
    K_o_n_r_a_d
    Poziom 23  
    Jest to "poprawne rozwiązanie".
    Poprawne w cudzysłowie ponieważ jak widzę typ SINGLE w Bascomie to aż mnie coś bierze :)
    Ten sam program napisany bez użycia typu zmiennoprzecinkowego (wykorzystując tylko typ całkowity) wykona się dużo, dużo... szybciej i zajmie mniej pamięci programu i danych.
  • REKLAMA
  • Pomocny post
    #3 6543129
    dawid512
    Poziom 32  
    
    dim Wart_adc as word
    dim V as single
    dim Wart_nap as string * 4
    
    Wart_adc = Getadc(0) 
    
    V = Wart_adc * 0.0048    '(  5/1024 * wart_adc)
    
    Wart_nap = Fusing(v , "#.&&")
    


    4 bajty mniej :)

    P.S. Można nawet zrezygnować ze zmiennej Wart_nap :)
  • #4 6543719
    klops_mops
    Poziom 17  
    Ok - dziękuję, wszystko pięknie działa :)
REKLAMA