Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed ros_lib_kinetic
PCA9634.cpp@1:40bdbe1a93b7, 2018-06-22 (annotated)
- Committer:
- Knillinux
- Date:
- Fri Jun 22 02:09:50 2018 +0000
- Revision:
- 1:40bdbe1a93b7
Updates
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Knillinux | 1:40bdbe1a93b7 | 1 | |
| Knillinux | 1:40bdbe1a93b7 | 2 | #include "PCA9634.h" |
| Knillinux | 1:40bdbe1a93b7 | 3 | |
| Knillinux | 1:40bdbe1a93b7 | 4 | PCA9634::PCA9634(I2C *i2c, DigitalOut *inv_out_en, int addr) |
| Knillinux | 1:40bdbe1a93b7 | 5 | : i2c_(i2c), inv_out_en_(inv_out_en), addr_(addr) { |
| Knillinux | 1:40bdbe1a93b7 | 6 | *inv_out_en_ = 0; |
| Knillinux | 1:40bdbe1a93b7 | 7 | |
| Knillinux | 1:40bdbe1a93b7 | 8 | // Set Mode 1: Auto-increment on, oscillator on, do not respond to all-call |
| Knillinux | 1:40bdbe1a93b7 | 9 | writeReg(PCA9634_REG_MODE1, 0x80); |
| Knillinux | 1:40bdbe1a93b7 | 10 | // Set Mode 2: Don't invert logic, outputs change on ACK, LED outputs configured |
| Knillinux | 1:40bdbe1a93b7 | 11 | // in open-drain structure |
| Knillinux | 1:40bdbe1a93b7 | 12 | writeReg(PCA9634_REG_MODE2, 0x09); |
| Knillinux | 1:40bdbe1a93b7 | 13 | dimLEDs(); |
| Knillinux | 1:40bdbe1a93b7 | 14 | // Set all LED driver output states to PWM |
| Knillinux | 1:40bdbe1a93b7 | 15 | led_out_state_[0] = PCA9634_ALL_LED_TO_PWM; |
| Knillinux | 1:40bdbe1a93b7 | 16 | led_out_state_[1] = PCA9634_ALL_LED_TO_PWM; |
| Knillinux | 1:40bdbe1a93b7 | 17 | |
| Knillinux | 1:40bdbe1a93b7 | 18 | commandLEDOutState(); |
| Knillinux | 1:40bdbe1a93b7 | 19 | } |
| Knillinux | 1:40bdbe1a93b7 | 20 | |
| Knillinux | 1:40bdbe1a93b7 | 21 | void PCA9634::dimLEDs() { |
| Knillinux | 1:40bdbe1a93b7 | 22 | for (char reg = PCA_LED0; reg <= PCA_LED7; reg++) |
| Knillinux | 1:40bdbe1a93b7 | 23 | writeReg(reg, 0); |
| Knillinux | 1:40bdbe1a93b7 | 24 | } |
| Knillinux | 1:40bdbe1a93b7 | 25 | |
| Knillinux | 1:40bdbe1a93b7 | 26 | void PCA9634::disableLED(ledID led) { |
| Knillinux | 1:40bdbe1a93b7 | 27 | // Set correct registers to 00 |
| Knillinux | 1:40bdbe1a93b7 | 28 | if (led < LED4) { |
| Knillinux | 1:40bdbe1a93b7 | 29 | led_out_state_[0] &= ~(1UL << (2*(led-2))); |
| Knillinux | 1:40bdbe1a93b7 | 30 | led_out_state_[0] &= ~(1UL << (2*(led-2)+1)); |
| Knillinux | 1:40bdbe1a93b7 | 31 | } else { |
| Knillinux | 1:40bdbe1a93b7 | 32 | led_out_state_[1] &= ~(1UL << (2*(led-6))); |
| Knillinux | 1:40bdbe1a93b7 | 33 | led_out_state_[1] &= ~(1UL << (2*(led-6)+1)); |
| Knillinux | 1:40bdbe1a93b7 | 34 | } |
| Knillinux | 1:40bdbe1a93b7 | 35 | commandLEDOutState(); |
| Knillinux | 1:40bdbe1a93b7 | 36 | } |
| Knillinux | 1:40bdbe1a93b7 | 37 | |
| Knillinux | 1:40bdbe1a93b7 | 38 | void PCA9634::enableLED(ledID led) { |
| Knillinux | 1:40bdbe1a93b7 | 39 | // Set correct registers to 01 |
| Knillinux | 1:40bdbe1a93b7 | 40 | if (led < LED4) { |
| Knillinux | 1:40bdbe1a93b7 | 41 | led_out_state_[0] |= (1UL << (2*(led-2))); |
| Knillinux | 1:40bdbe1a93b7 | 42 | led_out_state_[0] &= ~(1UL << (2*(led-2)+1)); |
| Knillinux | 1:40bdbe1a93b7 | 43 | } else { |
| Knillinux | 1:40bdbe1a93b7 | 44 | led_out_state_[1] |= (1UL << (2*(led-6))); |
| Knillinux | 1:40bdbe1a93b7 | 45 | led_out_state_[1] &= ~(1UL << (2*(led-6)+1)); |
| Knillinux | 1:40bdbe1a93b7 | 46 | } |
| Knillinux | 1:40bdbe1a93b7 | 47 | commandLEDOutState(); |
| Knillinux | 1:40bdbe1a93b7 | 48 | } |
| Knillinux | 1:40bdbe1a93b7 | 49 | |
| Knillinux | 1:40bdbe1a93b7 | 50 | void PCA9634::commandLEDOutState() { |
| Knillinux | 1:40bdbe1a93b7 | 51 | writeReg(PCA9634_REG_LEDOUT0, led_out_state_[0]); |
| Knillinux | 1:40bdbe1a93b7 | 52 | writeReg(PCA9634_REG_LEDOUT1, led_out_state_[1]); |
| Knillinux | 1:40bdbe1a93b7 | 53 | } |
| Knillinux | 1:40bdbe1a93b7 | 54 | |
| Knillinux | 1:40bdbe1a93b7 | 55 | void PCA9634::commandLEDBrightness(ledID led, int brightness) { |
| Knillinux | 1:40bdbe1a93b7 | 56 | writeReg(led, (char) brightness); |
| Knillinux | 1:40bdbe1a93b7 | 57 | } |
| Knillinux | 1:40bdbe1a93b7 | 58 | |
| Knillinux | 1:40bdbe1a93b7 | 59 | int PCA9634::writeReg(char reg, char value) { |
| Knillinux | 1:40bdbe1a93b7 | 60 | char cmd[2]; |
| Knillinux | 1:40bdbe1a93b7 | 61 | cmd[0] = reg; |
| Knillinux | 1:40bdbe1a93b7 | 62 | cmd[1] = value; |
| Knillinux | 1:40bdbe1a93b7 | 63 | return i2c_->write(addr_, cmd, 2); |
| Knillinux | 1:40bdbe1a93b7 | 64 | } |