Files
AT-VFD/PT6302.h

96 lines
4.3 KiB
C

//
// Created by lacko on 02/03/2022.
//
#ifndef _PT6302_H_
#define _PT6302_H_
#define DISPLAY_DIGITS 12
/* 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 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,
};
/* -------------------------------------------------------------
* Initial setup for the VFD controller interface
* Sets up the connected pins and leaves them in inactive state.
* ------------------------------------------------------------- */
void PT6302_startup (void);
/* -------------------------------------------------------------------------------
* 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);
#endif //_PT6302_H_