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

Jak wyświetlić wartość ADC na LCD w Bascom AVR?

PiotrKA1 12 Kwi 2007 18:36 1266 3
REKLAMA
  • #1 3780928
    PiotrKA1
    Poziom 11  
    Posty: 27
    Pomógł: 2
    Proszę o pomoc w wyjaśnieniu jak wyświetlić na LCD wartość odczytaną komendą getADC. oto kod programu:
    Config Adc = Single , Prescaler = Auto
    'Now give power to the chip
    On Adc Adc_isr Nosave
    Enable Adc
    Enable Interrupts



    Dim W As Word , Channel As Byte

    Channel = 7
    'now read A/D value from channel 0
    Do
    Channel = 7
    'idle will put the micro into sleep.
    'an interrupt will wake the micro.
    Start Adc
    Idle
    Stop Adc
    Cls
    Locate 1 , 1
    Lcd "Channel " ; Channel ;
    Locate 2 , 1
    Lcd " value " ; W
    Waitms 250
    Loop
    End

    Adc_isr:
    push r24
    in r24,sreg
    push r24
    push r25
    W = Getadc(channel)
    pop r25
    pop r24
    !out sreg,r24
    pop r24
    Return

    niestety komendą LCD nie można wyswietlać zmiennej typu Word. Jak obejść ten problem?, jak wartość odczytana komendą getADC ma się do wartości napięcia mierzonego na nodze procesora?
    z góry dziękuję za pomoc
  • REKLAMA
  • #2 3781162
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    Przetestuj na początek taką pętle:
    
    Config Adc = Free , Prescaler = Auto 
    Dim W As Word , Channel As Byte 
    Cls
    channel=1
    Do
    W = Getadc(channel) 
    Locate 1 , 1 
    Lcd "Channel " ; Channel ; 
    Locate 2 , 1 
    Lcd " value " ; W 
    Waitms 250 
    Loop
    

    Podaj na wejście kanału 1 przetwornika napięcie z przedziału 0 - Vref i zobacz jak zareaguje LCD

    PS. I napisz jaki procesor ... ewentualnie umieść schemat tego "cudactwa"
  • REKLAMA
  • Pomocny post
    #3 3783657
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    Witam

    Cytat:
    niestety komendą LCD nie można wyswietlać zmiennej typu Word. Jak obejść ten problem?


    Zadeklaruj jakąś zmienną jako string (np. tak jak poniżej jest ss1)

    Dim Ss1 As String * 12
    
    
    Ss1 = Fusing(W, "#.&&")             ' formatowanie zapisu doformatu x.xx
    Lcd "U=" ; Ss1


    Cytat:
    jak wartość odczytana komendą getADC ma się do wartości napięcia mierzonego na nodze procesora?


    Aby uzyskać wartość napięcia należy pomnożyć wartość odczytaną z adc przez 0.0049

    czyli
    w = getadc(1)
    w=w*0.0049
    itd.....


    Pozdrawiam
  • #4 3784520
    PiotrKA1
    Poziom 11  
    Posty: 27
    Pomógł: 2
    Działa to w ten sposób. Wszystkim dziękuję za pomoc i zamykam temat
    $regfile = "m8535.dat"
    $crystal = 6000000
    $baud = 19200
    $lib "mcsbyte.lbx"
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pa.2 , Db5 = Pa.3 , Db6 = Pa.4 , Db7 = Pa.5 , E = Pa.1 , Rs = Pa.0

    Config Pinc.5 = Input
    Config Pinc.4 = Input

    Config Adc = Single , Prescaler = Auto
    On Adc Adc_isr Nosave
    Enable Adc
    Enable Interrupts

    Dim W As Word , Channel As Byte
    Dim Wolt As Single
    Dim Ss1 As String * 12
    Channel = 7

    Do
    Channel = 7
    Start Adc
    Idle
    Stop Adc
    Wolt = W * 0.0049
    Cls
    Locate 1 , 1
    Ss1 = Fusing(wolt , "#.##") ' formatowanie zapisu doformatu x.xx
    Lcd "U=" ; Ss1
    Waitms 250
    Loop
    End

    Adc_isr:
    push r24
    in r24,sreg
    push r24
    push r25
    W = Getadc(channel)
    pop r25
    pop r24
    !out sreg,r24
    pop r24
    Return
REKLAMA