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

[Bascom] wysyłanie sformatowanych danych RS232

fliper_katrill 24 Cze 2010 13:33 2618 9
  • #1 8226062
    fliper_katrill
    Poziom 20  
    Witam serdecznie!
    Mam problem z wysyłaniem po RS danych. Korzystam z funkcji Print , używałem jej z i bez średnika, używałem też konwertowania na hexy cuda, wianki..... :)

    Program odbierający stringi (c#) czyta mi z tego portu jakieś badziewie (prawidłowy format to 20.58) a dostaję:
    20.58
    .58
    0.58
    8

    20
    20.58

    celowo dałem tam spację bo jest, w bascomie występuje konwersja z single na string (fusing). Tak naprawdę obojętnie czy to będzie skonwertowane i jak tylko by był to wynik w jednakowej postaci XX.XX i ja sobie poradzę w c# z jego cięciem, najgorsza jest ta niestałość wysyłanego przez Bascom stringa.
    Z góry dziękuję za odpowiedzi.
  • #3 8226191
    fliper_katrill
    Poziom 20  
    
    'Definicja procesora dla:
    ' Mega16 wpisać m16def.dat
    ' Mega32 wpisać m32def.dat
    ' Mega644p wpisać m644pdef.dat
    $regfile = "m32def.dat"
    
    'Częstotliwość kwarcu domyślnie 16MHz
    $crystal = 16000000
    
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               'default use 10 for the SW stack
    $framesize = 40                                             'default use 40 for the frame space
    
    
    'Podłączenie pinów LCD do mikroprocesora
    ' BL = PortC.1
    ' Rs = PortC.2
    '  E = PortC.3
    'Db4 = PortC.4
    'Db5 = PortC.5
    'Db6 = PortC.6
    'Db7 = PortC.7
    
    Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
    Config Lcd = 16 * 2
    
    'Pin podświetlenia LCD
    Config Portc.1 = Output
    Set Portc.1
    
    Cls
    Cursor Off
    Lcd "Test DS18B20"
    
    Dim Lsb As Byte
    Dim Msb As Byte
    Dim Tempa As Single
    Dim Tekst1 As String * 10
    
    
    
    'Pin do czujnika DS18B20
    Config 1wire = Pind.4
    Dim Ds(8) As Byte
    
    1wreset
    1wwrite &H33
    Ds(1) = 1wread(8)
    
    Do
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Wait 1
    
    1wreset
    
    1wwrite &HCC
    1wwrite &HBE
    
      Lsb = 1wread():
      Msb = 1wread():
    
      Tempa = Msb * 256
      Tempa = Tempa + Lsb
      Tempa = Tempa / 16
      Tekst1 = Fusing(tempa , "#.##")
    
      Locate 2 , 1
      Lcd "DS18B20= " ; Tekst1
      Print Tekst1
      Loop
    
  • #4 8226398
    Logan
    Poziom 30  
    Spójrz na swój program i pomyśl z jaką prędkością procesor podaje dane dla UART'a, a później z jaką prędkością wysyłasz...
  • #5 8226425
    fliper_katrill
    Poziom 20  
    Nie jestem w tym biegły, proszę o pomoc :) nie chcę palnąć jakiejś głupoty

    Dodano po 2 [minuty]:

    program nie jest mój tylko pierwszy lepszy do testów
  • #6 8227147
    Logan
    Poziom 30  
    W takim razie po Print daj Wait 1.
  • #7 8228960
    xury
    Specjalista automatyka domowa
    Raczej to nie wina wysyłania printa. W końcu jest wait 1 po zapisie do czujnika DS18b20.
    Ja stawiam na złe odfiltrowanie LF po CR .
    Zamiast do "programu odczytującego stringi" podepnij się np. do Putty lub innego terminala i tam sprawdź jakie dane są słane.
  • #8 8229207
    fliper_katrill
    Poziom 20  
    Waitms 500 dodałem dopiero teraz, jest znacznie lepiej. Jeśli kod c# "nie pyta" o zmienną z RS za szybko (dorzuciłem oczekiwanie w kodzie) wszystko śmiga ładnie i nie wykrzaczył mi się do tej pory :)
  • #9 8229232
    Logan
    Poziom 30  
    Na przyszłość polecam klik .
  • #10 9781087
    fliper_katrill
    Poziom 20  
    Program odczytuje po dodaniu opóźnienia :) temat zamykam i dziękuję za odpowiedzi.
REKLAMA