[Bascom] DWIN LCD (HMI ) biblioteka

Gotowe kody obsługi układów elektronicznych udostępnione przez użytkowników forum.
ODPOWIEDZ
Pikczu
Posty: 389
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

[Bascom] DWIN LCD (HMI ) biblioteka

Post autor: Pikczu » 20 cze 2018, 21:36

Biblioteka dla wyświetlaczy inteligentnych DWIN.
http://www.dwin.com.cn/home/English/lcm_info
Polski dystrybutor: http://whiteelectronics.pl/
Dwin jest producentem inteligentnych wyświetlaczy sterowanych poprzez port szeregowy.
Do wyświetlacza dołączone jest darmowe oprogramowanie pozwalające na bardzo szybkie tworzenie interfejsu użytkownika (DGUS v5.10)

Przy pomocy dowolnego graficznego programu tworzymy ekrany, po czym w oprogramowaniu GDUS nanosimy siatkę z wybranymi funkcjami.
Do wyboru jest spora ilość funkcji, która pozwala nam na stworzenie w bardzo szybkim czasie całkiem niezłego interfejsu użytkownika.
Nie będę się tu rozpisywał na temat samych wyświetlaczy bo materiału na ich temat jest dość sporo i w sumie mógł by to być osobny dział.
Mój egzemplarz to 7 cali z pojemnościowym ekranem dotykowym o rozdzielczości 800x480.
Biblioteka przygotowana pod "project mode" z plikami $include
Do głównego programu wklejamy:
$include "subs\Macro_Dwin_variables_constants_arrays.inc"
$include "subs\LCD_var_Write.inc"
$include "subs\LCD_page_set.inc"
$include "subs\Function_Dwin_lcd_get_var_value.inc"

W miejscu deklaracji zmiennych wklejamy Macro:
Macro_dwin_variables_constants_arrays 'all Dim variables constants and arrays for this lib

W osobnym folderze umieszczamy wszytkie nasze sub rutyny z rozszerzeniem *.inc.
W moim przypadku folder ten miał nazwę Subs.

Jak używać?
Gdy będziemy chcieli zmienić wartość komórki piszemy:
Call Lcd_var_write(adres hex ,wartosc od 0 do 65535)

Zmian ekranu:
Sub Lcd_page_wr(numer strony w hex 0 do ff )

Funkcja odczytu zawartości komórki pamięci:
zmienna word= Dwin_lcd_get_var_value(adres komórki hex z której odczytujemy )

Plik spakowany rarem dołączę w następnym poście bo tym razem już chyba wyczerpałem ilość dozwolonych załączników.
Makro z deklaracjami zmiennych, stałych oraz tablic:
  1. $nocompile
  2. 'ver1.0 by SP9DR 2018
  3. 'pawel.labedz@gmail.com
  4. 'all variables needed for DWin librray
  5. Macro Macro_dwin_variables_constants_arrays
  6. Dim Dwin_arr_tx(8)as Byte                                   'tablica na adres do dwin
  7. Dim Dwin_ad As Word At Dwin_arr_tx(5) Overlay               'nakladka na adress
  8. 'Dim Dwin_ad_tmp As Word
  9. Dim Dwin_val As Word At Dwin_arr_tx(7) Overlay              'nakladka na wartsosc
  10. 'Dim Dwin_val_tmp As Word                                    '  little endian  na big endian
  11. Dim Dwin_arr_rx(9) As Byte
  12. Dim Dwin_var_rx As Word At Dwin_arr_rx(8) Overlay           'nakladka na tablice odbioru z dwin
  13. Dim Dwin_var_rx_tmp As Word
  14.  
  15. '************************* Constants *******************************************
  16. Const Dwin = 4  'uart    
  17. Const Header1 = &H5A
  18. Const Header2 = &HA5                                        'LCd address
  19. Const Regwrite = &H80                                       'register write
  20. Const Regread = &H81                                        'register read
  21. Const Varwrite = &H82                                       'variable write command
  22. Const Varread = &H83                                        'variable read command
  23. Const Graphwr = &H84                                        'graph write Only
  24.  
  25. '*******************************************************************************
  26. '************************* Arrays **********************************************
  27.  
  28. Dwin_arr_tx(1) = Header1
  29. Dwin_arr_tx(2) = Header2
  30. Dwin_arr_tx(3) = &H05                                       'ile zmiennych 5 defaultowo!
  31. Dwin_arr_tx(4) = Varwrite                                   'zapisz
  32. Dwin_arr_tx(5) = 0                                          'address_h
  33. Dwin_arr_tx(6) = &H10                                       'address_l
  34. Dwin_arr_tx(7) = &H01                                       'value_h
  35. Dwin_arr_tx(8) = &H0                                        'value_l
  36. '*******************************************************************************
  37. Dwin_arr_rx(1) = &HFF
  38. Dwin_arr_rx(2) = &HFF
  39. Dwin_arr_rx(3) = &HFF                                       'ile zmiennych 5 defaultowo!
  40. Dwin_arr_rx(4) = &HFF                                       'read
  41. Dwin_arr_rx(5) = &HFF                                       'address_h
  42. Dwin_arr_rx(6) = &HFF                                       'address_l
  43. Dwin_arr_rx(7) = &HFF                                       'value_h
  44. Dwin_arr_rx(8) = &HFF                                       'value_l
  45. Dwin_arr_rx(9) = &HFF                                       'value_l
  46. '*******************************************************************************
  47. End Macro

