Bascom odbiór danych z panela nextion uart

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Bascom odbiór danych z panela nextion uart

Post autor: grabek_radek » 06 gru 2017, 17:25

Witam serdecznie
odnośnie odbioru danych z panela nextion HMI ...dziwne rzeczy
mam taki kodzik - proszę o wyrozumiałość jest to program testowy i pewne rzeczy są nie używane
  1. $regfile = "m8adef.dat"
  2. $crystal = 8000000
  3.  
  4. '----------------------------
  5. $hwstack = 128
  6. $swstack = 128
  7. $framesize = 128
  8. $baud = 9600
  9. Dim Napis As String * 15
  10. Const Koniec = &HFF
  11.  
  12. '-------------------
  13.  
  14. Declare Sub Oproznij_bufor
  15.  
  16.  
  17. Declare Sub Odczytaj_sprzetowy_uart
  18. '------------------------------
  19. Dim Kod As String * 1
  20. Dim Bufor As Byte
  21. Dim Dane As String * 7
  22. Dim Test_string As String * 10
  23. '-----------------------------
  24. Dane = ""
  25. Test_string = "sdsdsdsds"
  26.  
  27.  
  28. Dim Tmp_dana As String * 8
  29. Dim Dana_bajty As String * 8
  30.  
  31.  
  32.  
  33. 'konfiguracja wyświetlacza LCD
  34. Config Lcd = 16 * 2
  35. Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
  36. Cursor Off
  37. Cls
  38.  
  39.  
  40.  
  41. Config Serialin = Buffered , Size = 128
  42. Config Serialout = Buffered , Size = 128
  43.  
  44.  
  45.  
  46.                                              'zmienna do przechowywania wilgotności
  47. Dim Crc As Byte                                             'zmienna do przechowywania bajtów parzystości
  48. Dim Mybyte As Byte
  49. Dim Sensor_data As String * 40                              'tutaj będą zapisywać się dane z czujnika
  50. Dim Tmp_str8 As String * 8
  51. Dim Count As Byte                                           'zmienna do obliczania odebranych bitów
  52.  
  53. Enable Interrupts
  54.  
  55.  
  56. '-################################################################################
  57. Do
  58. '------
  59. 'Napis = "n2.val="
  60. 'Print Napis ;
  61. 'Printbin Koniec ; Koniec ; Koniec
  62.  
  63.  
  64. 'Napis = "n3.val="
  65. 'Print Napis ;
  66. 'Printbin Koniec ; Koniec ; Koniec
  67.  
  68.  
  69.  
  70.  
  71. 'zapytanie
  72.    Print "get n0.val";
  73.    Printbin Koniec ; Koniec ; Koniec
  74.  
  75.  
  76. '----------odbiór danych
  77.  
  78.  ' Bufor = Ischarwaiting()                                 'Sprawdz czy cos jest w buforze
  79.  ' If Bufor = 1 Then
  80.    Waitms 100
  81.    Gosub Odczytaj_sprzetowy_uart                            'Jesli jest to odzcytaj
  82.   Waitms 200
  83.   'Print Dane;                                              'Odebrane dane wyslij z powrotem
  84. '  Gosub Oproznij_bufor
  85.   ' End If
  86.  
  87.  
  88.  
  89.  
  90. Loop
  91.  
  92.  
  93.  
  94. '----------------------
  95.  '  Tmp_dana = Left(dane , 1)
  96. '  Dana_bajty = Tmp_dana
  97.  
  98.  
  99.  '  Waitms 100
  100.  
  101. '  Cls
  102.  '  Lcd Hexval(tmp_dana)
  103.  
  104.  
  105. 'Loop
  106.  
  107.  
  108.  
  109.  
  110.  
  111. '-------------odbior danych-------
  112.  
  113.  
  114.  
  115. Odczytaj_sprzetowy_uart:
  116.  
  117. Dane = ""
  118.  
  119. 'Do                                                          'Odbierz znak po znaku
  120. '  Kod = Inkey()
  121. '  Dane = Dane + Chr(kod)                                    'Zapisz w Dane
  122. '  Bufor = Ischarwaiting()                                   'Zakoncz jeśli CR lub brak znaku
  123. 'Loop Until Bufor = 0 Or Kod = "13"
  124. 'Return
  125.  
  126.  Do
  127.  
  128.    Bufor = Ischarwaiting()                                  'Sprawdz czy cos jest w buforze
  129.   If Bufor = 1 Then
  130.     Kod = Inkey()
  131.  
  132.     Lcd Hexval(kod)
  133.  
  134.     Waitms 500
  135.     Cls
  136.  Else
  137.  Lcd "nowe"
  138.  Waitms 500
  139.  Cls
  140.  Return
  141.  End If
  142.  
  143. Loop
  144.  
  145.  
  146.  
  147.  
  148.  
  149. Oproznij_bufor:
  150.  
  151. Do
  152.   Kod = Inkey()                                            'Czyści bufor
  153.    Bufor = Ischarwaiting()
  154. Loop Until Bufor = 0
  155. Return



