-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPT6302.h
135 lines (120 loc) · 5.85 KB
/
PT6302.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#pragma once
/*
* AT-VFD
* Copyright (C) 2022 László Párkányi
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*/
#define DISPLAY_DIGITS 15
#include <inttypes.h>
#include <avr/io.h>
/* PT6302 timing constants, all in usec */
static const uint8_t TCW = 1; //CLKB pulse width
static const uint8_t TDOFF = 16; //Data processing time
static const uint8_t DTCSH = 16; //time difference between tDOFF and tCSH
static const uint8_t TCSH = 32; //Chip select hold time
static const uint8_t TPRZ = 100; //VDD rise time
static const uint8_t TWRSTB = 1; //RSTB pulse width
enum pins {
RSTpin = (1 << PC2),
CSBpin = (1 << PB0),
CLKBpin = (1 << PB6),
DINpin = (1 << PB7),
};
enum RAM_types {
DCRAM = 0x10,
CGRAM = 0x20,
ADRAM = 0x30,
};
enum display_modes {
NORMAL_MODE = 0x0,
ALL_ON = 0x1,
ALL_OFF = 0x2,
};
/* -------------------------------------------------------------
* Initial setup for the VFD controller interface
* Sets up the connected pins and leaves them in inactive state.
* ------------------------------------------------------------- */
void PT6302_startup (void);
/* ----------------------------------------------
* Resets the VFD controller trough its reset pin
* Handles reset delays
* ---------------------------------------------- */
void PT6302_reset (void);
/* ------------------------------------------------
* Transmits one character (data)
* Handles the entire communication
* this is (mostly) intended to be used by wrappers
* ------------------------------------------------ */
void transmit_byte (uint8_t data);
/* -------------------------------------------------------------------------------
* Transmits size byte of data through the VFD controller's interface from payload
* Handles CLKB, CSB and timing constraints
* ------------------------------------------------------------------------------- */
void transmit_bytes (const uint8_t *payload, uint8_t size);
/* ---------------------------------------------------------
* Sets GP1 and GP2 to the values given in the function call
* Handles the entire communication
* --------------------------------------------------------- */
void set_ports (uint8_t gp1, uint8_t gp2);
/* ---------------------------------------------------------------------------------------
* Sets the number of digit_count the VFD has
* digit_count below 9 are interpreted as 9 and digit_count above 16 are interpreted as 16
* Handles the entire communication
* --------------------------------------------------------------------------------------- */
void set_digits (uint8_t digit_count);
/* -----------------------------------------------------------
* Sets duty cycle of controlled VFD
* Brightness between 0 and 7 are accepted, any higher means 7
* duty = (brightness + 8)/16 (valid between 8/16 and 15/16)
* Handles the entire communication
* ----------------------------------------------------------- */
void set_duty (uint8_t brightness);
/* ------------------------------------------------------------------------------------------
* Set the content of the DCRAM - this will display a character from the CGROM/RAM at address
* cd_address is an array of the CGROM/RAM addresses of characters to display
* size is the number of characters to display (max DISPLAY_DIGITS - address)
* if exceeded, max possible number of characters will be displayed
* address is the starting address (4 bits, max DISPLAY_DIGITS)
* if DISPLAY_DIGITS is exceeded, no characters will be set
* Handles the entire communication
* ------------------------------------------------------------------------------------------ */
void set_DCRAM (uint8_t address, const uint8_t *cg_address, uint8_t size);
/* -------------------------------------------------------------------------------
* Set the content of the CGRAM - this will write custom characters into the CGRAM
* data is an array of 5-byte arrays that contain the custom character data
* size is the number of 5-byte arrays
* address is the starting address (3 bits)
* Handles the entire communication
* ------------------------------------------------------------------------------- */
void set_CGRAM (uint8_t address, const uint8_t *data, uint8_t size);
/* ---------------------------------------------------------------------------------------
* Set the content of the ADRAM - This will cause the corresponding segments to be set
* data is an array containing sequential data of the segments (one byte for two segments)
* elements of the array are truncated after two bits
* size is the number of segment pairs to be changed (max DISPLAY_DIGITS pairs - address)
* if exceeded, max possible number of segment pairs will be set
* address is the starting address (4 bits, max DISPLAY_DIGITS)
* if DISPLAY_DIGITS is exceeded, no segment pairs will be set
* Handles the entire communication
* --------------------------------------------------------------------------------------- */
void set_ADRAM (uint8_t address, const uint8_t *data, uint8_t size);
/* -----------------------------------------
* Sets the VFD operation mode
* See operation modes in enum display_modes
* Handles the entire communication
* ----------------------------------------- */
void set_display_mode (enum display_modes mode);