Skip to content

Commit 791616a

Browse files
authored
New component: text LCD (#405)
* new component: the old pcf8574 8bit io-expander. * correct interface to current HAL (v0.3) * make address and I2C_Port discriminants, so that variables cannot be declared without initialization * cleared style issues (missing blanks) and made the type limited * first working version of a HD44780 LCD driver, based on I2C PCF8574 * use controlling parameter directly in in out mode, not the pointer to class wide * make the call to Output dispatching * corrected GNAT style issues * add support for user defined custom characters * use standard Adacore copyright notice * remove unneeded with clause
1 parent 249e15f commit 791616a

File tree

7 files changed

+824
-0
lines changed

7 files changed

+824
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
------------------------------------------------------------------------------
2+
-- --
3+
-- Copyright (C) 2022, AdaCore --
4+
-- --
5+
-- Redistribution and use in source and binary forms, with or without --
6+
-- modification, are permitted provided that the following conditions are --
7+
-- met: --
8+
-- 1. Redistributions of source code must retain the above copyright --
9+
-- notice, this list of conditions and the following disclaimer. --
10+
-- 2. Redistributions in binary form must reproduce the above copyright --
11+
-- notice, this list of conditions and the following disclaimer in --
12+
-- the documentation and/or other materials provided with the --
13+
-- distribution. --
14+
-- 3. Neither the name of the copyright holder nor the names of its --
15+
-- contributors may be used to endorse or promote products derived --
16+
-- from this software without specific prior written permission. --
17+
-- --
18+
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --
19+
-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --
20+
-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --
21+
-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --
22+
-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --
23+
-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --
24+
-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --
25+
-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --
26+
-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --
27+
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --
28+
-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
29+
-- --
30+
------------------------------------------------------------------------------
31+
32+
package body PCF8574 is
33+
34+
-----------
35+
-- Get --
36+
-----------
37+
38+
function Get (This : PCF8574_Module) return UInt8
39+
is
40+
Val : I2C_Data (1 .. 1);
41+
Status : I2C_Status;
42+
begin
43+
This.Port.Master_Receive (This.Addr, Val, Status);
44+
return Val (1);
45+
end Get;
46+
47+
procedure Get (This : PCF8574_Module; Data : out UInt8)
48+
is begin
49+
Data := Get (This);
50+
end Get;
51+
52+
-----------
53+
-- Set --
54+
-----------
55+
56+
procedure Set (This : PCF8574_Module; Data : UInt8)
57+
is
58+
Status : I2C_Status;
59+
begin
60+
This.Port.Master_Transmit (This.Addr, (1 => Data), Status);
61+
end Set;
62+
63+
end PCF8574;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
------------------------------------------------------------------------------
2+
-- --
3+
-- Copyright (C) 2022, AdaCore --
4+
-- --
5+
-- Redistribution and use in source and binary forms, with or without --
6+
-- modification, are permitted provided that the following conditions are --
7+
-- met: --
8+
-- 1. Redistributions of source code must retain the above copyright --
9+
-- notice, this list of conditions and the following disclaimer. --
10+
-- 2. Redistributions in binary form must reproduce the above copyright --
11+
-- notice, this list of conditions and the following disclaimer in --
12+
-- the documentation and/or other materials provided with the --
13+
-- distribution. --
14+
-- 3. Neither the name of the copyright holder nor the names of its --
15+
-- contributors may be used to endorse or promote products derived --
16+
-- from this software without specific prior written permission. --
17+
-- --
18+
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --
19+
-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --
20+
-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --
21+
-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --
22+
-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --
23+
-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --
24+
-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --
25+
-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --
26+
-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --
27+
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --
28+
-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
29+
-- --
30+
------------------------------------------------------------------------------
31+
32+
with HAL; use HAL;
33+
with HAL.I2C; use HAL.I2C;
34+
35+
-- I2C 8-bit IO expander with quasi bidirectional I/O, no data
36+
-- direction, no latch
37+
38+
package PCF8574 is
39+
40+
subtype PCF8574_Address is I2C_Address range 16#40# .. 16#5F#;
41+
42+
type PCF8574_Module (Port : not null Any_I2C_Port;
43+
Addr : I2C_Address) is tagged limited private;
44+
45+
type Any_PCF8574_Module is access all PCF8574_Module'Class;
46+
47+
48+
procedure Set (This : PCF8574_Module; Data : UInt8);
49+
50+
function Get (This : PCF8574_Module) return UInt8;
51+
procedure Get (This : PCF8574_Module; Data : out UInt8);
52+
-- when reading the input from keys (buttons) carefully read the
53+
-- datasheet. The input line should be set high before reading.
54+
-- E.g. if all lines are key input:
55+
-- M.Set (16#FF#);
56+
-- Keys := M.Get;
57+
58+
private
59+
60+
type PCF8574_Module (Port : not null Any_I2C_Port;
61+
Addr : I2C_Address) is tagged limited null record;
62+
63+
end PCF8574;
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
------------------------------------------------------------------------------
2+
-- --
3+
-- Copyright (C) 2022, AdaCore --
4+
-- --
5+
-- Redistribution and use in source and binary forms, with or without --
6+
-- modification, are permitted provided that the following conditions are --
7+
-- met: --
8+
-- 1. Redistributions of source code must retain the above copyright --
9+
-- notice, this list of conditions and the following disclaimer. --
10+
-- 2. Redistributions in binary form must reproduce the above copyright --
11+
-- notice, this list of conditions and the following disclaimer in --
12+
-- the documentation and/or other materials provided with the --
13+
-- distribution. --
14+
-- 3. Neither the name of the copyright holder nor the names of its --
15+
-- contributors may be used to endorse or promote products derived --
16+
-- from this software without specific prior written permission. --
17+
-- --
18+
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --
19+
-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --
20+
-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --
21+
-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --
22+
-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --
23+
-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --
24+
-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --
25+
-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --
26+
-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --
27+
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --
28+
-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
29+
-- --
30+
------------------------------------------------------------------------------
31+
32+
-- sample definitions for custom characters
33+
34+
package LCD_HD44780.Custom_Characters is
35+
36+
--
37+
-- Sample Custom Characters
38+
--
39+
40+
Filled_Heart : constant Custom_Character_Definition :=
41+
(2#00000#,
42+
2#00000#,
43+
2#01010#,
44+
2#11111#,
45+
2#11111#,
46+
2#11111#,
47+
2#01110#,
48+
2#00100#);
49+
50+
Open_Heart : constant Custom_Character_Definition :=
51+
(2#00000#,
52+
2#00000#,
53+
2#01010#,
54+
2#10101#,
55+
2#10001#,
56+
2#10001#,
57+
2#01010#,
58+
2#00100#);
59+
60+
Thermometer : constant Custom_Character_Definition :=
61+
(2#00100#,
62+
2#01010#,
63+
2#01010#,
64+
2#01010#,
65+
2#01010#,
66+
2#10001#,
67+
2#10001#,
68+
2#01110#);
69+
70+
end LCD_HD44780.Custom_Characters;

0 commit comments

Comments
 (0)