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 8, Bascom Wyświetlanie na LCD

łuki_mar44 03 Sty 2010 22:30 4270 8
REKLAMA
  • #1 7481175
    łuki_mar44
    Poziom 18  
    Witam!

    Właśnie zacząłem troszkę pisać w bascomie i chcę zbudować woltomierz, lecz mam mały problem
    z wyświetleniem wartości w taki sposób jak bym chciał.
    Mianowicie
    Jeśli mam takie napięcie:
    Atmega 8, Bascom Wyświetlanie na LCD
    a po zwiększeniu wartości
    Atmega 8, Bascom Wyświetlanie na LCD
    to jak można zrobić by cyfry nie przesuwały się o jedno miejsce w prawo
    a były cały czas na swoich miejscach.
    Mam nadzieje że chyba w miarę dobrze wytłumaczyłem mój problem.


    
    $regfile = "m8def.dat"
    $sim
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    
    Dim Wart_ac As Word
    Dim V As Single
    Dim R As Single
    Dim Wart_nap As String * 4
    
    Start Adc
    Cursor Off
    
    Do
    Wart_ac = Getadc(1)
    V = Wart_ac * 0.004887585533
    R = V * 6
    Wart_nap = Fusing(r , "#.&&" )
    
    Cls
    Locate 1 , 1
    Lcd Wart_nap
    Locate 1 , 7
    Lcd "V"
    Waitms 100
    
    Loop
    End
    
  • REKLAMA
  • REKLAMA
  • #3 7482335
    łuki_mar44
    Poziom 18  
    Wielkie dzięki o to właśnie mi chodziło

    pozdrawiam
  • REKLAMA
  • #4 7486679
    łuki_mar44
    Poziom 18  
    Myślałem, że jest wszystko w porządku lecz jak dodaje jeszcze jedno napięcie do
    wyświetlania na takiej samej zasadzie to dzieją mi się różne cuda min.:
    Testy przeprowadzam w symulatorze programowym.
    Atmega 8, Bascom Wyświetlanie na LCD


    
    
    $regfile = "m8def.dat"
    $sim
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Config Pinb.1 = Input
            Pinb.1 = 1
    
    S1 Alias Portb.1
    
    Dim Wart_u1 As Word
    Dim Wart_u2 As Word
    Dim U1 As Single
    Dim U2 As Single
    Dim V1 As Single
    Dim V2 As Single
    Dim Ohm As Single
    Dim Wart_nap1 As String * 4
    Dim Wart_nap2 As String * 4
    
    
    
    Start Adc
    Cursor Off
    
    
    
    Do
    
    Wart_u1 = Getadc(0)
    Wart_u2 = Getadc(1)
    
    U1 = Wart_u1 * 0.004887585533
    V1 = U1 * 6
    
    U2 = Wart_u2 * 0.004887585533
    V2 = U2 * 6
    
    Wart_nap1 = Fusing(v1 , "#.##" )
    Wart_nap1 = Format(wart_nap1 , "     ")
    
    
    Wart_nap2 = Fusing(v2 , "#.##" )
    Wart_nap2 = Format(wart_nap2 , "     ")
    
    
    
    Gosub Wyswietlanie:
    
    
    Loop
    End
    
    Wyswietlanie:
    Cls
    Lcd Wart_nap1 ; "V"
    Lowerline
    Lcd Wart_nap2 ; "V"
    Waitms 100
    Return
    


    Czy to wina symulatora?
    Nie mam możliwości teraz sprawdzenia tego w realu. Czy jakiejś złej kolejności poleceń?
  • #6 7486904
    łuki_mar44
    Poziom 18  
    Zastosowałem i nadal to samo może błąd gdzieś tkwi w instrukcji format?
  • REKLAMA
  • Pomocny post
    #7 7487087
    marco47
    Poziom 41  
    W realu to działa
  • #8 7515002
    łuki_mar44
    Poziom 18  
    Sprawdzałem w realu i działa prawidłowo, nawet w symulatorze działa.
    Po prostu wyświetlanie zawartości zastosowałem zaraz po instrukcjach.

    Atmega 8, Bascom Wyświetlanie na LCD

    pozdrawiam
  • #9 7550849
    łuki_mar44
    Poziom 18  
    Mam jeszcze jeden problem, mianowicie:
    Mam zmienną typu single U i przypisuje jej liczbę 2.56 chcąc ją zwiększać
    o 0.01 robię coś takiego U = U + 0.01 a potem wyświetlam to na LCD.
    Lecz pojawia mi się
    Atmega 8, Bascom Wyświetlanie na LCD
    Wiem, że resztę cyfr mógł bym zamaskować na przykład poprzez instrukcje fusing. Lecz jeżeli dalej chcę pomnożyć tą liczbę przypuśćmy przez 2 to pojawia się błąd, ponieważ zamiast mnożyć 2 x 2.56 mnoży mi
    2x 2.56999993 i zamiast wyniku 5.12 otrzymuje 5.13999986 i nawet gdy zamaskuję liczby 999986 to i tak wynik różni się o 0.01 czyli 5.13.
    Więc moje pytanie jak można zrobić aby liczba 2.56 była tylko tą liczbą dwa miejsca po przecinku a nie 2.56999993. Można to zrobić jakoś na liczbach całkowitych?

    Pozdrawiam
REKLAMA