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

Bascom - skaczący napis na LCD

tknefel - GORKY 14 Lip 2009 13:36 2720 13
  • #1 6777384
    tknefel - GORKY
    Poziom 14  
    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
  • #3 6777442
    nobisz
    Poziom 14  
    bascom nadpisuje na wyświetlaczu i pozostają Ci poprzednie napisy
    musisz przed wyświetlaniem wyczyścić ekran komendą
    CLS
  • #4 6777520
    gothye
    Poziom 33  
    komenda cls przed wyświetlaniem odczytu z ADC spowoduje miganie LCD
  • #5 6777564
    tknefel - GORKY
    Poziom 14  
    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??
  • Pomocny post
    #6 6777643
    H0miczek
    Poziom 20  
    generalnie mozna to chyba na 2 sposoby zrobic:
    1. tara =Fusing(w, "###.&&")
    2. wyifowac mniej wiecej na zasadzie:
    if (tara>=10) locate x,y;
    if (tara>=100)....
    ....



    edit: w 2. oczywiscie o wartość chodzi ;]
  • #7 6777655
    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.
  • Pomocny post
    #8 6778296
    Konto nie istnieje
    Poziom 1  
  • #9 6778800
    tknefel - GORKY
    Poziom 14  
    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:
    
    
    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
  • #10 6779110
    Konto nie istnieje
    Poziom 1  
  • #11 6779189
    zumek
    Poziom 39  
    Mnie natomiast zastanawia, ten fragment Twojego kodu:
    
    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:
  • #12 6779312
    Konto nie istnieje
    Poziom 1  
  • #13 6779341
    tknefel - GORKY
    Poziom 14  
    Wczesniej petla byla do 10
    Zdejmuje kilka pomiarow poniewaz zbiornik wagi moze sie kolysac po zaparkowaniu w ten sposob uzuskuje wartosc uśredniona
  • #14 6791975
    Pikczu
    Poziom 16  
    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ę
REKLAMA