test

Committer:
williamweatherholtz
Date:
Mon Apr 16 13:15:07 2018 +0000
Revision:
0:ef4b1297d850
Child:
1:b686a4955357
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
williamweatherholtz 0:ef4b1297d850 1 /******************************************************************//**
williamweatherholtz 0:ef4b1297d850 2 * @file max7219.cpp
williamweatherholtz 0:ef4b1297d850 3 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
williamweatherholtz 0:ef4b1297d850 4 *
williamweatherholtz 0:ef4b1297d850 5 * Permission is hereby granted, free of charge, to any person obtaining a
williamweatherholtz 0:ef4b1297d850 6 * copy of this software and associated documentation files (the "Software"),
williamweatherholtz 0:ef4b1297d850 7 * to deal in the Software without restriction, including without limitation
williamweatherholtz 0:ef4b1297d850 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
williamweatherholtz 0:ef4b1297d850 9 * and/or sell copies of the Software, and to permit persons to whom the
williamweatherholtz 0:ef4b1297d850 10 * Software is furnished to do so, subject to the following conditions:
williamweatherholtz 0:ef4b1297d850 11 *
williamweatherholtz 0:ef4b1297d850 12 * The above copyright notice and this permission notice shall be included
williamweatherholtz 0:ef4b1297d850 13 * in all copies or substantial portions of the Software.
williamweatherholtz 0:ef4b1297d850 14 *
williamweatherholtz 0:ef4b1297d850 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
williamweatherholtz 0:ef4b1297d850 16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
williamweatherholtz 0:ef4b1297d850 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
williamweatherholtz 0:ef4b1297d850 18 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
williamweatherholtz 0:ef4b1297d850 19 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
williamweatherholtz 0:ef4b1297d850 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
williamweatherholtz 0:ef4b1297d850 21 * OTHER DEALINGS IN THE SOFTWARE.
williamweatherholtz 0:ef4b1297d850 22 *
williamweatherholtz 0:ef4b1297d850 23 * Except as contained in this notice, the name of Maxim Integrated
williamweatherholtz 0:ef4b1297d850 24 * Products, Inc. shall not be used except as stated in the Maxim Integrated
williamweatherholtz 0:ef4b1297d850 25 * Products, Inc. Branding Policy.
williamweatherholtz 0:ef4b1297d850 26 *
williamweatherholtz 0:ef4b1297d850 27 * The mere transfer of this software does not imply any licenses
williamweatherholtz 0:ef4b1297d850 28 * of trade secrets, proprietary technology, copyrights, patents,
williamweatherholtz 0:ef4b1297d850 29 * trademarks, maskwork rights, or any other form of intellectual
williamweatherholtz 0:ef4b1297d850 30 * property whatsoever. Maxim Integrated Products, Inc. retains all
williamweatherholtz 0:ef4b1297d850 31 * ownership rights.
williamweatherholtz 0:ef4b1297d850 32 **********************************************************************/
williamweatherholtz 0:ef4b1297d850 33
williamweatherholtz 0:ef4b1297d850 34
williamweatherholtz 0:ef4b1297d850 35 #include "max7219.h"
williamweatherholtz 0:ef4b1297d850 36
williamweatherholtz 0:ef4b1297d850 37
williamweatherholtz 0:ef4b1297d850 38 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 39 Max7219::Max7219(SPI *spi_bus, PinName cs): _p_spi(spi_bus)
williamweatherholtz 0:ef4b1297d850 40 {
williamweatherholtz 0:ef4b1297d850 41 _num_devices = 1;
williamweatherholtz 0:ef4b1297d850 42
williamweatherholtz 0:ef4b1297d850 43 _p_cs = new DigitalOut(cs, 1);
williamweatherholtz 0:ef4b1297d850 44 _spi_owner = false;
williamweatherholtz 0:ef4b1297d850 45 }
williamweatherholtz 0:ef4b1297d850 46
williamweatherholtz 0:ef4b1297d850 47
williamweatherholtz 0:ef4b1297d850 48 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 49 Max7219::Max7219(PinName mosi, PinName miso, PinName sclk, PinName cs)
williamweatherholtz 0:ef4b1297d850 50 {
williamweatherholtz 0:ef4b1297d850 51 _num_devices = 1;
williamweatherholtz 0:ef4b1297d850 52
williamweatherholtz 0:ef4b1297d850 53 _p_spi = new SPI(mosi, miso, sclk);
williamweatherholtz 0:ef4b1297d850 54 _p_cs = new DigitalOut(cs, 1);
williamweatherholtz 0:ef4b1297d850 55
williamweatherholtz 0:ef4b1297d850 56 _spi_owner = true;
williamweatherholtz 0:ef4b1297d850 57 }
williamweatherholtz 0:ef4b1297d850 58
williamweatherholtz 0:ef4b1297d850 59
williamweatherholtz 0:ef4b1297d850 60 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 61 Max7219::~Max7219()
williamweatherholtz 0:ef4b1297d850 62 {
williamweatherholtz 0:ef4b1297d850 63 delete _p_cs;
williamweatherholtz 0:ef4b1297d850 64
williamweatherholtz 0:ef4b1297d850 65 if(_spi_owner)
williamweatherholtz 0:ef4b1297d850 66 {
williamweatherholtz 0:ef4b1297d850 67 delete _p_spi;
williamweatherholtz 0:ef4b1297d850 68 }
williamweatherholtz 0:ef4b1297d850 69 }
williamweatherholtz 0:ef4b1297d850 70
williamweatherholtz 0:ef4b1297d850 71
williamweatherholtz 0:ef4b1297d850 72 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 73 int32_t Max7219::set_num_devices(uint8_t num_devices)
williamweatherholtz 0:ef4b1297d850 74 {
williamweatherholtz 0:ef4b1297d850 75 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 76
williamweatherholtz 0:ef4b1297d850 77 if(num_devices > 0)
williamweatherholtz 0:ef4b1297d850 78 {
williamweatherholtz 0:ef4b1297d850 79 _num_devices = num_devices;
williamweatherholtz 0:ef4b1297d850 80 rtn_val = _num_devices;
williamweatherholtz 0:ef4b1297d850 81 }
williamweatherholtz 0:ef4b1297d850 82
williamweatherholtz 0:ef4b1297d850 83 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 84 }
williamweatherholtz 0:ef4b1297d850 85
williamweatherholtz 0:ef4b1297d850 86
williamweatherholtz 0:ef4b1297d850 87 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 88 void Max7219::set_display_test(void)
williamweatherholtz 0:ef4b1297d850 89 {
williamweatherholtz 0:ef4b1297d850 90 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 91
williamweatherholtz 0:ef4b1297d850 92 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 93 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 94 {
williamweatherholtz 0:ef4b1297d850 95 _p_spi->write(MAX7219_DISPLAY_TEST);
williamweatherholtz 0:ef4b1297d850 96 _p_spi->write(1);
williamweatherholtz 0:ef4b1297d850 97 }
williamweatherholtz 0:ef4b1297d850 98 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 99 }
williamweatherholtz 0:ef4b1297d850 100
williamweatherholtz 0:ef4b1297d850 101
williamweatherholtz 0:ef4b1297d850 102 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 103 void Max7219::clear_display_test(void)
williamweatherholtz 0:ef4b1297d850 104 {
williamweatherholtz 0:ef4b1297d850 105 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 106
williamweatherholtz 0:ef4b1297d850 107 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 108 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 109 {
williamweatherholtz 0:ef4b1297d850 110 _p_spi->write(MAX7219_DISPLAY_TEST);
williamweatherholtz 0:ef4b1297d850 111 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 112 }
williamweatherholtz 0:ef4b1297d850 113 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 114 }
williamweatherholtz 0:ef4b1297d850 115
williamweatherholtz 0:ef4b1297d850 116
williamweatherholtz 0:ef4b1297d850 117 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 118 int32_t Max7219::init_device(max7219_configuration_t config)
williamweatherholtz 0:ef4b1297d850 119 {
williamweatherholtz 0:ef4b1297d850 120 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 121 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 122
williamweatherholtz 0:ef4b1297d850 123 if(config.device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 124 {
williamweatherholtz 0:ef4b1297d850 125 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 126 }
williamweatherholtz 0:ef4b1297d850 127 else if(config.device_number == 0)
williamweatherholtz 0:ef4b1297d850 128 {
williamweatherholtz 0:ef4b1297d850 129 //device numbering starts with index 1
williamweatherholtz 0:ef4b1297d850 130 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 131 }
williamweatherholtz 0:ef4b1297d850 132 else
williamweatherholtz 0:ef4b1297d850 133 {
williamweatherholtz 0:ef4b1297d850 134 //write DECODE_MODE register of device
williamweatherholtz 0:ef4b1297d850 135 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 136 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 137 {
williamweatherholtz 0:ef4b1297d850 138 if(config.device_number == idx)
williamweatherholtz 0:ef4b1297d850 139 {
williamweatherholtz 0:ef4b1297d850 140 _p_spi->write(MAX7219_DECODE_MODE);
williamweatherholtz 0:ef4b1297d850 141 _p_spi->write(config.decode_mode);
williamweatherholtz 0:ef4b1297d850 142 }
williamweatherholtz 0:ef4b1297d850 143 else
williamweatherholtz 0:ef4b1297d850 144 {
williamweatherholtz 0:ef4b1297d850 145 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 146 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 147 }
williamweatherholtz 0:ef4b1297d850 148 }
williamweatherholtz 0:ef4b1297d850 149 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 150
williamweatherholtz 0:ef4b1297d850 151 wait_us(1);
williamweatherholtz 0:ef4b1297d850 152
williamweatherholtz 0:ef4b1297d850 153 //write INTENSITY register of device
williamweatherholtz 0:ef4b1297d850 154 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 155 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 156 {
williamweatherholtz 0:ef4b1297d850 157 if(config.device_number == idx)
williamweatherholtz 0:ef4b1297d850 158 {
williamweatherholtz 0:ef4b1297d850 159 _p_spi->write(MAX7219_INTENSITY);
williamweatherholtz 0:ef4b1297d850 160 _p_spi->write(config.intensity);
williamweatherholtz 0:ef4b1297d850 161 }
williamweatherholtz 0:ef4b1297d850 162 else
williamweatherholtz 0:ef4b1297d850 163 {
williamweatherholtz 0:ef4b1297d850 164 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 165 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 166 }
williamweatherholtz 0:ef4b1297d850 167 }
williamweatherholtz 0:ef4b1297d850 168 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 169
williamweatherholtz 0:ef4b1297d850 170 wait_us(1);
williamweatherholtz 0:ef4b1297d850 171
williamweatherholtz 0:ef4b1297d850 172 //write SCAN_LIMT register of device
williamweatherholtz 0:ef4b1297d850 173 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 174 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 175 {
williamweatherholtz 0:ef4b1297d850 176 if(config.device_number == idx)
williamweatherholtz 0:ef4b1297d850 177 {
williamweatherholtz 0:ef4b1297d850 178 _p_spi->write(MAX7219_SCAN_LIMIT);
williamweatherholtz 0:ef4b1297d850 179 _p_spi->write(config.scan_limit);
williamweatherholtz 0:ef4b1297d850 180 }
williamweatherholtz 0:ef4b1297d850 181 else
williamweatherholtz 0:ef4b1297d850 182 {
williamweatherholtz 0:ef4b1297d850 183 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 184 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 185 }
williamweatherholtz 0:ef4b1297d850 186 }
williamweatherholtz 0:ef4b1297d850 187 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 188
williamweatherholtz 0:ef4b1297d850 189 wait_us(1);
williamweatherholtz 0:ef4b1297d850 190
williamweatherholtz 0:ef4b1297d850 191 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 192 }
williamweatherholtz 0:ef4b1297d850 193
williamweatherholtz 0:ef4b1297d850 194 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 195 }
williamweatherholtz 0:ef4b1297d850 196
williamweatherholtz 0:ef4b1297d850 197
williamweatherholtz 0:ef4b1297d850 198 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 199 void Max7219::init_display(max7219_configuration_t config)
williamweatherholtz 0:ef4b1297d850 200 {
williamweatherholtz 0:ef4b1297d850 201 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 202
williamweatherholtz 0:ef4b1297d850 203 //write DECODE_MODE register of all devices
williamweatherholtz 0:ef4b1297d850 204 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 205 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 206 {
williamweatherholtz 0:ef4b1297d850 207 _p_spi->write(MAX7219_DECODE_MODE);
williamweatherholtz 0:ef4b1297d850 208 _p_spi->write(config.decode_mode);
williamweatherholtz 0:ef4b1297d850 209 }
williamweatherholtz 0:ef4b1297d850 210 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 211
williamweatherholtz 0:ef4b1297d850 212 wait_us(1);
williamweatherholtz 0:ef4b1297d850 213
williamweatherholtz 0:ef4b1297d850 214 //write INTENSITY register of all devices
williamweatherholtz 0:ef4b1297d850 215 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 216 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 217 {
williamweatherholtz 0:ef4b1297d850 218 _p_spi->write(MAX7219_INTENSITY);
williamweatherholtz 0:ef4b1297d850 219 _p_spi->write(config.intensity);
williamweatherholtz 0:ef4b1297d850 220 }
williamweatherholtz 0:ef4b1297d850 221 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 222
williamweatherholtz 0:ef4b1297d850 223 wait_us(1);
williamweatherholtz 0:ef4b1297d850 224
williamweatherholtz 0:ef4b1297d850 225 //write SCAN_LIMT register of all devices
williamweatherholtz 0:ef4b1297d850 226 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 227 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 228 {
williamweatherholtz 0:ef4b1297d850 229 _p_spi->write(MAX7219_SCAN_LIMIT);
williamweatherholtz 0:ef4b1297d850 230 _p_spi->write(config.scan_limit);
williamweatherholtz 0:ef4b1297d850 231 }
williamweatherholtz 0:ef4b1297d850 232 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 233
williamweatherholtz 0:ef4b1297d850 234 wait_us(1);
williamweatherholtz 0:ef4b1297d850 235 }
williamweatherholtz 0:ef4b1297d850 236
williamweatherholtz 0:ef4b1297d850 237
williamweatherholtz 0:ef4b1297d850 238 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 239 int32_t Max7219::enable_device(uint8_t device_number)
williamweatherholtz 0:ef4b1297d850 240 {
williamweatherholtz 0:ef4b1297d850 241 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 242 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 243
williamweatherholtz 0:ef4b1297d850 244 if(device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 245 {
williamweatherholtz 0:ef4b1297d850 246 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 247 }
williamweatherholtz 0:ef4b1297d850 248 else if(device_number == 0)
williamweatherholtz 0:ef4b1297d850 249 {
williamweatherholtz 0:ef4b1297d850 250 //device numbering starts with index 1
williamweatherholtz 0:ef4b1297d850 251 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 252 }
williamweatherholtz 0:ef4b1297d850 253 else
williamweatherholtz 0:ef4b1297d850 254 {
williamweatherholtz 0:ef4b1297d850 255 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 256 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 257 {
williamweatherholtz 0:ef4b1297d850 258 if(device_number == idx)
williamweatherholtz 0:ef4b1297d850 259 {
williamweatherholtz 0:ef4b1297d850 260 _p_spi->write(MAX7219_SHUTDOWN);
williamweatherholtz 0:ef4b1297d850 261 _p_spi->write(1);
williamweatherholtz 0:ef4b1297d850 262 }
williamweatherholtz 0:ef4b1297d850 263 else
williamweatherholtz 0:ef4b1297d850 264 {
williamweatherholtz 0:ef4b1297d850 265 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 266 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 267 }
williamweatherholtz 0:ef4b1297d850 268 }
williamweatherholtz 0:ef4b1297d850 269 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 270
williamweatherholtz 0:ef4b1297d850 271 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 272 }
williamweatherholtz 0:ef4b1297d850 273
williamweatherholtz 0:ef4b1297d850 274 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 275 }
williamweatherholtz 0:ef4b1297d850 276
williamweatherholtz 0:ef4b1297d850 277
williamweatherholtz 0:ef4b1297d850 278 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 279 void Max7219::enable_display(void)
williamweatherholtz 0:ef4b1297d850 280 {
williamweatherholtz 0:ef4b1297d850 281 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 282
williamweatherholtz 0:ef4b1297d850 283 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 284 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 285 {
williamweatherholtz 0:ef4b1297d850 286 _p_spi->write(MAX7219_SHUTDOWN);
williamweatherholtz 0:ef4b1297d850 287 _p_spi->write(1);
williamweatherholtz 0:ef4b1297d850 288 }
williamweatherholtz 0:ef4b1297d850 289 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 290 }
williamweatherholtz 0:ef4b1297d850 291
williamweatherholtz 0:ef4b1297d850 292
williamweatherholtz 0:ef4b1297d850 293 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 294 int32_t Max7219::disable_device(uint8_t device_number)
williamweatherholtz 0:ef4b1297d850 295 {
williamweatherholtz 0:ef4b1297d850 296 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 297 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 298
williamweatherholtz 0:ef4b1297d850 299 if(device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 300 {
williamweatherholtz 0:ef4b1297d850 301 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 302 }
williamweatherholtz 0:ef4b1297d850 303 else if(device_number == 0)
williamweatherholtz 0:ef4b1297d850 304 {
williamweatherholtz 0:ef4b1297d850 305 //device numbering starts with index 1
williamweatherholtz 0:ef4b1297d850 306 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 307 }
williamweatherholtz 0:ef4b1297d850 308 else
williamweatherholtz 0:ef4b1297d850 309 {
williamweatherholtz 0:ef4b1297d850 310 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 311 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 312 {
williamweatherholtz 0:ef4b1297d850 313 if(device_number == idx)
williamweatherholtz 0:ef4b1297d850 314 {
williamweatherholtz 0:ef4b1297d850 315 _p_spi->write(MAX7219_SHUTDOWN);
williamweatherholtz 0:ef4b1297d850 316 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 317 }
williamweatherholtz 0:ef4b1297d850 318 else
williamweatherholtz 0:ef4b1297d850 319 {
williamweatherholtz 0:ef4b1297d850 320 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 321 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 322 }
williamweatherholtz 0:ef4b1297d850 323 }
williamweatherholtz 0:ef4b1297d850 324 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 325
williamweatherholtz 0:ef4b1297d850 326 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 327 }
williamweatherholtz 0:ef4b1297d850 328
williamweatherholtz 0:ef4b1297d850 329 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 330 }
williamweatherholtz 0:ef4b1297d850 331
williamweatherholtz 0:ef4b1297d850 332
williamweatherholtz 0:ef4b1297d850 333 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 334 void Max7219::disable_display(void)
williamweatherholtz 0:ef4b1297d850 335 {
williamweatherholtz 0:ef4b1297d850 336 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 337
williamweatherholtz 0:ef4b1297d850 338 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 339 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 340 {
williamweatherholtz 0:ef4b1297d850 341 _p_spi->write(MAX7219_SHUTDOWN);
williamweatherholtz 0:ef4b1297d850 342 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 343 }
williamweatherholtz 0:ef4b1297d850 344 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 345 }
williamweatherholtz 0:ef4b1297d850 346
williamweatherholtz 0:ef4b1297d850 347
williamweatherholtz 0:ef4b1297d850 348
williamweatherholtz 0:ef4b1297d850 349 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 350 int32_t Max7219::write_digit(uint8_t device_number, uint8_t digit, uint8_t data)
williamweatherholtz 0:ef4b1297d850 351 {
williamweatherholtz 0:ef4b1297d850 352 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 353 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 354
williamweatherholtz 0:ef4b1297d850 355 if(digit > MAX7219_DIGIT_7)
williamweatherholtz 0:ef4b1297d850 356 {
williamweatherholtz 0:ef4b1297d850 357 rtn_val = -3;
williamweatherholtz 0:ef4b1297d850 358 }
williamweatherholtz 0:ef4b1297d850 359 else if(digit < MAX7219_DIGIT_0)
williamweatherholtz 0:ef4b1297d850 360 {
williamweatherholtz 0:ef4b1297d850 361 rtn_val = -4;
williamweatherholtz 0:ef4b1297d850 362 }
williamweatherholtz 0:ef4b1297d850 363 else
williamweatherholtz 0:ef4b1297d850 364 {
williamweatherholtz 0:ef4b1297d850 365 if(device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 366 {
williamweatherholtz 0:ef4b1297d850 367 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 368 }
williamweatherholtz 0:ef4b1297d850 369 else if(device_number == 0)
williamweatherholtz 0:ef4b1297d850 370 {
williamweatherholtz 0:ef4b1297d850 371 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 372 }
williamweatherholtz 0:ef4b1297d850 373 else
williamweatherholtz 0:ef4b1297d850 374 {
williamweatherholtz 0:ef4b1297d850 375 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 376 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 377 {
williamweatherholtz 0:ef4b1297d850 378 if(idx == device_number)
williamweatherholtz 0:ef4b1297d850 379 {
williamweatherholtz 0:ef4b1297d850 380 _p_spi->write(digit);
williamweatherholtz 0:ef4b1297d850 381 _p_spi->write(data);
williamweatherholtz 0:ef4b1297d850 382 }
williamweatherholtz 0:ef4b1297d850 383 else
williamweatherholtz 0:ef4b1297d850 384 {
williamweatherholtz 0:ef4b1297d850 385 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 386 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 387 }
williamweatherholtz 0:ef4b1297d850 388 }
williamweatherholtz 0:ef4b1297d850 389 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 390
williamweatherholtz 0:ef4b1297d850 391 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 392 }
williamweatherholtz 0:ef4b1297d850 393 }
williamweatherholtz 0:ef4b1297d850 394
williamweatherholtz 0:ef4b1297d850 395 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 396 }
williamweatherholtz 0:ef4b1297d850 397
williamweatherholtz 0:ef4b1297d850 398
williamweatherholtz 0:ef4b1297d850 399 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 400 int32_t Max7219::clear_digit(uint8_t device_number, uint8_t digit)
williamweatherholtz 0:ef4b1297d850 401 {
williamweatherholtz 0:ef4b1297d850 402 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 403 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 404
williamweatherholtz 0:ef4b1297d850 405 if(digit > MAX7219_DIGIT_7)
williamweatherholtz 0:ef4b1297d850 406 {
williamweatherholtz 0:ef4b1297d850 407 rtn_val = -3;
williamweatherholtz 0:ef4b1297d850 408 }
williamweatherholtz 0:ef4b1297d850 409 else if(digit < MAX7219_DIGIT_0)
williamweatherholtz 0:ef4b1297d850 410 {
williamweatherholtz 0:ef4b1297d850 411 rtn_val = -4;
williamweatherholtz 0:ef4b1297d850 412 }
williamweatherholtz 0:ef4b1297d850 413 else
williamweatherholtz 0:ef4b1297d850 414 {
williamweatherholtz 0:ef4b1297d850 415 if(device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 416 {
williamweatherholtz 0:ef4b1297d850 417 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 418 }
williamweatherholtz 0:ef4b1297d850 419 else if(device_number == 0)
williamweatherholtz 0:ef4b1297d850 420 {
williamweatherholtz 0:ef4b1297d850 421 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 422 }
williamweatherholtz 0:ef4b1297d850 423 else
williamweatherholtz 0:ef4b1297d850 424 {
williamweatherholtz 0:ef4b1297d850 425 _p_cs->write(0);
williamweatherholtz 0:ef4b1297d850 426 for(idx = _num_devices; idx > 0; idx--)
williamweatherholtz 0:ef4b1297d850 427 {
williamweatherholtz 0:ef4b1297d850 428 if(idx == device_number)
williamweatherholtz 0:ef4b1297d850 429 {
williamweatherholtz 0:ef4b1297d850 430 _p_spi->write(digit);
williamweatherholtz 0:ef4b1297d850 431 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 432 }
williamweatherholtz 0:ef4b1297d850 433 else
williamweatherholtz 0:ef4b1297d850 434 {
williamweatherholtz 0:ef4b1297d850 435 _p_spi->write(MAX7219_NO_OP);
williamweatherholtz 0:ef4b1297d850 436 _p_spi->write(0);
williamweatherholtz 0:ef4b1297d850 437 }
williamweatherholtz 0:ef4b1297d850 438 }
williamweatherholtz 0:ef4b1297d850 439 _p_cs->write(1);
williamweatherholtz 0:ef4b1297d850 440
williamweatherholtz 0:ef4b1297d850 441 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 442 }
williamweatherholtz 0:ef4b1297d850 443 }
williamweatherholtz 0:ef4b1297d850 444
williamweatherholtz 0:ef4b1297d850 445 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 446 }
williamweatherholtz 0:ef4b1297d850 447
williamweatherholtz 0:ef4b1297d850 448
williamweatherholtz 0:ef4b1297d850 449 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 450 int32_t Max7219::device_all_on(uint8_t device_number)
williamweatherholtz 0:ef4b1297d850 451 {
williamweatherholtz 0:ef4b1297d850 452 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 453 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 454
williamweatherholtz 0:ef4b1297d850 455 if(device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 456 {
williamweatherholtz 0:ef4b1297d850 457 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 458 }
williamweatherholtz 0:ef4b1297d850 459 else if(device_number == 0)
williamweatherholtz 0:ef4b1297d850 460 {
williamweatherholtz 0:ef4b1297d850 461 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 462 }
williamweatherholtz 0:ef4b1297d850 463 else
williamweatherholtz 0:ef4b1297d850 464 {
williamweatherholtz 0:ef4b1297d850 465 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 466
williamweatherholtz 0:ef4b1297d850 467 //writes every digit of given device to 0xFF
williamweatherholtz 0:ef4b1297d850 468 for(idx = 0; idx < 8; idx++)
williamweatherholtz 0:ef4b1297d850 469 {
williamweatherholtz 0:ef4b1297d850 470 if(rtn_val == 0)
williamweatherholtz 0:ef4b1297d850 471 {
williamweatherholtz 0:ef4b1297d850 472 rtn_val = write_digit(device_number, (idx + 1), 0xFF);
williamweatherholtz 0:ef4b1297d850 473 }
williamweatherholtz 0:ef4b1297d850 474 }
williamweatherholtz 0:ef4b1297d850 475 }
williamweatherholtz 0:ef4b1297d850 476
williamweatherholtz 0:ef4b1297d850 477 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 478 }
williamweatherholtz 0:ef4b1297d850 479
williamweatherholtz 0:ef4b1297d850 480
williamweatherholtz 0:ef4b1297d850 481 //*********************************************************************
williamweatherholtz 0:ef4b1297d850 482 int32_t Max7219::device_all_off(uint8_t device_number)
williamweatherholtz 0:ef4b1297d850 483 {
williamweatherholtz 0:ef4b1297d850 484 int32_t rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 485 uint8_t idx = 0;
williamweatherholtz 0:ef4b1297d850 486
williamweatherholtz 0:ef4b1297d850 487 if(device_number > _num_devices)
williamweatherholtz 0:ef4b1297d850 488 {
williamweatherholtz 0:ef4b1297d850 489 rtn_val = -1;
williamweatherholtz 0:ef4b1297d850 490 }
williamweatherholtz 0:ef4b1297d850 491 else if(device_number == 0)
williamweatherholtz 0:ef4b1297d850 492 {
williamweatherholtz 0:ef4b1297d850 493 rtn_val = -2;
williamweatherholtz 0:ef4b1297d850 494 }
williamweatherholtz 0:ef4b1297d850 495 else
williamweatherholtz 0:ef4b1297d850 496 {
williamweatherholtz 0:ef4b1297d850 497 rtn_val = 0;
williamweatherholtz 0:ef4b1297d850 498
williamweatherholtz 0:ef4b1297d850 499 //writes every digit of given device to 0
williamweatherholtz 0:ef4b1297d850 500 for(idx = 0; idx < 8; idx++)
williamweatherholtz 0:ef4b1297d850 501 {
williamweatherholtz 0:ef4b1297d850 502 if(rtn_val == 0)
williamweatherholtz 0:ef4b1297d850 503 {
williamweatherholtz 0:ef4b1297d850 504 rtn_val = write_digit(device_number, (idx + 1), 0);
williamweatherholtz 0:ef4b1297d850 505 }
williamweatherholtz 0:ef4b1297d850 506 }
williamweatherholtz 0:ef4b1297d850 507 }
williamweatherholtz 0:ef4b1297d850 508
williamweatherholtz 0:ef4b1297d850 509 return(rtn_val);
williamweatherholtz 0:ef4b1297d850 510 }
williamweatherholtz 0:ef4b1297d850 511
williamweatherholtz 0:ef4b1297d850 512
williamweatherholtz 0:ef4b1297d850 513 void Max7219::display_all_on(void)
williamweatherholtz 0:ef4b1297d850 514 {
williamweatherholtz 0:ef4b1297d850 515 uint8_t idx, idy;
williamweatherholtz 0:ef4b1297d850 516
williamweatherholtz 0:ef4b1297d850 517 //writes every digit of every device to 0xFF
williamweatherholtz 0:ef4b1297d850 518 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 519 {
williamweatherholtz 0:ef4b1297d850 520 for(idy = 0; idy < MAX7219_DIGIT_7; idy++)
williamweatherholtz 0:ef4b1297d850 521 {
williamweatherholtz 0:ef4b1297d850 522 write_digit((idx + 1), (idy + 1), 0xFF);
williamweatherholtz 0:ef4b1297d850 523 }
williamweatherholtz 0:ef4b1297d850 524 }
williamweatherholtz 0:ef4b1297d850 525 }
williamweatherholtz 0:ef4b1297d850 526
williamweatherholtz 0:ef4b1297d850 527
williamweatherholtz 0:ef4b1297d850 528 void Max7219::display_all_off(void)
williamweatherholtz 0:ef4b1297d850 529 {
williamweatherholtz 0:ef4b1297d850 530 uint8_t idx, idy;
williamweatherholtz 0:ef4b1297d850 531
williamweatherholtz 0:ef4b1297d850 532 //writes every digit of every device to 0
williamweatherholtz 0:ef4b1297d850 533 for(idx = 0; idx < _num_devices; idx++)
williamweatherholtz 0:ef4b1297d850 534 {
williamweatherholtz 0:ef4b1297d850 535 for(idy = 0; idy < MAX7219_DIGIT_7; idy++)
williamweatherholtz 0:ef4b1297d850 536 {
williamweatherholtz 0:ef4b1297d850 537 write_digit((idx + 1), (idy + 1), 0);
williamweatherholtz 0:ef4b1297d850 538 }
williamweatherholtz 0:ef4b1297d850 539 }
williamweatherholtz 0:ef4b1297d850 540 }
williamweatherholtz 0:ef4b1297d850 541