Udostępniam bibliotekę do wyświetlaczy firmy 4D systems.
Przygotowana pod środowisko VISI Geni dla wyświetlaczy generacji 4 procesorem diablo 16 (najbardziej wypasione z oferty).
https://www.4dsystems.com.au/
W skrócie 4d systems to znany i doświadczony producent wyświetlaczy inteligentnych z Australii.
Do tworzenia projektu na wyświetlacz potrzebne nam jest oprogramowanie Workshop 4 IDE za opłatą otrzymamy wersje PRO która pozwala na tworzenie wielowarstwowych elementów graficznych.
Workshop pro 4 składa się z czterech środowisk. Designer
Designer pozwala na pisanie kodu 4DGL w jego naturalnej formie.
Visi
Visulane środowisko pozwalające na "przeciąganie i upuszczanie" grafiki z pełna kontrola nad generowanym kodem.
Visi Genie
Zaawansowane środowisko które pozwala na bardzo szybkie tworzenie projektu bez pisania grama kodu.
Serial
Środowisko przekształca wyświetlacz w "slave" bardzo bogata lista komend pozwala na pełna kontrole wyświetlacza przez port szeregowy.
Więcej o samym Workoshop 4 na stronie producenta:
https://www.4dsystems.com.au/product/4D_Workshop_4_IDE/
[media]https://www.youtube.com/watch?time_cont ... 1PCTq9H3Dw[/media]
Komunikacja w środowisku Visi Genie składa się z 11 komend i 37 obiektów.
Więcej o komunikacji mozemy znaleźc w linku:
http://www.4dsystems.com.au/productpage ... _R_2_0.pdf
Biblioteka w wersji 1.0 podzielona jest na sześć sub-rutyn i jedna funkcje.
(plik zawiera jedna nieużywaną subrutynę Push _fifo oraz funkcję pop_fifo do użycia w przyszłości)
Function Xor_this() -oblicza sumę kontrolna XOR
Sub 4d_uart_rx()' -do odczytu danych z UART
Sub 4d_read_obj_sub - do odczytu danych z obiektów.
'Sub Push_fifo -nieużywana.
Function Pop_fifo()-nieużywana.
Sub 4d_write_obj- do zapisu danych w obiektach.
Sub 4d_write_contrast- do zmiany kontrastu wyświetlacza
Sub 4d_write_str_old- wysyłanie stringów dla Bascoma w wersji 2.0.8.1
Sub 4d_write_str -wysyłanie stringów dla Bascoma w wersji for 2.0.8.2 i nowszej.
Wszytkie komentarze w języku angielskim,z racji tego iż biblioteka bedzie dostepna na forum 4D systems i MCS electronics.
W razie potrzeby pytajcie śmiało
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $nocompile
- '4D_system_Visi_Genie Library version 1.0
- 'By Pikczu 2019.05.14
- 'Pawel.labedz@gmail.com
- '-------------------------------------------------------------------------------
- ' Name to include: $include "Subs\4D_system_Visi_Genie_V1.0.inc"
- ' ^
- ' ^
- 'This is your folder with subs--^
- '-------------------------------------------------------------------------------
- 'This libry is dedicated for 4D systems LCD displays Visi Genie enviroment.
- 'Function Xor_this()
- 'Sub 4d_uart_rx()
- 'Sub 4d_read_obj_sub(object_id &H0 to &H25 , object index &H0 to &HFF )
- 'Sub Push_fifo -not in use
- 'Function Pop_fifo()- not in use
- 'Sub 4d_write_obj(object_id &H0 to &H25, object index &H0 to &HFF , object value &h00 to &HFFFF )
- 'Sub 4d_write_contrast(contrast value from 1 to 10 )
- 'Sub 4d_write_str_old(index hex value , "your text" ) for bascom version before 2.0.8.2
- 'Sub 4d_write_str(index hex value , "your text" ) for bascom version 2.0.8.2 and above
- '*******************************************************************************
- ' To do:
- 'Add sub for unicode string
- 'Add magic code sub
- '*******************************************************************************
- '*****************************Used in 4D systems TX subs************************
- Dim ACK_NACK_flag As Byte ' ACK byte flag is setup each time we expect the ack to come from the display
- ACK_NACK_flag = 0
- Dim 4d_wait_count as word 'Used inside each 4D sub rutine to count number of loops while waiting for the response from the lcd.
- Dim 4d_arr_tx(6)as Byte 'main array used to send the data
- Dim 4d_helpa As Word At 4d_arr_tx(4) Overlay 'array index 4 and for object values
- Dim 4d_string_tx_arr(39) As Byte ' Array for string
- Dim 4d_string_tx As String * 34 At 4d_string_tx_arr(1) + 3 Overlay '+3 add room for string length byte + command byte + string index
- '********************for future use ********************************************
- 'Const 4d_max_len = 32 'maximum 4D string length
- 'Const Ack_nack_max = 32 'max number of ack or NACK in the que
- 'Dim Ack_nack_cnt As Byte 'for feature use
- 'Dim 4d_frame As Byte 'for feature use
- 'Const 4d_max_frame = 16 'maximum number of message
- 'Dim Backup_tx As Byte 'for feature use
- '*******************************************************************************
- '*****************************Used in 4D systems RX subs************************
- Dim 4d_arr_rx(6) As Byte 'used for received data
- 'Dim 4d_var_rx As Word At 4d_arr_rx(4) Overlay 'overlay for rx
- 'Dim 4d_var_rx_tmp As Word
- 'Dim Obj_index As Byte '4d object index
- '*******************************************************************************
- '***************************Variables used in XOR CRC **************************
- Dim Xor_crc As Byte 'xor crc for 4d
- Xor_crc = 0
- '*******************************************************************************
- '*****************************Variables for objects indexes ********************
- Dim Dipswitch_idx As Byte '0
- Dim Knob_idx As Byte
- Dim Rockerswitch_idx As Byte
- Dim Rotaryswitch_idx As Byte
- Dim Slider_idx As Byte
- Dim Trackbar_idx As Byte
- Dim Winbutton_idx As Byte
- Dim Angularmeter_idx As Byte
- Dim Coolgauge_idx As Byte
- Dim Customdigits_idx As Byte
- Dim Form_idx As Byte 'Used To Set The Current Form
- Dim Gauge_idx As Byte '
- 'Dim Image_idx As Byte ' Displayed As Part Of Form , No Method To Alter
- Dim Keyboard_idx As Byte ' KEYBOARD Inputs Are Always Single Bytes And Are Unsolicited
- Dim Led_idx As Byte
- Dim Leddigits_idx As Byte
- Dim Meter_idx As Byte
- Dim Strings_idx As Byte
- Dim Thermometer_idx As Byte
- Dim Userled_idx As Byte
- Dim Video_idx As Byte
- 'Dim Statictext_idx As Byte ' Displayed As Part Of Form , No Method To Alter
- Dim S_ound_idx As Byte
- Dim T_imer_idx As Byte
- Dim Spectrum_idx As Byte
- Dim Scope_idx As Byte
- Dim Tank_idx As Byte
- Dim Userimages_idx As Byte
- Dim Pinoutput_idx As Byte
- Dim Pininput_idx As Byte
- Dim 4dbutton_idx As Byte
- Dim Anibutton_idx As Byte
- Dim Colorpicker_idx As Byte
- Dim Userbutton_idx As Byte
- Dim Magicobject_idx As Byte 'ONLY Available When Using Genie Pro
- Dim Smartgauge_idx As Byte 'ONLY Available When Using Genie Pro
- Dim Smartslider_idx As Byte 'ONLY Available When Using Genie Pro
- Dim Smartknob_idx As Byte 'Only Available When Using Genie Pro
- '*******************************************************************************
- '**********************Arrays for objects values *******************************
- Dim Dipswitch_val(2) As Byte '0
- Dim Knob_val(2) As Byte
- Dim Rockerswitch_val(2) As Byte
- Dim Rotaryswitch_val(2) As Byte
- Dim Slider_val(2) As Byte
- Dim Trackbar_val(2) As Byte
- Dim Winbutton_val(2) As Byte
- Dim Angularmeter_val(2) As Byte
- Dim Coolgauge_val(2) As Byte
- Dim Customdigits_val(2) As Byte
- Dim Form_val(2) As Byte 'Used To Set The Current Form
- Dim Gauge_val(2) As Byte '
- 'Dim Image_val(2) As Byte ' Displayed As Part Of Form , No Method To Alter
- Dim Keyboard_val(2) As Byte ' KEYBOARD Inputs Are Always Single Bytes And Are Unsolicited
- Dim Led_val(2) As Byte
- Dim Leddigits_val(2) As Byte
- Dim Meter_val(2) As Byte
- Dim Strings_val(2) As Byte
- Dim Thermometer_val(2) As Byte
- Dim Userled_val(2) As Byte
- Dim Video_val(2) As Byte
- 'Dim Statictext_val(2) As Byte ' Displayed As Part Of Form , No Method To Alter
- Dim S_ound_val(2) As Byte
- Dim T_imer_val(2) As Byte
- Dim Spectrum_val(2) As Byte
- Dim Scope_val(2) As Byte
- Dim Tank_val(2) As Byte
- Dim Userimages_val(2) As Byte
- Dim Pinoutput_val As Byte
- Dim Pininput_val As Byte
- Dim 4dbutton_val(2) As Byte
- Dim Anibutton_val(2) As Byte
- Dim Colorpicker_val(2) As Byte
- Dim Userbutton_val(2) As Byte
- Dim Magicobject_val(2) As Byte 'ONLY Available When Using Genie Pro
- Dim Smartgauge_val(2) As Byte 'ONLY Available When Using Genie Pro
- Dim Smartslider_val(2) As Byte 'ONLY Available When Using Genie Pro
- Dim Smartknob_val(2) As Byte 'Only Available When Using Genie Pro
- '*******************************************************************************
- '*********************Constants used in select case for RX **********************
- Const A_ck = &H06
- Const Nak = &H15
- '*******************************************************************************
- Const Dipswitch = &H00 '0
- Const Knob = &H01
- Const Rockerswitch = &H02
- Const Rotaryswitch = &H03
- Const Slider = &H04
- Const Trackbar = &H05
- Const Winbutton = &H06
- Const Angularmeter = &H07
- Const Coolgauge = &H08
- Const Customdigits = &H09
- Const Form = &H0A 'Used To Set The Current Form
- Const Gauge = &H0B '
- Const Image = &H0C ' Displayed As Part Of Form , No Method To Alter
- Const Keyboard = &H0D ' KEYBOARD Inputs Are Always Single Bytes And Are Unsolicited
- Const Led = &H0E
- Const Leddigits = &H0F
- Const Meter = &H10
- Const Strings = &H11
- Const Thermometer = &H12
- Const Userled = &H13
- Const Video = &H14
- Const Statictext = &H15 ' Displayed As Part Of Form , No Method To Alter
- Const S_ound = &H16
- Const T_imer = &H17
- Const Spectrum = &H18
- Const Scope = &H19
- Const Tank = &H1A
- Const Userimages = &H1B
- Const Pinoutput = &H1C
- Const Pininput = &H1D
- Const 4dbutton = &H1E
- Const Anibutton = &H1F
- Const Colorpicker = &H20
- Const Userbutton = &H21
- Const Magicobject = &H22 'ONLY Available When Using Genie Pro
- Const Smartgauge = &H23 'ONLY Available When Using Genie Pro
- Const Smartslider = &H24 'ONLY Available When Using Genie Pro
- Const Smartknob = &H25 'Only Available When Using Genie Pro
- '*******************************************************************************
- Const Read_obj = &H00 'TX command to get value
- Const Write_obj = &H01 'TX command to write object value
- Const Write_str = &H02 'TX command to send string
- Const Write_stru = &H03 'TX command to send string unicode
- Const Write_contrast = &H04 'TX command to set contrast
- Const Report_obj = &H05 'RX- response to read obj command
- Const Report_event = &H07 'RX response to event no request needed
- Const Write_magic_bytes = &H08 'TX command for magic bytes PRO licence required
- Const Write_magic_dbytes = &H09 'TX command for magic bytes PRO licence required
- Const Report_magic_event_bytes = &H0A 'RX response to magic bytes PRO licence required
- '*******************************************************************************
- '*******************************************************************************
- '**************************XOR function to calculate CRC************************
- Function Xor_this(ar()as Byte ) As Byte ' Function XOR
- Local Xor_ing As Byte 'temporary variable for xor value so could be a local
- Xor_ing = Ar(1) Xor Ar(2) 'xoring
- Xor_ing = Xor_ing Xor Ar(3)
- Xor_ing = Xor_ing Xor Ar(4)
- Xor_ing = Xor_ing Xor Ar(5)
- Xor_this = Xor_ing 'final result assignment
- End Function
- '*******************************************************************************
- '*************************SUB for checking the UART ****************************
- Sub 4d_uart_rx()
- '*******************************************************************************
- 'Call this sub routine from main loop to check for events.
- 'Syntax : Call 4d_uart_rx()
- 'In adition this sub is called from: 4d_read_obj_sub, 4d_write_obj, 4d_write_contrast and 4d_write_str
- 'For more info refer to Visi Genie reference manual page 10 section 3.1.3.6 &7
- 'Global variable will be updated.
- '*******************************************************************************
- While Ischarwaiting(#4) <> 0
- Inputbin #lcd_4d , 4d_arr_rx(1) , 1
- 'print #debug_port , "received= " ; 4d_arr_rx(1)
- Select Case 4d_arr_rx(1) 'command
- '**********************************************************************
- Case Report_obj: '&H05 report object command
- Inputbin #lcd_4d , 4d_arr_rx(2) , 5 'get next 5 bytes from the buffer
- Xor_crc = Xor_this(4d_arr_rx(1)) ' check the crc
- If 4d_arr_rx(6) = Xor_crc Then 'if crc ok then check what came
- 'CRC ok then we can clear the flag
- ACK_NACK_flag = 0 'reset ACK flag
- Select Case 4d_arr_rx(2) 'object ID
- Case Dipswitch: '0
- Dipswitch_idx = 4d_arr_rx(3)
- Dipswitch_val(1) = 4d_arr_rx(4)
- Dipswitch_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Dipswitch "
- Debug "Dipswitch "
- Case Knob: '1
- Knob_idx = 4d_arr_rx(3)
- Knob_val(1) = 4d_arr_rx(4)
- Knob_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Knob "
- Debug "Knob "
- Case Rockerswitch: '2
- Rockerswitch_idx = 4d_arr_rx(3)
- Rockerswitch_val(1) = 4d_arr_rx(4)
- Rockerswitch_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Rockerswitch "
- Debug "Rockerswitch "
- Case Rotaryswitch: '3
- Rotaryswitch_idx = 4d_arr_rx(3)
- Rotaryswitch_val(1) = 4d_arr_rx(4)
- Rotaryswitch_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Rotaryswitch "
- Debug "Rotaryswitch "
- Case Slider: '4
- Slider_idx = 4d_arr_rx(3)
- Slider_val(1) = 4d_arr_rx(4)
- Slider_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Slider "
- Debug "Slider "
- Case Trackbar: '5
- Trackbar_idx = 4d_arr_rx(3)
- Trackbar_val(1) = 4d_arr_rx(4)
- Trackbar_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Trackbar "
- Debug "Trackbar "
- Case Winbutton: '6
- Winbutton_idx = 4d_arr_rx(3)
- Winbutton_val(1) = 4d_arr_rx(4)
- Winbutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Winbutton "
- Debug "Winbutton "
- Case Angularmeter: '7
- Angularmeter_idx = 4d_arr_rx(3)
- Angularmeter_val(1) = 4d_arr_rx(4)
- Angularmeter_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Angularmeter "
- Debug "Angularmeter "
- Case Coolgauge: '8
- Coolgauge_idx = 4d_arr_rx(3)
- Coolgauge_val(1) = 4d_arr_rx(4)
- Coolgauge_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Coolgauge "
- Debug "Coolgauge "
- Case Customdigits: '9
- Customdigits_idx = 4d_arr_rx(3)
- Customdigits_val(1) = 4d_arr_rx(4)
- Customdigits_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Customdigits "
- Debug "Customdigits "
- Case Form: '10
- Form_idx = 4d_arr_rx(3)
- Form_val(1) = 4d_arr_rx(4)
- Form_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Form "
- Debug "Form "
- Case Gauge: '11
- Gauge_idx = 4d_arr_rx(3)
- Gauge_val(1) = 4d_arr_rx(4)
- Gauge_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Gauge "
- Debug "Gauge "
- Case Image: '12
- 'Image_idx = 4d_arr_rx(3)
- 'Image_val(1) = 4d_arr_rx(4)
- 'Image_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Image "
- Debug "Image "
- Case Keyboard: '13
- Keyboard_idx = 4d_arr_rx(3)
- Keyboard_val(1) = 4d_arr_rx(4)
- Keyboard_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Keyboard "
- Debug "Keyboard "
- Case Led: '14
- Led_idx = 4d_arr_rx(3)
- Led_val(1) = 4d_arr_rx(4)
- Led_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Led "
- Debug "Led "
- Case Leddigits: '15
- Leddigits_idx = 4d_arr_rx(3)
- Leddigits_val(1) = 4d_arr_rx(4)
- Leddigits_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Leddigits "
- Debug "Leddigits "
- Case Meter: '16
- Meter_idx = 4d_arr_rx(3)
- Meter_val(1) = 4d_arr_rx(4)
- Meter_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Meter "
- Debug "Meter "
- Case Strings: '17
- Strings_idx = 4d_arr_rx(3)
- Strings_val(1) = 4d_arr_rx(4)
- Strings_val(2) = 4d_arr_rx(5)
- Print #debug_port , "Strings "
- Debug "Strings "
- Case Thermometer: '18
- Thermometer_idx = 4d_arr_rx(3)
- Thermometer_val(1) = 4d_arr_rx(4)
- Thermometer_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Thermometer "
- Debug "Thermometer "
- Case Userled: '19
- Userled_idx = 4d_arr_rx(3)
- Userled_val(1) = 4d_arr_rx(4)
- Userled_val(2) = 4d_arr_rx(5)
- Print #debug_port , "Userled "
- Debug "Userled "
- Case Video: '20
- Video_idx = 4d_arr_rx(3)
- Video_val(1) = 4d_arr_rx(4)
- Video_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Video "
- Debug "Video "
- Case Statictext: '21
- 'Statictext_idx = 4d_arr_rx(3)
- 'Statictext_val(1) = 4d_arr_rx(4)
- 'Statictext_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Statictext "
- Debug "Statictext "
- Case S_ound: '22
- S_ound_idx = 4d_arr_rx(3)
- S_ound_val(1) = 4d_arr_rx(4)
- S_ound_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "S_ound "
- Debug "S_ound "
- Case T_imer: '23
- T_imer_idx = 4d_arr_rx(3)
- T_imer_val(1) = 4d_arr_rx(4)
- T_imer_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "T_imer "
- Debug "T_imer "
- Case Spectrum: '24
- Spectrum_idx = 4d_arr_rx(3)
- Spectrum_val(1) = 4d_arr_rx(4)
- Spectrum_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Spectrum "
- Debug "Spectrum "
- Case Scope: '25
- Scope_idx = 4d_arr_rx(3)
- Scope_val(1) = 4d_arr_rx(4)
- Scope_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Scope "
- Debug "Scope "
- Case Tank: '26
- Tank_idx = 4d_arr_rx(3)
- Tank_val(1) = 4d_arr_rx(4)
- Tank_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Tank "
- Debug "Tank "
- Case Userimages: '27
- Userimages_idx = 4d_arr_rx(3)
- Userimages_val(1) = 4d_arr_rx(4)
- Userimages_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Userimages "
- Debug "Userimages "
- Case Pinoutput: '28
- Pinoutput_idx = 4d_arr_rx(3)
- 'Pinoutput_val(1) = 4d_arr_rx(4)
- Pinoutput_val = 4d_arr_rx(5)
- 'Print #debug_port , "Pinoutput "
- Debug "Pinoutput "
- Case Pininput: '29
- Pininput_idx = 4d_arr_rx(3)
- 'Pininput_val(1) = 4d_arr_rx(4)
- Pininput_val = 4d_arr_rx(5)
- 'Print #debug_port , "Pininput "
- Debug "Pininput "
- Case 4dbutton: '30
- 4dbutton_idx = 4d_arr_rx(3)
- 4dbutton_val(1) = 4d_arr_rx(4)
- 4dbutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "4dbutton "
- Debug "4dbutton "
- Case Anibutton: '31
- Anibutton_idx = 4d_arr_rx(3)
- Anibutton_val(1) = 4d_arr_rx(4)
- Anibutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Anibutton "
- Debug "Anibutton "
- Case Colorpicker: '32
- Colorpicker_idx = 4d_arr_rx(3)
- Colorpicker_val(1) = 4d_arr_rx(4)
- Colorpicker_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Colorpicker "
- Debug "Colorpicker "
- Case Userbutton: '33
- Userbutton_idx = 4d_arr_rx(3)
- Userbutton_val(1) = 4d_arr_rx(4)
- Userbutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Userbutton "
- Debug "Userbutton "
- Case Magicobject: '34
- Magicobject_idx = 4d_arr_rx(3)
- Magicobject_val(1) = 4d_arr_rx(4)
- Magicobject_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Magicobject "
- Debug "Magicobject "
- Case Smartgauge: '35
- Smartgauge_idx = 4d_arr_rx(3)
- Smartgauge_val(1) = 4d_arr_rx(4)
- Smartgauge_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Smartgauge "
- Debug "Smartgauge "
- Case Smartslider: '36
- Smartslider_idx = 4d_arr_rx(3)
- Smartslider_val(1) = 4d_arr_rx(4)
- Smartslider_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Smartslider "
- Debug "Smartslider "
- Case Smartknob: '37
- Smartknob_idx = 4d_arr_rx(3)
- Smartknob_val(1) = 4d_arr_rx(4)
- Smartknob_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Smartknob "
- Debug "Smartknob "
- Case Else:
- 'This should never happen as CRC being check before select case
- 'But lets keep this here just in case.
- 'Print #debug_port , "Event report wrong ID: " ; 4d_arr_rx(3)
- Debug "Event report wrong ID: " ; 4d_arr_rx(3)
- 'Clear Serialin4
- 'Print #debug_port , "S_pace: " ; S_pace
- 'Print #debug_port , "frame error"
- End Select
- Else
- Printbin #lcd_4d , &H15 'send NACK message to the display
- 'Print #debug_port , "Read object CRC error !"
- Debug "Read object CRC error !"
- End If
- '**********************************************************************
- Case A_ck: '&H06 ACK command
- ACK_NACK_flag = 0 'reset ack flag
- 'Print #debug_port , "ACK" 'print ACK message to debug port
- Debug "ACK" 'print ACK message to debug port
- '**********************************************************************
- Case Report_event: '&H07
- Inputbin #4 , 4d_arr_rx(2) , 5 'get next 5 get next 5 bytes from the buffer
- Xor_crc = Xor_this(4d_arr_rx(1)) ' check the crc
- If 4d_arr_rx(6) = Xor_crc Then 'if crc ok then check what came
- Select Case 4d_arr_rx(2) 'object ID
- Case Dipswitch: '0
- Dipswitch_idx = 4d_arr_rx(3)
- Dipswitch_val(1) = 4d_arr_rx(4)
- Dipswitch_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Dipswitch "
- Debug "Dipswitch "
- Case Knob: '1
- Knob_idx = 4d_arr_rx(3)
- Knob_val(1) = 4d_arr_rx(4)
- Knob_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Knob "
- Debug "Knob "
- Case Rockerswitch: '2
- Rockerswitch_idx = 4d_arr_rx(3)
- Rockerswitch_val(1) = 4d_arr_rx(4)
- Rockerswitch_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Rockerswitch "
- Debug "Rockerswitch "
- Case Rotaryswitch: '3
- Rotaryswitch_idx = 4d_arr_rx(3)
- Rotaryswitch_val(1) = 4d_arr_rx(4)
- Rotaryswitch_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Rotaryswitch "
- Debug "Rotaryswitch "
- Case Slider: '4
- Slider_idx = 4d_arr_rx(3)
- Slider_val(1) = 4d_arr_rx(4)
- Slider_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Slider "
- Debug "Slider "
- Case Trackbar: '5
- Trackbar_idx = 4d_arr_rx(3)
- Trackbar_val(1) = 4d_arr_rx(4)
- Trackbar_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Trackbar "
- Debug "Trackbar "
- Case Winbutton: '6
- Winbutton_idx = 4d_arr_rx(3)
- Winbutton_val(1) = 4d_arr_rx(4)
- Winbutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Winbutton "
- Debug "Winbutton "
- Case Angularmeter: '7
- Angularmeter_idx = 4d_arr_rx(3)
- Angularmeter_val(1) = 4d_arr_rx(4)
- Angularmeter_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Angularmeter "
- Debug "Angularmeter "
- Case Coolgauge: '8
- Coolgauge_idx = 4d_arr_rx(3)
- Coolgauge_val(1) = 4d_arr_rx(4)
- Coolgauge_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Coolgauge "
- Debug "Coolgauge "
- Case Customdigits: '9
- Customdigits_idx = 4d_arr_rx(3)
- Customdigits_val(1) = 4d_arr_rx(4)
- Customdigits_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Customdigits "
- Debug "Customdigits "
- Case Form: '10
- Form_idx = 4d_arr_rx(3)
- Form_val(1) = 4d_arr_rx(4)
- Form_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Form "
- Debug "Form "
- Case Gauge: '11
- Gauge_idx = 4d_arr_rx(3)
- Gauge_val(1) = 4d_arr_rx(4)
- Gauge_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Gauge "
- Debug "Gauge "
- Case Image: '12
- 'Image_idx = 4d_arr_rx(3)
- 'Image_val(1) = 4d_arr_rx(4)
- 'Image_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Image "
- Debug "Image "
- Case Keyboard: '13
- Keyboard_idx = 4d_arr_rx(3)
- Keyboard_val(1) = 4d_arr_rx(4)
- Keyboard_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Keyboard "
- Debug "Keyboard "
- Case Led: '14
- Led_idx = 4d_arr_rx(3)
- Led_val(1) = 4d_arr_rx(4)
- Led_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Led "
- Debug "Led "
- Case Leddigits: '15
- Leddigits_idx = 4d_arr_rx(3)
- Leddigits_val(1) = 4d_arr_rx(4)
- Leddigits_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Leddigits "
- Debug "Leddigits "
- Case Meter: '16
- Meter_idx = 4d_arr_rx(3)
- Meter_val(1) = 4d_arr_rx(4)
- Meter_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Meter "
- Debug "Meter "
- Case Strings: '17
- Strings_idx = 4d_arr_rx(3)
- Strings_val(1) = 4d_arr_rx(4)
- Strings_val(2) = 4d_arr_rx(5)
- Print #debug_port , "Strings "
- Debug "Strings "
- Case Thermometer: '18
- Thermometer_idx = 4d_arr_rx(3)
- Thermometer_val(1) = 4d_arr_rx(4)
- Thermometer_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Thermometer "
- Debug "Thermometer "
- Case Userled: '19
- Userled_idx = 4d_arr_rx(3)
- Userled_val(1) = 4d_arr_rx(4)
- Userled_val(2) = 4d_arr_rx(5)
- Print #debug_port , "Userled "
- Debug "Userled "
- Case Video: '20
- Video_idx = 4d_arr_rx(3)
- Video_val(1) = 4d_arr_rx(4)
- Video_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Video "
- Debug "Video "
- Case Statictext: '21
- 'Statictext_idx = 4d_arr_rx(3)
- 'Statictext_val(1) = 4d_arr_rx(4)
- 'Statictext_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Statictext "
- Debug "Statictext "
- Case S_ound: '22
- S_ound_idx = 4d_arr_rx(3)
- S_ound_val(1) = 4d_arr_rx(4)
- S_ound_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "S_ound "
- Debug "S_ound "
- Case T_imer: '23
- T_imer_idx = 4d_arr_rx(3)
- T_imer_val(1) = 4d_arr_rx(4)
- T_imer_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "T_imer "
- Debug "T_imer "
- Case Spectrum: '24
- Spectrum_idx = 4d_arr_rx(3)
- Spectrum_val(1) = 4d_arr_rx(4)
- Spectrum_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Spectrum "
- Debug "Spectrum "
- Case Scope: '25
- Scope_idx = 4d_arr_rx(3)
- Scope_val(1) = 4d_arr_rx(4)
- Scope_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Scope "
- Debug "Scope "
- Case Tank: '26
- Tank_idx = 4d_arr_rx(3)
- Tank_val(1) = 4d_arr_rx(4)
- Tank_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Tank "
- Debug "Tank "
- Case Userimages: '27
- Userimages_idx = 4d_arr_rx(3)
- Userimages_val(1) = 4d_arr_rx(4)
- Userimages_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Userimages "
- Debug "Userimages "
- Case Pinoutput: '28
- Pinoutput_idx = 4d_arr_rx(3)
- 'Pinoutput_val(1) = 4d_arr_rx(4)
- Pinoutput_val = 4d_arr_rx(5)
- 'Print #debug_port , "Pinoutput "
- Debug "Pinoutput "
- Case Pininput: '29
- Pininput_idx = 4d_arr_rx(3)
- 'Pininput_val(1) = 4d_arr_rx(4)
- Pininput_val = 4d_arr_rx(5)
- 'Print #debug_port , "Pininput "
- Debug "Pininput "
- Case 4dbutton: '30
- 4dbutton_idx = 4d_arr_rx(3)
- 4dbutton_val(1) = 4d_arr_rx(4)
- 4dbutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "4dbutton "
- Debug "4dbutton "
- Case Anibutton: '31
- Anibutton_idx = 4d_arr_rx(3)
- Anibutton_val(1) = 4d_arr_rx(4)
- Anibutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Anibutton "
- Debug "Anibutton "
- Case Colorpicker: '32
- Colorpicker_idx = 4d_arr_rx(3)
- Colorpicker_val(1) = 4d_arr_rx(4)
- Colorpicker_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Colorpicker "
- Debug "Colorpicker "
- Case Userbutton: '33
- Userbutton_idx = 4d_arr_rx(3)
- Userbutton_val(1) = 4d_arr_rx(4)
- Userbutton_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Userbutton "
- Debug "Userbutton "
- Case Magicobject: '34
- Magicobject_idx = 4d_arr_rx(3)
- Magicobject_val(1) = 4d_arr_rx(4)
- Magicobject_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Magicobject "
- Debug "Magicobject "
- Case Smartgauge: '35
- Smartgauge_idx = 4d_arr_rx(3)
- Smartgauge_val(1) = 4d_arr_rx(4)
- Smartgauge_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Smartgauge "
- Debug "Smartgauge "
- Case Smartslider: '36
- Smartslider_idx = 4d_arr_rx(3)
- Smartslider_val(1) = 4d_arr_rx(4)
- Smartslider_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Smartslider "
- Debug "Smartslider "
- Case Smartknob: '37
- Smartknob_idx = 4d_arr_rx(3)
- Smartknob_val(1) = 4d_arr_rx(4)
- Smartknob_val(2) = 4d_arr_rx(5)
- 'Print #debug_port , "Smartknob "
- Debug "Smartknob "
- Case Else:
- 'Print #debug_port , "Event report wrong ID: " ; 4d_arr_rx(3)
- Debug "Event report wrong ID: " ; 4d_arr_rx(3)
- Clear Serialin4
- 'Print #debug_port , "S_pace" ; S_pace
- Debug "S_pace" ; S_pace
- 'Print #debug_port , "frame error"
- Debug "frame error"
- End Select
- Else
- Printbin #lcd_4d , &H15 'send NAK to LCD
- 'Print #debug_port , "Event CRC error"
- debug "Event CRC error"
- End If
- '**********************************************************************
- Case Nak:
- 'Print #debug_port ,
- 'Print #debug_port , "NACK" '&h15 NAK command
- debug "NACK" '&h15 NAK command
- ACK_NACK_flag.1 = 1 'reset ACK/NACK flag
- 'Clear Serialin4
- '**********************************************************************
- Case Else:
- 'Print #debug_port , "Error in Code =: " ; 4d_arr_rx(1)
- debug "Error in Code =: " ; 4d_arr_rx(1)
- Clear Serialin4
- 'Print #debug_port , "frame error"
- debug "frame error"
- End Select
- Wend
- End Sub
- '*******************************************************************************
- '###############################################################################
- '*************************SUB for checking the UART ****************************
- 'This should be a function not a sub but waiting for the function result is taking way to long.
- 'call this sub to get values of the object from the display
- Sub 4d_read_obj(byval 4d_object_id As Byte , Byval 4d_object_index As Byte )
- '*******************************************************************************
- 'Syntax: Call 4d_read_obj_sub(object_id &H0 to &H25, object index &H0 to &HFF )
- 'For more info refer to Visi Genie reference manual page 7 section 3.1.3.1
- 'Global variable will be updated.
- '*******************************************************************************
- 'this should be a function
- 4d_arr_tx(1) = Write_obj '&h00 constant
- 4d_arr_tx(2) = 4d_object_id 'object ID as per constants
- 4d_arr_tx(3) = 4d_object_index 'object index
- Xor_crc = 4d_arr_tx(1) Xor 4d_arr_tx(2) 'calculate the xor check sum
- Xor_crc = Xor_crc Xor 4d_arr_tx(3)
- 4d_arr_tx(4) = Xor_crc
- Printbin #lcd_4d , 4d_arr_tx(1) ; 4 'print binary the final result
- ACK_NACK_flag.0 = 1 'any response starting with 05 should clear this flag.
- While ACK_NACK_flag <> 0 'while waiting for response from the display
- Incr 4d_wait_count 'just to indicate how long will this take
- Call 4d_uart_rx 'check the Uart
- if ACK_NACK_flag.0 = 0 and ACK_NACK_flag.1 = 1 then
- Printbin #lcd_4d , 4d_arr_tx(1) ; 4 'repeat previous transmission
- ACK_NACK_flag.0 = 1 'any response starting with 05 shoudl clear this flag.
- ACK_NACK_flag.1 = 0
- end if 'this flag is clear by NACK command therefore
- Wend
- 'Print #debug_port , "Waiting for the response counter: " ; 4d_wait_count
- debug "Waiting for the response counter: " ; 4d_wait_count
- 4d_wait_count = 0
- 'The response from the display should be Report_obj: &h05
- End Sub
- '******************************************************************************
- '*******************************************************************************
- Dim fifo_head As Byte 'index plus data
- Dim fifo_tail As Byte 'index plus data
- fifo_head = 0
- fifo_tail = 0
- Dim Fifo_tmp(6) As Byte
- 'Const Fifosize = 16
- Dim Fifo_buffer(6 , 16) As Byte ' 16 arrays, 6 bytes long
- 'Dim Fifo_idx As Byte
- 'Dim Copy_val As Byte
- 'Copy_val = 1
- '*******************************************************************************
- '*******************************************************************************
- '###############################################################################
- Sub Push_fifo(ar_pushf() As Byte )
- 'Base on ollopa code from MCs forum:
- 'https : / / www.mcselec.com / index2.phpPrint option = com_forum&Itemid = 59&page = viewtopic&t = 7941&highlight = fifo
- 'Thank you ollopa for sharing the idea !
- Local Copy_val_a As Byte
- Local Oldhead As Byte
- Oldhead = fifo_head '
- Incr fifo_head
- If fifo_head > Fifosize Then fifo_head = 1
- If fifo_head = fifo_tail Then
- fifo_head = Oldhead
- Else
- Copy_val_a = Memcopy(ar_pushf(1) , Fifo_buffer(1 , fifo_head ) , 6 , 3)
- Print #debug_port , "push mem position= " ; Hex(varptr(fifo_buffer(1 , fifo_head )))
- End If
- End Sub
- Function Pop_fifo() As Byte
- 'Base on ollopa code from MCs forum:
- 'https : / / www.mcselec.com / index2.phpPrint option = com_forum&Itemid = 59&page = viewtopic&t = 7941&highlight = fifo
- 'Thank you ollopa for sharing the idea !
- Local Copy_val_b As Byte
- Incr Tail
- Copy_val_b = Memcopy(fifo_buffer(1 , fifo_tail ) , Fifo_tmp(1) , 6 , 3)
- Print #debug_port , "pop mem position= " ; Hex(varptr(fifo_buffer(1 , fifo_tail )))
- Pop_fifo(1) = Fifo_tmp(1)
- End Function
- '*******************************************************************************
- '###############################################################################
- Sub 4d_write_obj(byval 4d_object_id As Byte , Byval 4d_object_index As Byte , Byval 4d_obj_value As Word )
- 'Dim 4d_helpa As Word At 4d_arr_tx(4) Overlay 'copy for clarity
- '*******************************************************************************
- 'Syntax: Call 4d_write_obj(object_id &H0 to &H25, object index &H0 to &HFF , object value &h00 to &HFFFF )
- 'For more info refer to Visi Genie reference manual page 8 section 3.1.3.2
- '*******************************************************************************
- Swap 4d_obj_value 'little endian to big endian
- 4d_helpa = 4d_obj_value 'assign to overlaid variable
- 4d_arr_tx(1) = Write_obj '&h01 constant
- 4d_arr_tx(2) = 4d_object_id 'object ID as per constants
- 4d_arr_tx(3) = 4d_object_index 'object index
- '4d_arr_tx(4) for clarity as this is overlay so the values are already there in global array
- '4d_arr_tx(5) for clarity as this is overlay so the values are already there in global array
- Xor_crc = 4d_arr_tx(1) Xor 4d_arr_tx(2) 'calculate the xor check sum
- Xor_crc = Xor_crc Xor 4d_arr_tx(3)
- Xor_crc = Xor_crc Xor 4d_arr_tx(4)
- 4d_arr_tx(6) = Xor_crc Xor 4d_arr_tx(5)
- Printbin #lcd_4d , 4d_arr_tx(1) ; 6 'print binary the final result
- 'Printbin #debug_port , 4d_arr_tx(1) ; 6 'print binary the final result to debug port
- ACK_NACK_flag.0 = 1 'ACK flag set to busy
- While ACK_NACK_flag <> 0 'while waiting for response from the display
- Incr 4d_wait_count 'just to indicate how long will this take
- Call 4d_uart_rx 'check the Uart
- if ACK_NACK_flag.1 = 1 then 'NAK received from the display
- Printbin #lcd_4d , 4d_arr_tx(1) ; 4 ' repeat previous transmission
- ACK_NACK_flag.1 = 0 'Clear NACK flag and check again for ACK or NACK
- end if
- Wend
- 'Print #debug_port , "Waiting for the response counter: " ; 4d_wait_count
- Debug "Waiting for the response counter: " ; 4d_wait_count
- 4d_wait_count = 0
- End Sub
- '*******************************************************************************
- '###############################################################################
- Sub 4d_write_contrast(byval 4d_contrast_val As Byte)
- '*******************************************************************************
- 'Syntax: Call 4d_write_contrast(contrast value form 1 to 10 )
- 'For more info refer to Visi Genie reference manual page 9 section 3.1.3.5
- '*******************************************************************************
- If 4d_contrast_val => 10 Then
- 4d_contrast_val = 10
- End If
- Dim 4d_contrast_tx(3) As Byte
- 4d_contrast_tx(1) = Write_contrast
- 4d_contrast_tx(2) = 4d_contrast_val
- 4d_contrast_tx(3) = Write_contrast Xor 4d_contrast_val
- Printbin #lcd_4d , 4d_contrast_tx(1) ; 3
- ACK_NACK_flag.0 = 1 'ACK flag set to busy
- While ACK_NACK_flag <> 0 'while waiting for response from the display
- Incr 4d_wait_count 'just to indicate how long will this take
- Call 4d_uart_rx 'check the Uart
- if ACK_NACK_flag.1 = 1 then 'NAK received from the display
- Printbin #lcd_4d , 4d_arr_tx(1) ; 4 ' repeat previous transmission
- ACK_NACK_flag.1 = 0 'Clear NACK flag and check again for ACK or NACK
- end if
- Wend
- 'Print #debug_port , "Waiting for the response counter: " ; 4d_wait_count
- Debug "Waiting for the response counter: " ; 4d_wait_count
- 4d_wait_count = 0
- End Sub
- Sub 4d_write_str_old(byval 4d_str_indx As Byte , Byval 4d_string_tmp As String )
- '*******************************************************************************
- 'Syntax: Call 4d_write_str_old(index hex value , "your text" )
- 'The body of the command is:
- 'comand_code+ string_index+ string_length + string + xorcrc
- 'For more info refer to Visi Genie reference manual page 8 section 3.1.3.3
- '*******************************************************************************
- Local Index_help_a As Byte 'used to calculate the length of the string
- Dim Tot_command_len As Byte 'total command length
- Tot_command_len = Len(4d_string_tmp) + 4 'total = string + string length byte + command byte + string index byte used for calculating crc
- Print #debug_port , "total command length =" ; Tot_command_len
- 4d_string_tx = 4d_string_tmp 'copy the string in to variable overlaid at array
- 4d_string_tx_arr(1) = Write_str '&h02 write string command
- 4d_string_tx_arr(2) = 4d_str_indx 'index of the string
- 4d_string_tx_arr(3) = Len(4d_string_tmp) 'length of the original string
- For Index_help_a = 1 To Tot_command_len -1 'we need to xor this and assign at the end
- 'the minus (-)1 skip xor of the null termination
- 4d_string_tx_arr(tot_command_len) = 4d_string_tx_arr(tot_command_len) Xor 4d_string_tx_arr(index_help_a)
- Next Index_help_a
- Index_help_a = 0
- Select Case Tot_command_len ' total command length
- Case 5:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 5 'code +string index+ string length + 1 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 5 'code +string index+ string length + 1 char + crc
- Case 6:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 6 'code +string index+ string length + 2 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 6 'code +string index+ string length + 2 char + crc
- Case 7:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 7 'code +string index+ string length + 3 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 7 'code +string index+ string length + 3 char + crc
- Case 8:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 8 'code +string index+ string length + 4 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 8 'code +string index+ string length + 4 char + crc
- Case 9:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 9 'code +string index+ string length + 5 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) , 9 'code +string index+ string length + 5 char + crc
- Case 10:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 10 'code +string index+ string length + 6 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 10 'code +string index+ string length + 6 char + crc
- Case 11:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 11 'code +string index+ string length + 7 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 11 'code +string index+ string length + 7 char + crc
- Case 12:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 12 'code +string index+ string length + 8 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 12 'code +string index+ string length + 8 char + crc
- Case 13:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 13 'code +string index+ string length + 9 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 13 'code +string index+ string length + 9 char + crc
- Case 14:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 14 'code +string index+ string length + 10 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 14 'code +string index+ string length + 10 char + crc
- Case 15:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 15 'code +string index+ string length + 11 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 15 'code +string index+ string length + 11 char + crc
- Case 16:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 16 'code +string index+ string length + 12 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 16 'code +string index+ string length + 12 char + crc
- Case 17:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 17 'code +string index+ string length + 13 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 17 'code +string index+ string length + 13 char + crc
- Case 18:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 18 'code +string index+ string length + 14 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 18 'code +string index+ string length + 14 char + crc
- Case 19:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 19 'code +string index+ string length + 15 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 19 'code +string index+ string length + 15 char + crc
- Case 20:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 20 'code +string index+ string length + 16 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 20 'code +string index+ string length + 16 char + crc
- Case 21:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 21 'code +string index+ string length + 17 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 21 'code +string index+ string length + 17 char + crc
- Case 22:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 22 'code +string index+ string length + 18 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 22 'code +string index+ string length + 18 char + crc
- Case 23:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 23 'code +string index+ string length + 19 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 23 'code +string index+ string length + 19 char + crc
- Case 24:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 24 'code +string index+ string length + 20 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 24 'code +string index+ string length + 20 char + crc
- Case 25:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 25 'code +string index+ string length + 21 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 25 'code +string index+ string length + 21 char + crc
- Case 26:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 26 'code +string index+ string length + 22 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 26 'code +string index+ string length + 22 char + crc
- Case 27:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 27 'code +string index+ string length + 23 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 27 'code +string index+ string length + 23 char + crc
- Case 28:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 28 'code +string index+ string length + 24 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 28 'code +string index+ string length + 24 char + crc
- Case 29:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 29 'code +string index+ string length + 25 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 29 'code +string index+ string length + 25 char + crc
- Case 30:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 30 'code +string index+ string length + 26 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 30 'code +string index+ string length + 26 char + crc
- Case 31:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 31 'code +string index+ string length + 27 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 31 'code +string index+ string length + 27 char + crc
- Case 32:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 32 'code +string index+ string length + 28 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 32 'code +string index+ string length + 28 char + crc
- Case 33:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 33 'code +string index+ string length + 29 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 33 'code +string index+ string length + 29 char + crc
- Case 34:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 34 'code +string index+ string length + 30 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 34 'code +string index+ string length + 30 char + crc
- Case 35:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 35 'code +string index+ string length + 31 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 35 'code +string index+ string length + 31 char + crc
- Case 36:
- Printbin #debug_port , 4d_string_tx_arr(1) ; 36 'code +string index+ string length + 32 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) ; 36 'code +string index+ string length + 32 char + crc
- End Select
- ACK_NACK_flag.0 = 1 'ACK flag set to busy
- While ACK_NACK_flag <> 0 'while waiting for response from the display
- Incr 4d_wait_count 'just to idicate how long will this take
- Call 4d_uart_rx 'check the Uart
- if ACK_NACK_flag.1 = 1 then 'NAK received form the display
- Printbin #lcd_4d , 4d_arr_tx(1) ; 4 ' reapet previous transmision
- ACK_NACK_flag.1 = 0 'Clear NACK flag and check again for ACK or NACK
- end if
- Wend
- 'Printbin #lcd_4d , 4d_string_tx_arr(1) , Tot_command_len 'code +string index+ string length + 1 char + crc
- Debug 4d_string_tx_arr(1) , Tot_command_len 'code +string index+ string length + 1 char + crc
- 4d_wait_count = 0
- End Sub
- Sub 4d_write_str(byval 4d_str_indx As Byte , Byval 4d_string_tmp As String )
- '*******************************************************************************
- 'Syntax: Call 4d_write_str(index hex value , "your text" )
- 'The body of the command is:
- 'comand_code + string_index+ string_length + string + xorcrc
- 'For more info refer to Visi Genie reference manual page 8 section 3.1.3.3
- '*******************************************************************************
- Local Index_help_a As Byte 'used to calculate the lengt of the string
- Dim Tot_command_len As Byte 'total command length
- Tot_command_len = Len(4d_string_tmp) + 4 'total = string + string length byte + command byte + string index byte used for calculating crc
- Print #debug_port , "total command length =" ; Tot_command_len
- 4d_string_tx = 4d_string_tmp 'copy the string in to variable overlaid at array
- 4d_string_tx_arr(1) = Write_str '&h02 write string command
- 4d_string_tx_arr(2) = 4d_str_indx 'index of the string
- 4d_string_tx_arr(3) = Len(4d_string_tmp) 'length of the original string
- For Index_help_a = 1 To Tot_command_len -1 'we need to xor this and assign at the end
- 'the minus (-)1 skip xor of the null termination
- 4d_string_tx_arr(tot_command_len) = 4d_string_tx_arr(tot_command_len) Xor 4d_string_tx_arr(index_help_a)
- Next Index_help_a
- Index_help_a = 0
- Printbin #debug_port , 4d_string_tx_arr(1) , Tot_command_len 'code +string index+ string length + 1 char + crc
- Printbin #lcd_4d , 4d_string_tx_arr(1) , Tot_command_len 'code +string index+ string length + 1 char + crc
- ACK_NACK_flag.0 = 1 'ACK flag set to busy
- While ACK_NACK_flag <> 0 'while waiting for response from the display
- Incr 4d_wait_count 'just to indicate how long will this take
- Call 4d_uart_rx 'check the Uart
- if ACK_NACK_flag.1 = 1 then 'NAK received from the display
- Printbin #lcd_4d , 4d_arr_tx(1) ; 4 ' repeat previous transmission
- ACK_NACK_flag.1 = 0 'Clear NACK flag and check again for ACK or NACK
- end if
- Wend
- 'Printbin #lcd_4d , 4d_string_tx_arr(1) , Tot_command_len 'code +string index+ string length + 1 char + crc
- Debug 4d_string_tx_arr(1) , Tot_command_len 'code +string index+ string length + 1 char + crc
- 4d_wait_count = 0
- End Sub
- '*******************************************************************************
- '###############################################################################
https://www.dropbox.com/s/1yr5yd0sx3ae8 ... s.rar?dl=0
Plik biblioteki Include spakowany rarem: -----------------------------------------Duży edyt ----------------------------------
Scaliłem trzy posty razem bo Bartek usunął limit znaków na post.
Usunąłem kilka ząłaczników niesty limit mnie nie puszcza ale zastapiłem linkami.
Teraz dodatkowo coś o bibliotece.
Biblioteka jest napisana w sposób "poprawny politycznie" czyli według zaleceń producenta.
Po każdej wysłanej komendzie czekamy w pętli na odpowiedz od wyświetlacza zwykle jest to komenda ACK hexowe &H6 lub NACK Hexowe &h15
W Xmega 128A3U czas oczekiwania zwykle to około 6000 obiegów pętli.
Sporo ale cóż taki "design".
W wersji drugiej planuje dodanie kolejnego parametru do sub rutyn, coś w stylu czekaj lub nie.
Decyzja będzie należała do programisty co zrobić w czasie oczekiwania na odwiedź.
Niestety będzie to wymagało dobrej organizacji kodu bo w łatwy sposób będzie można zawiesić wyświetlacz.
W bibliotece umiesciłem komendy Debug w łatwy sposób możemy przetestować co się dzieje z naszym kodem.
Informacja o kazdy ważnejszy kroku bedzie wysyła na com0.
Napisanie biblioteki zajęło dość sporo czasu bo aż:
$projecttime = 1239
$version 0 , 0 , 1636 kompilacji kodu
Co jeszcze zostało do zrobienia:
Dopisać wysyłanie stringów w Unicode- zwyczajnie nie używam unicode nie chciało mi się.
Dopisać tzw Report_Magic_events_bytes- funkcja dostępna po zakupie licencji PRO, Pozwala na tworzenie własnych wstawek w kodzie 4D odbiera wskazaną ilość tablic typu bajt.
Dopisać tzw Report_Magic_events_Dbytes- funkcja dostępna po zakupie licencji PRO, Pozwala na tworzenie własnych wstawek w kodzie 4D odbiera wskazaną ilość tablic typu word.
Dopisać tzw Write_Magic_bytes- funkcja dostępna po zakupie licencji PRO, Pozwala na tworzenie własnych wstawek w kodzie 4D wysyła wskazaną ilość tablic typu bajt.
Dopisać tzw Write_Magic_Dbytes- funkcja dostępna po zakupie licencji PRO, Pozwala na tworzenie własnych wstawek w kodzie 4D wysyła wskazaną ilość tablic typu word.
Funkcje te nie są potrzebne to standardowej pracy z wykorzystaniem Visi-Genie.
Dopisze gdy nadejdą długie deszczowe Irlandzkie wieczory