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.

formatowanie wyniku pomiaru na wyś. alfanumerycznym, Atmega8

fliper_katrill 13 Maj 2008 18:55 1160 7
  • #1 13 Maj 2008 18:55
    fliper_katrill
    Poziom 20  

    Witam serdecznie!
    Aby wyjaśnić o co mi chodzi pozwolę sobie na króciutki opis:
    1)
    U=0.0V T:18.5°C (2 spacje pomiędzy)

    2)
    U=10.0V T:18.5°C (1 spacja pomiędzy)

    3)
    U=0.0VV T:18.5°C (1 spacja pomiędzy)

    Wyświetlacz jest 2x16 w 2 linijce jest podobnie więc nie pisałem.
    Wiem że mogę zastosować Cls przy wyświetlaniu ale będzie to powodować mryganie gdyż odczyt jest w pętli.
    Wiem że dokonujemy formatowania wyników ADC:

    Wart_nap = Fusing(v , "#.&&") gdzie && to 2 znaki po przecinku.

    Jak zarezerwować również 2 miejsca przed przecinkiem?? (## ;p nie działa)
    Chcę aby wynik miał postać XX.X np:
    01.5V , 12.0V , 07,5V

    Dzięki!!

    0 7
  • #2 13 Maj 2008 19:40
    crazy_phisic
    VIP Zasłużony dla elektroda

    Może instrukcja "SPC" pomoże ;).

    0
  • #3 13 Maj 2008 19:50
    zumek
    Poziom 39  

    Do formatowania wyświetlanych stringów, najlepiej użuć funkcji do formatowania stringów ;) Ta funkcja , to - nomen omen - Format() :D
    I tradycyjnie :D przykładzik , dla kumatych inaczej:

    Code:

    _string = Fusing(_single , " 0.##")
    _string = Format(_string , "00000")
    Lcd _string


    Piotrek

    0
  • #4 13 Maj 2008 20:34
    fliper_katrill
    Poziom 20  

    yyyyyyyyyyyyyyyy że tak powiem pierwsze słyszę więc proszę o pomoc w wstawieniu tego cuda w program, oto listing :):

    Code:

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.6 , Db5 = Portb.7 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.2 , Rs = Portd.0


    Config 1wire = Portc.0                                     
    Dim I As Integer                                         
    Dim S As Single
    Dim T As String * 4

    Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32           
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Dim X As Byte , Y As Byte
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Cursor Off
    Cls

    Start Adc                                                   
    Do

    Wart_ac = Getadc(4)
    Locate 1 , 1
    V = Wart_ac * 0.0369
    Wart_nap = Fusing(v , "#.&")
    Lcd "U=" ; Wart_nap ; "V"

    Wart_ac = Getadc(5)
    Locate 2 , 1
    V = Wart_ac * 0.039
    Wart_nap = Fusing(v , "#.&")
    Lcd "I=" ; Wart_nap ; "A"

    Waitms 45

       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750

       1wreset
       1wwrite &HCC
       1wwrite &HBE

       I = 1wread(2)
       S = I / 16
       T = Fusing(s , "##.#")

       Locate 1 , 9
       Lcd "T:" ; T ; Chr(0) ; "C"

    Loop
    [/code]

    0
  • #5 13 Maj 2008 21:45
    zumek
    Poziom 39  

    fliper_katrill napisał:
    yyyyyyyyyyyyyyyy że tak powiem pierwsze słyszę...

    :shocked!:
    fliper_katrill napisał:
    więc proszę o pomoc w wstawieniu tego cuda w program, oto listing :):

    Nie przeginaj :!:
    Szukasz pomocy , czy wykonawcy :?:
    Jeżeli to 1-sze, to patrz mój poprzedni post , a jeżeli to 2-gie , to nie ten dział :|

    Piotrek

    0
  • #6 13 Maj 2008 22:14
    fliper_katrill
    Poziom 20  

    Absolutnie nie chcę się nikim wysługiwać , po prostu po utworzeniu kodu:

    Code:

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.6 , Db5 = Portb.7 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.2 , Rs = Portd.0


    Config 1wire = Portc.0                                      ' termometr ds18b20
    Dim I As Integer                                            'zmienne do odczytu temp.
    Dim S As Single
    Dim T As String * 4

    Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32           ' znak stopnia
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Dim X As Byte , Y As Byte
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 4
    Cursor Off
    Cls

    Start Adc                                                   'pomiar temp. na termometrze ds18b20
    Do

    Wart_ac = Getadc(4)
    Locate 1 , 1
    V = Wart_ac * 0.0369
    Wart_nap = Fusing(v , "0.##")
    Wart_nap = Format(v , "00000")
    Lcd "U=" ; Wart_nap ; "V"

    Wart_ac = Getadc(5)
    Locate 2 , 1
    V = Wart_ac * 0.039
    Wart_nap = Fusing(v , "0.##")
    Wart_nap = Format(v , "00000")
    Lcd "I=" ; Wart_nap ; "A"

    Waitms 45

       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750

       1wreset
       1wwrite &HCC
       1wwrite &HBE

       I = 1wread(2)
       S = I / 16
       T = Fusing(s , "##.#")

       Locate 1 , 9
       Lcd "T:" ; T ; Chr(0) ; "C"

    Loop

    wyświetla mi straszne głupoty :)

    0
  • #7 13 Maj 2008 22:31
    zumek
    Poziom 39  

    fliper_katrill napisał:
    Absolutnie nie chcę się nikim wysługiwać , po prostu po utworzeniu kodu:

    Przyczyną krzaków na LCD , sa najprawdopodobniej zbyt małe wartości w:
    Code:

    $hwstack = 32
    $swstack = 32
    $framesize = 32

    Wklej te 3 linijki na początek swojego kodu i sprawdź czy pomogło.

    Piotrek
    PS
    Znajomość swojego kompilatora , to moim zdaniem 25% sukcesu "programistycznego" :D

    0
  • #8 10 Sie 2008 15:10
    fliper_katrill
    Poziom 20  

    Nie wstawiałem powyższego kodu gdyż kompilator w wersji 1.11.7.4 traktował wpisy jako błędy , skupiłem się natomiast na czymś innym. Polecenie FORMAT odnosi się do zmiennych tekstowych WORD a nie STRINGów może tu jest pies pogrzebany?? , jeśli STINGi to FUSING z tym że w tym ostatnim da się pięknie formatować ZA przecinkiem a nie PRZED :) Dzięki z góry za pomoc !!

    0
  Szukaj w 5mln produktów