co wychwytuje na wyświetlaczu to ---gdy moja wartość n0. 'zapytanie
Print "get n0.val";
Printbin Koniec ; Koniec ; Koniec
jest wartością np =1
to otrzymuje na wyświetlaczu
26 209 0 0 0 200 200 200
gdy mam watość w n0=2
26 210 0 0 0 200 200 200
a dlaczego nie mam dla n0=5
71 5 0 0 0 255 255 255?
przechwycone dane
Obrazek
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Bascom odbiór danych z panela nextion uart

Post autor: niveasoft » 06 gru 2017, 19:00

Pozwoliłem sobie wrzucić Twój kod w kolorowanie składni ->pisząc post zamiast kliknąć "</>" klikasz niżej "Select code" i wybierasz Bascom AVR -> kursor miga i pośrodku znaczników wklejasz kod CTRL+V ;)

Spróbuj bardziej sprecyzować pytanie.
Kiedy zakładałem to Forum moją intencja było mieć mniej maili i opisać te kilka podstawowych spraw, ale teraz bardzo bym się ucieszył gdyby inni użytkownicy też pomagali prostować takie sprawy :D

Same "Opróżnij bufor" jest podejrzane bo wystarczy napisać "Clear Serialin" :D

Napisz dokładniej co to ma robić a w komentarzach kodu co uważasz, że Twój kod robi to wtedy da się wychwycić różnicę i pomóc.

Jeszcze się nie dorobiłem Nextiona, ale jest przykładowy kod obsługi na Forum MCS LINK
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Re: Bascom odbiór danych z panela nextion uart

Post autor: grabek_radek » 06 gru 2017, 20:12

  1. '  Gosub Oproznij_bufor
podprogram w chwili obecnej nie jest używany.
Ogólnie jest tak że wysyłam do panela za pomocą print zapytanie
  1.    Print "get n0.val";
  2.    Printbin Koniec ; Koniec ; Koniec
wartośc na panelu n0.val=5
i na analizatorze otrzymuję
Obrazek
natomiast gdy odbieram dane przez uC po jednym bajcie/znaku otrzymuję na wyświetlaczu po kolei 26 210 0 0 0 200 200 200
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Bascom odbiór danych z panela nextion uart

Post autor: niveasoft » 06 gru 2017, 20:27

Teraz zrozumiałem.
Sprawdź Lcd Hex(kod) a nie Hexval(kod)
To mój pierwszy typ nawet bez sprawdzania reszty.

Aaaaa i zmienną Kod zadeklaruj jako Byte a nie String * 1
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Re: Bascom odbiór danych z panela nextion uart

Post autor: grabek_radek » 07 gru 2017, 9:39

dzięki działa, a jeszcze jedno jak zamienić HEX na DEC ?
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Bascom odbiór danych z panela nextion uart

Post autor: niveasoft » 07 gru 2017, 9:59

Bajt ma swoją wartość, nie musisz tego zamieniać. Zamienia się tylko jego "reprezentację" "pokazywanie" Można go wyświetlić jako Hex, Dec lub Bin , ale wartość jest ta sama.
FE znaczy chyba (strzelam) 254 i w binarnym znaczy 1111_1110 (chyba) Kwestia wyświetlenia.
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Re: Bascom odbiór danych z panela nextion uart

Post autor: grabek_radek » 07 gru 2017, 14:15

A jak wyświetlić jako Dec ?
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Re: Bascom odbiór danych z panela nextion uart

Post autor: grabek_radek » 07 gru 2017, 14:19

  1.     Lcd Hex(tablica(2))
ok wyświetlanie w hex działa
ale jak wyświetlić w DEC ? nie znam polecenia
  1.     Lcd Dec(tablica(2))

tak nie działa ;(
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Bascom odbiór danych z panela nextion uart

Post autor: niveasoft » 07 gru 2017, 16:04

Nie komplikuj sobie czegoś specjalnie ;) Wystarczy Lcd Tablica(2) i gotowe
ODPOWIEDZ