Fix to have load pin working with SPI1.

Dependencies:   mbed

Fork of Max7221 by Dwayne Dilbeck

Committer:
ky3orr
Date:
Mon Nov 23 11:28:44 2015 +0000
Revision:
7:a160cb7cdd86
Parent:
6:191569a26f50
Child:
8:3f5901f2f813
Code refactored to have MAX7219/7221 driver only with SPI chain support.

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 7:a160cb7cdd86 6 * @comment Code inspired on erlier 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
jakowisp 4:e2b160410338 14 #define max7219_reg_noop 0x00
jakowisp 4:e2b160410338 15 #define max7219_reg_decodeMode 0x09
jakowisp 4:e2b160410338 16 #define max7219_reg_intensity 0x0a
jakowisp 4:e2b160410338 17 #define max7219_reg_scanLimit 0x0b
jakowisp 4:e2b160410338 18 #define max7219_reg_shutdown 0x0c
jakowisp 4:e2b160410338 19 #define max7219_reg_displayTest 0x0f
jakowisp 4:e2b160410338 20
ky3orr 7:a160cb7cdd86 21 // Logical values
ky3orr 7:a160cb7cdd86 22 #define LOG_0 0
ky3orr 7:a160cb7cdd86 23 #define LOG_1 1
jakowisp 4:e2b160410338 24
jakowisp 1:d8589d1f368c 25 class Max7221 {
ky3orr 7:a160cb7cdd86 26 private:
ky3orr 7:a160cb7cdd86 27 SPI *mp_spi; // SPI used for this display (no data transmission when NULL)
ky3orr 7:a160cb7cdd86 28 DigitalOut *mp_cs; // CS signal (it should be handled manually when NULL)
ky3orr 7:a160cb7cdd86 29 unsigned int m_position; // Display position on SPI chain (0 = 1'st)
ky3orr 7:a160cb7cdd86 30
jakowisp 1:d8589d1f368c 31 public:
jakowisp 4:e2b160410338 32 /**
ky3orr 7:a160cb7cdd86 33 * Default constructor.
ky3orr 7:a160cb7cdd86 34 * @param spi Initialized SPI port used for communication with MAX7219/7221.
ky3orr 7:a160cb7cdd86 35 * @param cs Initialized output pin used as SW CS signal or NULL when HW one is used.
ky3orr 7:a160cb7cdd86 36 * @param position Position on SPI port (for displays connected in daisy-chain: DOUT-DIN). 0=1st.
ky3orr 7:a160cb7cdd86 37 */
ky3orr 7:a160cb7cdd86 38 Max7221(SPI *spi, DigitalOut *cs, unsigned int position=0);
ky3orr 7:a160cb7cdd86 39
ky3orr 7:a160cb7cdd86 40 /**
ky3orr 7:a160cb7cdd86 41 * Method for setting /CS signal LOW (enable data reception).
jakowisp 4:e2b160410338 42 */
ky3orr 7:a160cb7cdd86 43 void CsLow(void);
ky3orr 7:a160cb7cdd86 44
ky3orr 7:a160cb7cdd86 45 /**
ky3orr 7:a160cb7cdd86 46 * Method for setting /CS signal HIGH (received data is latched and processed).
ky3orr 7:a160cb7cdd86 47 */
ky3orr 7:a160cb7cdd86 48 void CsHigh(void);
ky3orr 7:a160cb7cdd86 49
ky3orr 7:a160cb7cdd86 50 /**
ky3orr 7:a160cb7cdd86 51 * Method used to send data over SPI (no use of /CS signal).
ky3orr 7:a160cb7cdd86 52 * To be used with display chains and when building display libraries
ky3orr 7:a160cb7cdd86 53 * where amount of data needs to be pushed via SPI in one transaction.
ky3orr 7:a160cb7cdd86 54 */
ky3orr 7:a160cb7cdd86 55 void WriteRaw(unsigned int reg, unsigned int data);
jakowisp 1:d8589d1f368c 56
jakowisp 4:e2b160410338 57 /**
ky3orr 7:a160cb7cdd86 58 * Method for sending register-value pair for this diasplay.
ky3orr 7:a160cb7cdd86 59 * Supports display chain on single SPI (m_position > 0).
jakowisp 4:e2b160410338 60 */
ky3orr 7:a160cb7cdd86 61 void Write(unsigned int reg, unsigned int data);
jakowisp 2:828c62cc1861 62
jakowisp 4:e2b160410338 63 /**
ky3orr 7:a160cb7cdd86 64 * Sets test mode which causes all display LEDs to emit light with full brightess.
ky3orr 7:a160cb7cdd86 65 * @param mode true - test mode, false - normal operation.
ky3orr 7:a160cb7cdd86 66 */
ky3orr 7:a160cb7cdd86 67 void TestMode(bool mode);
ky3orr 7:a160cb7cdd86 68
ky3orr 7:a160cb7cdd86 69 /**
ky3orr 7:a160cb7cdd86 70 * Sets amount of digits to be used by this display.
ky3orr 7:a160cb7cdd86 71 * @param digits_no 1 - one digit, (2-7), 8 - all 8 digits.
ky3orr 7:a160cb7cdd86 72 */
ky3orr 7:a160cb7cdd86 73 void UseDigitsNo(unsigned int digits_no);
jakowisp 2:828c62cc1861 74
jakowisp 4:e2b160410338 75 /**
ky3orr 7:a160cb7cdd86 76 * Selects for which digits Code-B data decoding is used.
ky3orr 7:a160cb7cdd86 77 * @param mode 0x00 - no decoding, 0x0F - digits 0-3, 0xFF - all digits.
ky3orr 7:a160cb7cdd86 78 */
ky3orr 7:a160cb7cdd86 79 void DecodeMode(unsigned int mode);
jakowisp 4:e2b160410338 80
jakowisp 4:e2b160410338 81 /**
ky3orr 7:a160cb7cdd86 82 * Sends data to selected digit.
ky3orr 7:a160cb7cdd86 83 * @param digit_no Selected digit (0-7).
ky3orr 7:a160cb7cdd86 84 * @param digit_no Data to display.
ky3orr 7:a160cb7cdd86 85 */
ky3orr 7:a160cb7cdd86 86 void WriteDigit(unsigned int digit_no, unsigned int value);
jakowisp 2:828c62cc1861 87
jakowisp 4:e2b160410338 88 /**
ky3orr 7:a160cb7cdd86 89 * Sets display brightness.
ky3orr 7:a160cb7cdd86 90 * @param intensity 0x00 - minimum brightness, 0x0F - maximum brightness.
ky3orr 7:a160cb7cdd86 91 */
ky3orr 7:a160cb7cdd86 92 void Intensity(unsigned int intensity);
ky3orr 7:a160cb7cdd86 93
ky3orr 7:a160cb7cdd86 94 /**
ky3orr 7:a160cb7cdd86 95 * Sets display operation mode.
ky3orr 7:a160cb7cdd86 96 * @param mode true - normal operation, false - shutdown mode.
ky3orr 7:a160cb7cdd86 97 */
ky3orr 7:a160cb7cdd86 98 void OperationMode(bool mode);
ky3orr 7:a160cb7cdd86 99
ky3orr 7:a160cb7cdd86 100 /**
ky3orr 7:a160cb7cdd86 101 * Initial setup of this display.
ky3orr 7:a160cb7cdd86 102 * 8-digit blank decimal display set to nimimal brightness.
ky3orr 7:a160cb7cdd86 103 * Supports display chain on single SPI (m_position > 0).
jakowisp 4:e2b160410338 104 */
ky3orr 7:a160cb7cdd86 105 void Setup(void);
jakowisp 1:d8589d1f368c 106 };
jakowisp 1:d8589d1f368c 107
jakowisp 1:d8589d1f368c 108 #endif