Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega 8, Bascom Wyświetlanie na LCD

łuki_mar44 03 Jan 2010 22:30 4174 8
  • #1
    łuki_mar44
    Level 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.


    Code:

    $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
    Kamery 3D Time of Flight - zastosowania w przemyśle. Darmowe szkolenie 16.12.2021r. g. 10.00 Zarejestruj się
  • #2
    marco47
    Level 41  
    Witam
    Code:
    Wart_nap = Fusing(r , "#.##" ) 
    
    Wart_nap = Format(Wart_nap , "       ")

    Wtedy nie będzie się przesuwał napis
  • #3
    łuki_mar44
    Level 18  
    Wielkie dzięki o to właśnie mi chodziło

    pozdrawiam
  • #4
    łuki_mar44
    Level 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


    Code:


    $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ń?
  • #5
    marco47
    Level 41  
    Zastosuj
    Code:
    Wyswietlanie:
    
      Locate 1 , 1
        Lcd Wart_nap1 ; "V"
      Locate 2 , 1
        Lcd Wart_nap2 ; "V"
    Return
  • #6
    łuki_mar44
    Level 18  
    Zastosowałem i nadal to samo może błąd gdzieś tkwi w instrukcji format?
  • Helpful post
    #7
    marco47
    Level 41  
    W realu to działa
  • #8
    łuki_mar44
    Level 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
    łuki_mar44
    Level 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