Fix to have load pin working with SPI1.

Dependencies:   mbed

Fork of Max7221 by Dwayne Dilbeck

Committer:
ky3orr
Date:
Tue Nov 24 00:38:36 2015 +0000
Revision:
9:75bddbfbb692
Parent:
8:3f5901f2f813
All instances now share one SPI and /CS signal and operate in display chain.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jakowisp 2:828c62cc1861 1 /**
jakowisp 2:828c62cc1861 2 * @file Max7221.h
ky3orr 7:a160cb7cdd86 3 * @brief Header file for the MAX7219/7221 driver class.
jakowisp 2:828c62cc1861 4 *
ky3orr 7:a160cb7cdd86 5 * @author Grzegorz Kaczmarek
ky3orr 8:3f5901f2f813 6 * @comment Code inspired on earlier Dwayne S. Dilbeck's work
ky3orr 7:a160cb7cdd86 7 * @date 20/11/2015
jakowisp 2:828c62cc1861 8 */
ky3orr 7:a160cb7cdd86 9
jakowisp 1:d8589d1f368c 10 #ifndef Max7221_H
jakowisp 1:d8589d1f368c 11 #define Max7221_H
jakowisp 1:d8589d1f368c 12
ky3orr 7:a160cb7cdd86 13 // MAX7219/7221 register map
ky3orr 9:75bddbfbb692 14 #define max7221_reg_noop 0x00
ky3orr 9:75bddbfbb692 15 #define max7221_reg_digit0 0x01
ky3orr 9:75bddbfbb692 16 #define max7221_reg_digit1 0x02
ky3orr 9:75bddbfbb692 17 #define max7221_reg_digit2 0x03
ky3orr 9:75bddbfbb692 18 #define max7221_reg_digit3 0x04
ky3orr 9:75bddbfbb692 19 #define max7221_reg_digit4 0x05
ky3orr 9:75bddbfbb692 20 #define max7221_reg_digit5 0x06
ky3orr 9:75bddbfbb692 21 #define max7221_reg_digit6 0x07
ky3orr 9:75bddbfbb692 22 #define max7221_reg_digit7 0x08
ky3orr 9:75bddbfbb692 23 #define max7221_reg_decodeMode 0x09
ky3orr 9:75bddbfbb692 24 #define max7221_reg_intensity 0x0A
ky3orr 9:75bddbfbb692 25 #define max7221_reg_scanLimit 0x0B
ky3orr 9:75bddbfbb692 26 #define max7221_reg_shutdown 0x0C
ky3orr 9:75bddbfbb692 27 #define max7221_reg_displayTest 0x0F
jakowisp 4:e2b160410338 28
ky3orr 7:a160cb7cdd86 29 // Logical values
ky3orr 7:a160cb7cdd86 30 #define LOG_0 0
ky3orr 7:a160cb7cdd86 31 #define LOG_1 1
jakowisp 4:e2b160410338 32
jakowisp 1:d8589d1f368c 33 class Max7221 {
ky3orr 7:a160cb7cdd86 34 private:
ky3orr 9:75bddbfbb692 35 static SPI *mp_spi; // SPI used for this display (no data transmission when NULL)
ky3orr 9:75bddbfbb692 36 static DigitalOut *mp_cs; // /CS signal (it should be handled manually when NULL)
ky3orr 9:75bddbfbb692 37 static unsigned int m_counter; // Total number of displays on SPI chain
ky3orr 9:75bddbfbb692 38 unsigned int m_position; // Display position on SPI chain (0 = 1'st)
jakowisp 1:d8589d1f368c 39 public:
jakowisp 4:e2b160410338 40 /**
ky3orr 7:a160cb7cdd86 41 * Default constructor.
ky3orr 9:75bddbfbb692 42 * At least one instance should set SPI and /CS pointers for display chain to work.
ky3orr 9:75bddbfbb692 43 * Use SetSpi() and SetCs() or parametrized constructor.
ky3orr 9:75bddbfbb692 44 */
ky3orr 9:75bddbfbb692 45 Max7221();
ky3orr 9:75bddbfbb692 46
ky3orr 9:75bddbfbb692 47 /**
ky3orr 9:75bddbfbb692 48 * Constructor.
ky3orr 9:75bddbfbb692 49 * Sets SPI and /CS pointers. Display chain is operational.
ky3orr 7:a160cb7cdd86 50 */
ky3orr 9:75bddbfbb692 51 Max7221(SPI *spi, DigitalOut *cs);
ky3orr 9:75bddbfbb692 52
ky3orr 9:75bddbfbb692 53 /**
ky3orr 9:75bddbfbb692 54 * Sets pointer to configured SPI.
ky3orr 9:75bddbfbb692 55 * SPI is used by all display instances.
ky3orr 9:75bddbfbb692 56 */
ky3orr 9:75bddbfbb692 57 void SetSpi(SPI *spi);
ky3orr 9:75bddbfbb692 58
ky3orr 9:75bddbfbb692 59 /**
ky3orr 9:75bddbfbb692 60 * Sets pointer to configured /CS signal.
ky3orr 9:75bddbfbb692 61 * /CS signal is used by all display instances.
ky3orr 9:75bddbfbb692 62 */
ky3orr 9:75bddbfbb692 63 void SetCs(DigitalOut *cs);
ky3orr 7:a160cb7cdd86 64
ky3orr 7:a160cb7cdd86 65 /**
ky3orr 7:a160cb7cdd86 66 * Method for setting /CS signal LOW (enable data reception).
jakowisp 4:e2b160410338 67 */
ky3orr 7:a160cb7cdd86 68 void CsLow(void);
ky3orr 7:a160cb7cdd86 69
ky3orr 7:a160cb7cdd86 70 /**
ky3orr 7:a160cb7cdd86 71 * Method for setting /CS signal HIGH (received data is latched and processed).
ky3orr 7:a160cb7cdd86 72 */
ky3orr 7:a160cb7cdd86 73 void CsHigh(void);
ky3orr 7:a160cb7cdd86 74
ky3orr 7:a160cb7cdd86 75 /**
ky3orr 7:a160cb7cdd86 76 * Method used to send data over SPI (no use of /CS signal).
ky3orr 7:a160cb7cdd86 77 * To be used with display chains and when building display libraries
ky3orr 7:a160cb7cdd86 78 * where amount of data needs to be pushed via SPI in one transaction.
ky3orr 7:a160cb7cdd86 79 */
ky3orr 7:a160cb7cdd86 80 void WriteRaw(unsigned int reg, unsigned int data);
jakowisp 1:d8589d1f368c 81
jakowisp 4:e2b160410338 82 /**
ky3orr 7:a160cb7cdd86 83 * Method for sending register-value pair for this diasplay.
ky3orr 7:a160cb7cdd86 84 * Supports display chain on single SPI (m_position > 0).
jakowisp 4:e2b160410338 85 */
ky3orr 7:a160cb7cdd86 86 void Write(unsigned int reg, unsigned int data);
jakowisp 2:828c62cc1861 87
jakowisp 4:e2b160410338 88 /**
ky3orr 7:a160cb7cdd86 89 * Sets test mode which causes all display LEDs to emit light with full brightess.
ky3orr 7:a160cb7cdd86 90 * @param mode true - test mode, false - normal operation.
ky3orr 7:a160cb7cdd86 91 */
ky3orr 7:a160cb7cdd86 92 void TestMode(bool mode);
ky3orr 7:a160cb7cdd86 93
ky3orr 7:a160cb7cdd86 94 /**
ky3orr 7:a160cb7cdd86 95 * Sets amount of digits to be used by this display.
ky3orr 7:a160cb7cdd86 96 * @param digits_no 1 - one digit, (2-7), 8 - all 8 digits.
ky3orr 7:a160cb7cdd86 97 */
ky3orr 7:a160cb7cdd86 98 void UseDigitsNo(unsigned int digits_no);
jakowisp 2:828c62cc1861 99
jakowisp 4:e2b160410338 100 /**
ky3orr 7:a160cb7cdd86 101 * Selects for which digits Code-B data decoding is used.
ky3orr 7:a160cb7cdd86 102 * @param mode 0x00 - no decoding, 0x0F - digits 0-3, 0xFF - all digits.
ky3orr 7:a160cb7cdd86 103 */
ky3orr 7:a160cb7cdd86 104 void DecodeMode(unsigned int mode);
jakowisp 4:e2b160410338 105
jakowisp 4:e2b160410338 106 /**
ky3orr 7:a160cb7cdd86 107 * Sends data to selected digit.
ky3orr 7:a160cb7cdd86 108 * @param digit_no Selected digit (0-7).
ky3orr 7:a160cb7cdd86 109 * @param digit_no Data to display.
ky3orr 7:a160cb7cdd86 110 */
ky3orr 7:a160cb7cdd86 111 void WriteDigit(unsigned int digit_no, unsigned int value);
jakowisp 2:828c62cc1861 112
jakowisp 4:e2b160410338 113 /**
ky3orr 7:a160cb7cdd86 114 * Sets display brightness.
ky3orr 7:a160cb7cdd86 115 * @param intensity 0x00 - minimum brightness, 0x0F - maximum brightness.
ky3orr 7:a160cb7cdd86 116 */
ky3orr 7:a160cb7cdd86 117 void Intensity(unsigned int intensity);
ky3orr 7:a160cb7cdd86 118
ky3orr 7:a160cb7cdd86 119 /**
ky3orr 7:a160cb7cdd86 120 * Sets display operation mode.
ky3orr 7:a160cb7cdd86 121 * @param mode true - normal operation, false - shutdown mode.
ky3orr 7:a160cb7cdd86 122 */
ky3orr 7:a160cb7cdd86 123 void OperationMode(bool mode);
ky3orr 7:a160cb7cdd86 124
ky3orr 7:a160cb7cdd86 125 /**
ky3orr 7:a160cb7cdd86 126 * Initial setup of this display.
ky3orr 7:a160cb7cdd86 127 * 8-digit blank decimal display set to nimimal brightness.
ky3orr 7:a160cb7cdd86 128 * Supports display chain on single SPI (m_position > 0).
jakowisp 4:e2b160410338 129 */
ky3orr 7:a160cb7cdd86 130 void Setup(void);
jakowisp 1:d8589d1f368c 131 };
jakowisp 1:d8589d1f368c 132
jakowisp 1:d8589d1f368c 133 #endif