Jump to content

Component: LCD (ST7032i) (Alphanumeric): Difference between revisions

From Flowcode Help
No edit summary
No edit summary
Line 16: Line 16:


==Component Source Code==
==Component Source Code==
Please click here to download the component source project: [https://www.flowcode.co.uk/wikicopy/componentsource/FC_Comp_Source_LCD_ST7032i.fcfx FC_Comp_Source_LCD_ST7032i.fcfx]


Please click here to view the component source code (Beta): [https://www.flowcode.co.uk/FlowchartView/?wfile=componentsource/FC_Comp_Source_LCD_ST7032i.fcfx FC_Comp_Source_LCD_ST7032i.fcfx]
Please click here to view the component source code (Beta): [https://www.flowcode.co.uk/FlowchartView/?wfile=componentsource/FC_Comp_Source_LCD_ST7032i.fcfx FC_Comp_Source_LCD_ST7032i.fcfx]


==Detailed description==
==Detailed description==




Line 30: Line 34:


==Examples==
==Examples==




Line 40: Line 46:


==Macro reference==
==Macro reference==
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Clear'''
|-
| colspan="2" |  
|-
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''PrintString'''
|-
| colspan="2" |  
|-
|-
| width="10%" align="center" | [[File:Fc9-string-icon.png]] - STRING
| width="90%" | Text
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''PrintAscii'''
|-
| colspan="2" | Takes the ascii value for a character and prints the character 
|-
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | character
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''PrintNumber'''
|-
| colspan="2" | Allows you to print a number. This is limited to a signed-INT, -32768 to 32767 
|-
|-
| width="10%" align="center" | [[File:Fc9-s16-icon.png]] - INT
| width="90%" | Number
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''RAMWrite'''
|-
| colspan="2" | Modifies the internal memory of the LCD to allow for up to 8 customised characters to be created and stored in the device memory 
|-
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | Index
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d0
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d1
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d2
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d3
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d4
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d5
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d6
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | d7
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ClearLine'''
|-
| colspan="2" |  
|-
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | Line
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Cursor'''
|-
| colspan="2" | Moves the cursor on the LCD Display 
|-
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | x
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | y
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Command'''
|-
| colspan="2" | Use this method/macro to send a specific command to the LCD. Refer to the Matrix Multimedia EB006 datasheet for a list of supported instructions. For Non-Matrix LCD's refer to the manufacturers datasheet. 
|-
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | instruction
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''PrintFormattedNumber'''
|-
| colspan="2" | Will allow you to print a number up to 32-bits with signed or unsigned formatting. Signed = -2147483648 to 2147483647 Unsigned = 0 to 4294967295 
|-
|-
| width="10%" align="center" | [[File:Fc9-u32-icon.png]] - ULONG
| width="90%" | Number
|-
| colspan="2" | Enter the number or variable to print to the LCD 
|-
| width="10%" align="center" | [[File:Fc9-bool-icon.png]] - BOOL
| width="90%" | Format
|-
| colspan="2" | 0=Signed, 1=Unsigned 
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ScrollDisplay'''
|-
| colspan="2" | Scrolls the display left or right by a number of given positions. 
|-
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | position
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | direction
|-
| colspan="2" |  
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''PrintFloat'''
|-
| colspan="2" | Print a Float number rounded up to a specified amount of decimal places. 
|-
|-
| width="10%" align="center" | [[File:Fc9-f32-icon.png]] - FLOAT
| width="90%" | Number
|-
| colspan="2" | Enter the number or variable to print to the LCD 
|-
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| width="90%" | DecimalPlaces
|-
| colspan="2" | Enter how many decimal places to round up to (1 - 6) 
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Start'''
|-
| colspan="2" | Startup routine required by the hardware device. 
|-
|-
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| width="90%" style="border-top: 2px solid #000;" | ''Return''
|}
==Property reference==
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
|-
| width="10%" align="center" style="background-color:#D8C9D8;" | [[File:Fc9-prop-icon.png]]
| width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Properties'''
|-
|-
| width="10%" align="center" style="background-color:#EAE1EA;" | [[File:Fc9-conn-icon.png]]
| width="90%" style="background-color:#EAE1EA; color:#4B008D;" | I2C Config
|-
|-
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
| width="90%" | Channel
|-
| colspan="2" | Channel selection 
|-
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
| width="90%" | Baud Select
|-
| colspan="2" | Baud rate option selector 
|-
| width="10%" align="center" | [[File:Fc9-type-14-icon.png]]
| width="90%" | Baud Rate
|-
| colspan="2" | Baud rate to be used 
|-
| width="10%" align="center" | [[File:Fc9-type-7-icon.png]]
| width="90%" | Stop Delay
|-
| colspan="2" | On older microcontroller devices there is a potential for the I2C hardware channel to lock up if there is not  a 10ms delay between an I2C stop event and the next I2C start event.  Most modern microcontrollers will not have a problem so this property can be disabled to speed up the  I2C communications.  
|-
| width="10%" align="center" style="background-color:#EAE1EA;" | [[File:Fc9-conn-icon.png]]
| width="90%" style="background-color:#EAE1EA; color:#4B008D;" | Connections
|-
|-
| width="10%" align="center" | [[File:Fc9-type-5-icon.png]]
| width="90%" | SDA
|-
| colspan="2" | Pin used for SDA (data signal) 
|-
| width="10%" align="center" | [[File:Fc9-type-5-icon.png]]
| width="90%" | SCL
|-
| colspan="2" | Pin used for SCL (clock signal) 
|-
| width="10%" align="center" style="background-color:#EAE1EA;" | [[File:Fc9-conn-icon.png]]
| width="90%" style="background-color:#EAE1EA; color:#4B008D;" | LCD Configuration
|-
|-
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
| width="90%" | Voltage
|-
| colspan="2" | Configures things like the display default contrast and follower 
|-
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
| width="90%" | Rows
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
| width="90%" | Columns
|-
| colspan="2" |  
|-
| width="10%" align="center" style="background-color:#EAE1EA;" | [[File:Fc9-conn-icon.png]]
| width="90%" style="background-color:#EAE1EA; color:#4B008D;" | Simulation
|-
|-
| width="10%" align="center" | [[File:Fc9-type-16-icon.png]]
| width="90%" | Component Label
|-
| colspan="2" |  
|-
| width="10%" align="center" | [[File:Fc9-type-15-icon.png]]
| width="90%" | Component Label Scale
|-
| colspan="2" | The label scale can be change if the amout of text is too wide for the display  
|-
| width="10%" align="center" | [[File:Fc9-type-1-icon.png]]
| width="90%" | Text Colour
|-
| colspan="2" | Colour of the font characters drawn on the display 
|-
| width="10%" align="center" | [[File:Fc9-type-1-icon.png]]
| width="90%" | Text Background
|-
| colspan="2" | Colour surrounding the font characters drawn on the display 
|-
| width="10%" align="center" | [[File:Fc9-type-1-icon.png]]
| width="90%" | Display Background
|-
| colspan="2" | Colour of the background of the display 
|-
| width="10%" align="center" | [[File:Fc9-type-7-icon.png]]
| width="90%" | Simulate Comms
|-
| colspan="2" | Used to drive the comms durig simulation which can be used to: Data Recorder waveform generation Console Logging Data Injector to redirect the data e.g. to a SCADA slave connected to the physical hardware 
|}==Macro reference==


{| class="wikitable" style="width:60%; background-color:#FFFFFF;"
{| class="wikitable" style="width:60%; background-color:#FFFFFF;"

Revision as of 15:22, 20 January 2023

Author Matrix Ltd
Version 2.1
Category Alphanumeric


LCD (ST7032i) component

Standard alphanumeric LCD based on the ST7032i LCD driver IC connected using I2C.

Component Source Code

Please click here to download the component source project: FC_Comp_Source_LCD_ST7032i.fcfx

Please click here to view the component source code (Beta): FC_Comp_Source_LCD_ST7032i.fcfx

Detailed description

No detailed description exists yet for this component

Examples

No additional examples

Macro reference

Clear
 
- VOID Return


PrintString
 
- STRING Text
 
- VOID Return


PrintAscii
Takes the ascii value for a character and prints the character 
- BYTE character
 
- VOID Return


PrintNumber
Allows you to print a number. This is limited to a signed-INT, -32768 to 32767 
- INT Number
 
- VOID Return


RAMWrite
Modifies the internal memory of the LCD to allow for up to 8 customised characters to be created and stored in the device memory 
- BYTE Index
 
- BYTE d0
 
- BYTE d1
 
- BYTE d2
 
- BYTE d3
 
- BYTE d4
 
- BYTE d5
 
- BYTE d6
 
- BYTE d7
 
- VOID Return


ClearLine
 
- BYTE Line
 
- VOID Return


Cursor
Moves the cursor on the LCD Display 
- BYTE x
 
- BYTE y
 
- VOID Return


Command
Use this method/macro to send a specific command to the LCD. Refer to the Matrix Multimedia EB006 datasheet for a list of supported instructions. For Non-Matrix LCD's refer to the manufacturers datasheet. 
- BYTE instruction
 
- VOID Return


PrintFormattedNumber
Will allow you to print a number up to 32-bits with signed or unsigned formatting. Signed = -2147483648 to 2147483647 Unsigned = 0 to 4294967295 
- ULONG Number
Enter the number or variable to print to the LCD 
- BOOL Format
0=Signed, 1=Unsigned 
- VOID Return


ScrollDisplay
Scrolls the display left or right by a number of given positions. 
- BYTE position
 
- BYTE direction
 
- VOID Return


PrintFloat
Print a Float number rounded up to a specified amount of decimal places. 
- FLOAT Number
Enter the number or variable to print to the LCD 
- BYTE DecimalPlaces
Enter how many decimal places to round up to (1 - 6) 
- VOID Return


Start
Startup routine required by the hardware device. 
- VOID Return



Property reference

Properties
I2C Config
Channel
Channel selection 
Baud Select
Baud rate option selector 
Baud Rate
Baud rate to be used 
Stop Delay
On older microcontroller devices there is a potential for the I2C hardware channel to lock up if there is not a 10ms delay between an I2C stop event and the next I2C start event. Most modern microcontrollers will not have a problem so this property can be disabled to speed up the I2C communications.  
Connections
SDA
Pin used for SDA (data signal) 
SCL
Pin used for SCL (clock signal) 
LCD Configuration
Voltage
Configures things like the display default contrast and follower 
Rows
 
Columns
 
Simulation
Component Label
 
Component Label Scale
The label scale can be change if the amout of text is too wide for the display  
Text Colour
Colour of the font characters drawn on the display 
Text Background
Colour surrounding the font characters drawn on the display 
Display Background
Colour of the background of the display 
Simulate Comms
Used to drive the comms durig simulation which can be used to: Data Recorder waveform generation Console Logging Data Injector to redirect the data e.g. to a SCADA slave connected to the physical hardware 

==Macro reference==

Clear
 
- VOID Return


PrintString
 
- STRING Text
 
- VOID Return


PrintAscii
Takes the ascii value for a character and prints the character 
- BYTE character
 
- VOID Return


PrintNumber
Allows you to print a number. This is limited to a signed-INT, -32768 to 32767 
- INT Number
 
- VOID Return


RAMWrite
Modifies the internal memory of the LCD to allow for up to 8 customised characters to be created and stored in the device memory 
- BYTE Index
 
- BYTE d0
 
- BYTE d1
 
- BYTE d2
 
- BYTE d3
 
- BYTE d4
 
- BYTE d5
 
- BYTE d6
 
- BYTE d7
 
- VOID Return


ClearLine
 
- BYTE Line
 
- VOID Return


Cursor
Moves the cursor on the LCD Display 
- BYTE x
 
- BYTE y
 
- VOID Return


Command
Use this method/macro to send a specific command to the LCD. Refer to the Matrix Multimedia EB006 datasheet for a list of supported instructions. For Non-Matrix LCD's refer to the manufacturers datasheet. 
- BYTE instruction
 
- VOID Return


PrintFormattedNumber
Will allow you to print a number up to 32-bits with signed or unsigned formatting. Signed = -2147483648 to 2147483647 Unsigned = 0 to 4294967295 
- ULONG Number
Enter the number or variable to print to the LCD 
- BOOL Format
0=Signed, 1=Unsigned 
- VOID Return


ScrollDisplay
Scrolls the display left or right by a number of given positions. 
- BYTE position
 
- BYTE direction
 
- VOID Return


PrintFloat
Print a Float number rounded up to a specified amount of decimal places. 
- FLOAT Number
Enter the number or variable to print to the LCD 
- BYTE DecimalPlaces
Enter how many decimal places to round up to (1 - 6) 
- VOID Return


Start
Startup routine required by the hardware device. 
- VOID Return



Property reference

Properties
I2C Config
Channel
Channel selection 
Baud Select
Baud rate option selector 
Baud Rate
Baud rate to be used 
Stop Delay
On older microcontroller devices there is a potential for the I2C hardware channel to lock up if there is not a 10ms delay between an I2C stop event and the next I2C start event. Most modern microcontrollers will not have a problem so this property can be disabled to speed up the I2C communications.  
Connections
SDA
Pin used for SDA (data signal) 
SCL
Pin used for SCL (clock signal) 
LCD Configuration
Voltage
Configures things like the display default contrast and follower 
Rows
 
Columns
 
Simulation
Component Label
 
Component Label Scale
The label scale can be change if the amout of text is too wide for the display  
Text Colour
Colour of the font characters drawn on the display 
Text Background
Colour surrounding the font characters drawn on the display 
Display Background
Colour of the background of the display 
Simulate Comms
Used to drive the comms durig simulation which can be used to: Data Recorder waveform generation Console Logging Data Injector to redirect the data e.g. to a SCADA slave connected to the physical hardware 

==Macro reference==

Clear
 
- VOID Return


PrintString
 
- STRING Text
 
- VOID Return


PrintAscii
Takes the ascii value for a character and prints the character 
- BYTE character
 
- VOID Return


PrintNumber
Allows you to print a number. This is limited to a signed-INT, -32768 to 32767 
- INT Number
 
- VOID Return


RAMWrite
Modifies the internal memory of the LCD to allow for up to 8 customised characters to be created and stored in the device memory 
- BYTE Index
 
- BYTE d0
 
- BYTE d1
 
- BYTE d2
 
- BYTE d3
 
- BYTE d4
 
- BYTE d5
 
- BYTE d6
 
- BYTE d7
 
- VOID Return


ClearLine
 
- BYTE Line
 
- VOID Return


Cursor
Moves the cursor on the LCD Display 
- BYTE x
 
- BYTE y
 
- VOID Return


Command
Use this method/macro to send a specific command to the LCD. Refer to the Matrix Multimedia EB006 datasheet for a list of supported instructions. For Non-Matrix LCD's refer to the manufacturers datasheet. 
- BYTE instruction
 
- VOID Return


PrintFormattedNumber
Will allow you to print a number up to 32-bits with signed or unsigned formatting. Signed = -2147483648 to 2147483647 Unsigned = 0 to 4294967295 
- ULONG Number
Enter the number or variable to print to the LCD 
- BOOL Format
0=Signed, 1=Unsigned 
- VOID Return


ScrollDisplay
Scrolls the display left or right by a number of given positions. 
- BYTE position
 
- BYTE direction
 
- VOID Return


PrintFloat
Print a Float number rounded up to a specified amount of decimal places. 
- FLOAT Number
Enter the number or variable to print to the LCD 
- BYTE DecimalPlaces
Enter how many decimal places to round up to (1 - 6) 
- VOID Return


Start
Startup routine required by the hardware device. 
- VOID Return



Property reference

Properties
I2C Config
Channel
Channel selection 
Baud Select
Baud rate option selector 
Baud Rate
Baud rate to be used 
Stop Delay
On older microcontroller devices there is a potential for the I2C hardware channel to lock up if there is not a 10ms delay between an I2C stop event and the next I2C start event. Most modern microcontrollers will not have a problem so this property can be disabled to speed up the I2C communications.  
Connections
SDA
Pin used for SDA (data signal) 
SCL
Pin used for SCL (clock signal) 
LCD Configuration
Voltage
Configures things like the display default contrast and follower 
Rows
 
Columns
 
Simulation
Component Label
 
Component Label Scale
The label scale can be change if the amout of text is too wide for the display  
Text Colour
Colour of the font characters drawn on the display 
Text Background
Colour surrounding the font characters drawn on the display 
Display Background
Colour of the background of the display 
Simulate Comms
Used to drive the comms durig simulation which can be used to: Data Recorder waveform generation Console Logging Data Injector to redirect the data e.g. to a SCADA slave connected to the physical hardware