Sub dla zapisu wartości do wybranej komórki pamięci wyświetlacza Dwin:
  1. $nocompile
  2. 'ver1.1 by   SP9DR 2016-2018
  3.  
  4. 'DWIN lcd variable write sub
  5.  
  6.  Sub Lcd_var_write(byval Ad As Word , Byval Value As Word )
  7. 'we need to swap position look in to table below how dtat is stored is SRAM
  8. Swap Ad                                                     'litle endian to big endian
  9. Dwin_ad = Ad                                                'asign the value to Diwn array adres postion
  10. Swap Value                                                  'litle endian to big endian
  11. Dwin_val = Value                                            'asign the value to Diwn array Value postion
  12. Printbin#dwin , Dwin_arr_tx(1) , 8                          'print bin whole array
  13.  
  14. End Sub
  15. '*****************************************************************
  16. '*****************************************************************
  17. ' This is how it will be stored in SRAM
  18. ' <-------var---->
  19. ' +-------+------+
  20. ' | Byte_1|Byte_2|
  21. ' +-------+------+
  22. 'But when you print it with print
  23. ' <-------var--->
  24. ' +------+------+
  25. ' |Byte_2|Byte_1|
  26. ' +------+------+
  27. '*****************************************************************
  28. '*********************change log**********************************
  29. 'ver1.0 2016
  30. 'ver1.1 2018 removed channel and buart
  31. 'fixed endian
Sub dla zmiany wyświetlanego ekranu:
  1. $nocompile
  2. 'ver1.1 by  SP9DR 2016-2018
  3.  
  4. 'DWIN lcd screen number write sub
  5. Sub Lcd_page_wr(byval Page As Byte )
  6. '[EN]we using only one byte but have to send word  thas why &h00 is before page
  7. '[PL] uzywamy tylko jednego bajtu, standardowy rozmiar na zmienna to dwa bajty dlatego górby bajt ma wartosc &h00
  8. Printbin # Dwin , &H5A ; &HA5 ; &H04 ; Regwrite ; &H03 ; &H00 ; Page ;
  9. End Sub
  10. '*****************************************************************
  11. 'Const Header1 = &H5A LCd address
  12. 'Const Header2 = &HA5 LCd address
  13. '&h04 -Number of variable to send now only 4
  14. '&H03 -Adress in Dwin lcd memory for screen number
  15. 'Const Regwrite = &H80 register write
  16. 'Const Regread = &H81 register read
  17. 'Const Varwrite = &H82 variable write command
  18. '*****************************************************************
  19. '*********************change log**********************************
  20. 'ver1.0 2016 'intial version
  21. 'ver1.1 2018 removed channel and buart
Funkcja odczytu wartości z wybranej komórki pamięci wyświetlacza:
  1.  'ver1.0 by SP9DR 2018
  2.  
  3. '[en]DWIN lcd variable read (one word only)
  4. '[pl] dwin lcd odczyt zmiennych (tylko jedna zmienna word)
  5. $nocompile
  6. Function Dwin_lcd_get_var_value(byval Var_add As Word )as Word       'function
  7. Printbin #dwin , &H5A ; &HA5 ; &H04 ; &H83 ; Dwin_ad ; &H01 '[pl] wyslij zapytanie do LCD  [en] sent request to lcd
  8. '#dwin -[pl] numer portu com deklarowany w w prgramie glownym  [en] com port declared in mian file
  9. '&H5a -[pl] naglowek transmisi 1 [en] transmistion header 1
  10. '&Ha5 -[pl] naglowek transmisi 2 [en] transmistion header 2
  11. '&H04 -[pl] ile bajtow wysylamy  [en] number of bytes to send
  12. '&H83- [pl] komenda odczyt       [en] read commnad
  13. 'Dwin_ad- [pl] adres w pamieci wyswietlacza [en] memmory adress
  14. '&H01-[pl] ile zimmeych odczytaj (word) [en] numer of words to read
  15. '[pl] tu odczytujemy tyko jednego worda [en] we are reading only one word here
  16. While Ischarwaiting(#dwin) > 0                              '[pl] jak dlugo znaki czekaj odczytuj z bufora [en] while char in buffer read them
  17. Inputbin #dwin , Dwin_arr_rx(1) , 9                         '[pl]  odczytaj binarnie do tablicy zaczynajc od 1 komorki 9 nastepnych [en] read binary starting at index 1 and read next 9 bytes
  18. Wend                                                        'while end
  19. Swap Dwin_var_rx                                            '[pl] musimy zamienic miescami wartosc odczytana z maego endian na duzego [en] swap endian from small to big endian
  20.  
  21.  Dwin_lcd_get_var_value = Dwin_var_rx                       '[pl] przypisz wartosc do funkcji [en] asign value to function
  22. End Function                

Kolejne Suby i funkcję będę dodawał w miarę ich tworzenia.
Pikczu
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 09 gru 2018, 11:01 przez Pikczu, łącznie zmieniany 4 razy.
Pikczu
Posty: 389
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: [Bascom] DWIN LCD (HMI ) biblioteka

Post autor: Pikczu » 20 cze 2018, 21:38

Folder sub z plikami INC
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: [Bascom] DWIN LCD (HMI ) biblioteka

Post autor: Jacek » 20 cze 2018, 21:48

Witam - brawo Pan Paweł za wkład w rozwój Bascom'a.
pozdrawiam Jacek.
ODPOWIEDZ