Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Bascom - skaczący napis na LCD

tknefel - GORKY 14 Lip 2009 13:36 2333 13
  • #1 14 Lip 2009 13:36
    tknefel - GORKY
    Poziom 13  

    Witam
    Kilka dni temu rozpoczolem nauke bascoma.
    Napisalem prosty program do pomiaru ciężaru netto.
    Problem pojawia sie w momencie wyswietlenie wartosci jednostek dziesiatek isetek kilogramow poniewaz wartosc wyswietlana jest od pierwszego znaku a konczy sie w innym.
    Najpierw wyswietlilem slowo "Ciezar" i odpowiednio dalej "kg"
    Dopiero potem pomiedzy wyswietlilem wartosc zmierzona w przeciwnym wypadku przy niskiej masie pojakielo sie cos takiego 1.50 kggg.
    Ciezar: 1,00 kg
    1,00
    10,00
    100,00

    Bascom - skaczący napis na LCD


    Czy zna ktos sposob wyswietlania tak wartosci aby przecinek byl nieruchomy?? Chce zeby to wygladalo profesjonalnie.
    A to fragment kodu:
    Bascom - skaczący napis na LCD

    0 13
  • #2 14 Lip 2009 13:44
    gothye
    Poziom 33  

    spróbuj :

    Code:


    locate 1,1
    lcd "ciężar : " ; tara ; " kg "

    0
  • #3 14 Lip 2009 13:51
    nobisz
    Poziom 14  

    bascom nadpisuje na wyświetlaczu i pozostają Ci poprzednie napisy
    musisz przed wyświetlaniem wyczyścić ekran komendą
    CLS

    0
  • #4 14 Lip 2009 14:14
    gothye
    Poziom 33  

    komenda cls przed wyświetlaniem odczytu z ADC spowoduje miganie LCD

    0
  • #5 14 Lip 2009 14:29
    tknefel - GORKY
    Poziom 13  

    Panowie nie w tym problem.
    Nieuzylem komendy CLS tylko zamazuje poprzedni wynik nowa wartoscia.
    to kggg bylo w poprzedniej wersji programu i niezawracajmy sobie tym juz głowy.
    Slowa "Ciezar" i "kg" sa wyswietlone tylko raz a wartos ciezaru jest aktualizowana.

    Chodzi mi o to aby wartosc cyfrowa byla stana wzgledem nieruchomego przecinka a nie wedlug pierwszego wyswietlanego znaku.
    Przeczytajcie prosze post raz jesczze.

    Sprawa druga jak ustawilem wait 2 na tarowanie to operacja trawa ok 16sekund!!
    Dlaczego??

    0
  • Pomocny post
    #6 14 Lip 2009 14:51
    H0miczek
    Poziom 20  

    generalnie mozna to chyba na 2 sposoby zrobic:
    1. tara =Fusing(w, "###.&&")
    2. wyifowac mniej wiecej na zasadzie:

    Code:
    if (tara>=10) locate x,y;
    
    if (tara>=100)....
    ....



    edit: w 2. oczywiscie o wartość chodzi ;]

    0
  • #7 14 Lip 2009 14:53
    nobisz
    Poziom 14  

    jeżeli chcesz mieć przecinek zawsze w tym samym miejscu to niestety musisz przed wyswietleniem sprawdzić wartość (długośc) wyniku i odpowiednio zmienić współrzędne wyświetlania, inaczej chyba sie nie da.

    czekanie 16 sekund wynika pewnie z tego, że procesor ma nastawione wolniejsze taktowanie niż przypuszcz compilator, sprawdż ustawinia Fuse bitów na jakiej częstotliwości pracuje procesor, a potem sprawdź co robi compilator.

    0
  • Pomocny post
    #8 14 Lip 2009 17:49
    atom1477
    Poziom 43  

    Code:

    Text = "99.9999"
    Text = Format(text , "  0.00")
    LCD Text



    Pytanie poza konkursem: dlaczego wszyscy notorycznie stosują Fusing(xxx, "#.&&")? Nie lepiej Fusing(xxx, "#.##")?

    0
  • #9 14 Lip 2009 20:06
    tknefel - GORKY
    Poziom 13  

    Juz sie uporalem :)
    Kolega HOmiczek pomysl mial tylko teoretycznie dobry.
    Kolega Atom1477 mial dobry pomysl, troche go zmodyfikowalem.
    Efekt koncowy wyglada tak:
    Bascom - skaczący napis na LCD
    A to kod:

    Code:


    Tar:
       Cls
       Locate 1 , 4
       Lcd "Tarowanie"
       Portd.5 = 0
       Portd.6 = 0
       Wait 2
       For Z = 1 To 5
       Wart_ac = Wart_ac + Getadc(0)                           
       Next Z
       Wart_ac = Wart_ac / 5
       Wart_ac = Getadc(0)
       W = Wart_ac * 0.5

    Do
       Waitms 20:
       Wart_ac = Getadc(0)                                     
       V = Wart_ac * 0.5                                       
       Z = V - W                                               
       Wart_cie = Fusing(z , "#.&&")                           
       Wart_cie = Format(wart_cie , "      ")
       Locate 1 , 1                                             
       Lcd "Ciezar:" ; Wart_cie ; " kg"                       

       Tara = Fusing(w , "#.&&")
       Tara = Format(tara , "      ")
       Locate 2 , 1
       Lcd "Tara:  " ; Tara ; " kg"

       Debounce S2 , 0 , Sta , Goto                             
    End


    Dzieki za pomoc i prosze o wyrozumialosc bo to moj pierwszy program.

    A wracajac do pytania kolegi Atom1477, niewiem jak taka fukncja ma sie to zajmowania przestrzeni adresowej ale poza zaokragleniem nierobi chyba nic wiecej.
    W moim przypadku nie jest ona wskazana #,## poniewaz zawyza wynik pomiaru o +0,004

    0
  • #10 14 Lip 2009 21:01
    atom1477
    Poziom 43  

    Może w przypadku wagi trzeba obcinać.
    Ale normalnie to raczej wypadało by zaokrąglać.
    A funkcja zaokrąglająca zajmuje z tego co sprawdzałem, mniej. W zasadzie sama funkcja jest jedna, a wyboru dokonuje się na podstawie wzorca (czyli w procesorze siedzą i tak obydwie wersje). Ale to było dawno jak sprawdzałem i już nie jestem pewien.

    0
  • #11 14 Lip 2009 21:14
    zumek
    Poziom 39  

    Mnie natomiast zastanawia, ten fragment Twojego kodu:

    Code:

    Tar:
    '...
       For Z = 1 To 5
       Wart_ac = Wart_ac + Getadc(0)                           
       Next Z
       Wart_ac = Wart_ac / 5
    '...

    Do czego on służy :?: "Tarujesz" przetwornik ADC :?: :D:

    0
  • #12 14 Lip 2009 21:34
    atom1477
    Poziom 43  

    "Oversampling"? (w mocnych cydzysłowiach)

    0
  • #13 14 Lip 2009 21:39
    tknefel - GORKY
    Poziom 13  

    Wczesniej petla byla do 10
    Zdejmuje kilka pomiarow poniewaz zbiornik wagi moze sie kolysac po zaparkowaniu w ten sposob uzuskuje wartosc uśredniona

    0
  • #14 18 Lip 2009 00:10
    Pikczu
    Poziom 14  

    Witam nie wiem jaki masz procek ale np w atmega 128 zalecane jest opuszczenie 2 pierwszych pomiarów z adc.
    Chyba ze bascom to już to robi ale nie wydaje mi się

    0