diff --git a/examples/z1/test-tlc59116.c b/examples/z1/test-tlc59116.c index cd8e24e3e..a7f3dd4e7 100644 --- a/examples/z1/test-tlc59116.c +++ b/examples/z1/test-tlc59116.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Swedish Institute of Computer Science. + * Copyright (c) 2013, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -54,22 +54,25 @@ AUTOSTART_PROCESSES(&tlc59116_process); static struct etimer et; static uint8_t count = 0; -PROCESS_THREAD(tlc59116_process, ev, data) { +PROCESS_THREAD(tlc59116_process, ev, data) +{ PROCESS_BEGIN(); { /* Start and setup the led driver with default values, eg outputs on and pwm enabled and 0. */ tlc59116_init(); - while (1) { + while(1) { - tlc59116_led(count,0x00); - tlc59116_led((count+1)%16,0x20); - tlc59116_led((count+2)%16,0x40); - tlc59116_led((count+3)%16,0xFF); + tlc59116_led(count, 0x00); + tlc59116_led((count + 1) % 16, 0x20); + tlc59116_led((count + 2) % 16, 0x40); + tlc59116_led((count + 3) % 16, 0xFF); count++; - if(count>15) count=0; + if(count > 15) { + count = 0; + } etimer_set(&et, BLINK_INTERVAL); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); diff --git a/platform/z1/Makefile.common b/platform/z1/Makefile.common index 2eb30ac89..da194f9f7 100644 --- a/platform/z1/Makefile.common +++ b/platform/z1/Makefile.common @@ -17,7 +17,7 @@ ARCH=msp430.c leds.c watchdog.c xmem.c \ checkpoint-arch.c slip.c slip_uart0.c \ z1-phidgets.c sht11.c sht11-sensor.c light-sensor.c \ battery-sensor.c sky-sensors.c tmp102.c temperature-sensor.c light-ziglet.c \ - relay-phidget.c + relay-phidget.c tlc59116.c CONTIKI_TARGET_DIRS = . dev apps net ifndef CONTIKI_TARGET_MAIN @@ -33,7 +33,7 @@ CFLAGS += -DMACID=$(nodemac) endif CONTIKI_TARGET_SOURCEFILES += $(ARCH) $(UIPDRIVERS) -CONTIKI_TARGET_SOURCEFILES += i2cmaster.c adxl345.c tlc59116.c +CONTIKI_TARGET_SOURCEFILES += i2cmaster.c adxl345.c MCU=msp430f2617 include $(CONTIKI)/cpu/msp430/Makefile.msp430 diff --git a/platform/z1/dev/tlc59116.c b/platform/z1/dev/tlc59116.c index df4c83ca3..0efbf5412 100644 --- a/platform/z1/dev/tlc59116.c +++ b/platform/z1/dev/tlc59116.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Swedish Institute of Computer Science. + * Copyright (c) 2013, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,7 +32,7 @@ /** * \file - * Device drivers for tlc5916 i2c led driver on Zolertia Z1. + * Device drivers for tlc59116 i2c led driver on Zolertia Z1. * See http://www.ti.com/product/tlc59116 for datasheet. * \author * Jelmer Tiete, VUB @@ -47,117 +47,129 @@ /*---------------------------------------------------------------------------*/ /* Write to a register. - args: - reg register to write to - val value to write -*/ + * args: + * reg register to write to + * val value to write + */ void -tlc59116_write_reg(uint8_t reg, uint8_t val) { - uint8_t tx_buf[] = {reg, val}; +tlc59116_write_reg(uint8_t reg, uint8_t val) +{ + uint8_t tx_buf[] = { reg, val }; i2c_transmitinit(TLC59116_ADDR); - while (i2c_busy()); + while(i2c_busy()); PRINTFDEBUG("I2C Ready to TX\n"); i2c_transmit_n(2, tx_buf); - while (i2c_busy()); + while(i2c_busy()); PRINTFDEBUG("WRITE_REG 0x%02X @ reg 0x%02X\n", val, reg); } /*---------------------------------------------------------------------------*/ /* Write several registers from a stream. - args: - len number of bytes to write - data pointer to where the data is written from - - First byte in stream must be the register address to begin writing to. - The data is then written from second byte and increasing. */ + * args: + * len number of bytes to write + * data pointer to where the data is written from + * + * First byte in stream must be the register address to begin writing to. + * The data is then written from second byte and increasing. + */ void -tlc59116_write_stream(uint8_t len, uint8_t *data) { +tlc59116_write_stream(uint8_t len, uint8_t * data) +{ i2c_transmitinit(TLC59116_ADDR); - while (i2c_busy()); + while(i2c_busy()); PRINTFDEBUG("I2C Ready to TX(stream)\n"); - i2c_transmit_n(len, data); // start tx and send conf reg - while (i2c_busy()); + i2c_transmit_n(len, data); // start tx and send conf reg + while(i2c_busy()); PRINTFDEBUG("WRITE_STR %u B to 0x%02X\n", len, data[0]); } /*---------------------------------------------------------------------------*/ /* Read one register. - args: - reg what register to read - returns the value of the read register -*/ + * args: + * reg what register to read + * returns the value of the read register + */ uint8_t -tlc59116_read_reg(uint8_t reg) { +tlc59116_read_reg(uint8_t reg) +{ uint8_t retVal = 0; uint8_t rtx = reg; + PRINTFDEBUG("READ_REG 0x%02X\n", reg); /* transmit the register to read */ i2c_transmitinit(TLC59116_ADDR); - while (i2c_busy()); + while(i2c_busy()); i2c_transmit_n(1, &rtx); - while (i2c_busy()); + while(i2c_busy()); /* receive the data */ i2c_receiveinit(TLC59116_ADDR); - while (i2c_busy()); + while(i2c_busy()); i2c_receive_n(1, &retVal); - while (i2c_busy()); + while(i2c_busy()); return retVal; } /*---------------------------------------------------------------------------*/ /* Read several registers in a stream. - args: - reg what register to start reading from - len number of bytes to read - whereto pointer to where the data is saved -*/ + * args: + * reg what register to start reading from + * len number of bytes to read + * whereto pointer to where the data is saved + */ void -tlc59116_read_stream(uint8_t reg, uint8_t len, uint8_t *whereto) { +tlc59116_read_stream(uint8_t reg, uint8_t len, uint8_t * whereto) +{ uint8_t rtx = reg; + PRINTFDEBUG("READ_STR %u B from 0x%02X\n", len, reg); /* transmit the register to start reading from */ i2c_transmitinit(TLC59116_ADDR); - while (i2c_busy()); + while(i2c_busy()); i2c_transmit_n(1, &rtx); - while (i2c_busy()); + while(i2c_busy()); /* receive the data */ i2c_receiveinit(TLC59116_ADDR); - while (i2c_busy()); + while(i2c_busy()); i2c_receive_n(len, whereto); - while (i2c_busy()); + while(i2c_busy()); } /*---------------------------------------------------------------------------*/ /* Set pwm value for individual led. Make sure PWM mode is enabled. -*/ + * args: + * led led output -> 0 till 15 + * pwm led pwm value + */ void -tlc59116_led(uint8_t led, uint8_t pwm) { - if (led<0 | led>15) { +tlc59116_led(uint8_t led, uint8_t pwm) +{ + if(led < 0 | led > 15) { PRINTFDEBUG("TLC59116: wrong led value."); - }else{ - tlc59116_write_reg(led+TLC59116_PWM0, pwm); + } else { + tlc59116_write_reg(led + TLC59116_PWM0, pwm); } } /*---------------------------------------------------------------------------*/ /* Init the led driver: ports, pins, registers, interrupts (none enabled), I2C, - default threshold values etc. -*/ + * default threshold values etc. + */ void -tlc59116_init(void) { +tlc59116_init(void) +{ /* Set up ports and pins for I2C communication */ i2c_enable(); @@ -165,14 +177,15 @@ tlc59116_init(void) { tlc59116_write_reg(TLC59116_MODE1, TLC59116_MODE1_DEFAULT); tlc59116_write_reg(TLC59116_MODE2, TLC59116_MODE2_DEFAULT); - /*Set all PWM values to 0x00 (off)*/ - //This would maybe be better with a SWRST - uint8_t tx_buf[] = {TLC59116_PWM0_AUTOINCR,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - tlc59116_write_stream(17,&tx_buf); + /*Set all PWM values to 0x00 (off) */ + /*This would maybe be better with a SWRST */ + uint8_t tx_buf[] = + { TLC59116_PWM0_AUTOINCR, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + tlc59116_write_stream(17, &tx_buf); /* set all leds to PWM control */ - tlc59116_write_reg(TLC59116_LEDOUT0,TLC59116_LEDOUT_PWM); - tlc59116_write_reg(TLC59116_LEDOUT1,TLC59116_LEDOUT_PWM); - tlc59116_write_reg(TLC59116_LEDOUT2,TLC59116_LEDOUT_PWM); - tlc59116_write_reg(TLC59116_LEDOUT3,TLC59116_LEDOUT_PWM); + tlc59116_write_reg(TLC59116_LEDOUT0, TLC59116_LEDOUT_PWM); + tlc59116_write_reg(TLC59116_LEDOUT1, TLC59116_LEDOUT_PWM); + tlc59116_write_reg(TLC59116_LEDOUT2, TLC59116_LEDOUT_PWM); + tlc59116_write_reg(TLC59116_LEDOUT3, TLC59116_LEDOUT_PWM); } diff --git a/platform/z1/dev/tlc59116.h b/platform/z1/dev/tlc59116.h index 4845967fd..0eb9b8d2f 100644 --- a/platform/z1/dev/tlc59116.h +++ b/platform/z1/dev/tlc59116.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Swedish Institute of Computer Science. + * Copyright (c) 2013, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -53,66 +53,66 @@ /* -------------------------------------------------------------------------- */ /* Init the led driver: ports, pins, registers, I2C*/ -void tlc59116_init(void); +void tlc59116_init(void); /* Write to a register. - args: - reg register to write to - val value to write -*/ -void tlc59116_write_reg(uint8_t reg, uint8_t val); + * args: + * reg register to write to + * val value to write + */ +void tlc59116_write_reg(uint8_t reg, uint8_t val); /* Write several registers from a stream. - args: - len number of bytes to read - data pointer to where the data is read from - First byte in stream must be the register address to begin writing to. - The data is then written from the second byte and increasing. The address byte - is not included in length len. -*/ -void tlc59116_write_stream(uint8_t len, uint8_t *data); + * args: + * len number of bytes to read + * data pointer to where the data is read from + * First byte in stream must be the register address to begin writing to. + * The data is then written from the second byte and increasing. The address byte + * is not included in length len. + */ +void tlc59116_write_stream(uint8_t len, uint8_t * data); /* Read one register. - args: - reg what register to read - returns the value of the read register -*/ -uint8_t tlc59116_read_reg(uint8_t reg); + * args: + * reg what register to read + * returns the value of the read register + */ +uint8_t tlc59116_read_reg(uint8_t reg); /* Read several registers in a stream. - args: - reg what register to start reading from - len number of bytes to read - whereto pointer to where the data is saved -*/ -void tlc59116_read_stream(uint8_t reg, uint8_t len, uint8_t *whereto); + * args: + * reg what register to start reading from + * len number of bytes to read + * whereto pointer to where the data is saved + */ +void tlc59116_read_stream(uint8_t reg, uint8_t len, uint8_t * whereto); /* Set pwm value for individual led - args: - led led output -> 0 till 15 - pwm led pwm value -*/ -void tlc59116_led(uint8_t led, uint8_t pwm); + * args: + * led led output -> 0 till 15 + * pwm led pwm value + */ +void tlc59116_led(uint8_t led, uint8_t pwm); /* -------------------------------------------------------------------------- */ /* Application definitions, change if required by application. */ /* Suggested defaults according to the data sheet etc */ -#define TLC59116_MODE1_DEFAULT 0x80 // -#define TLC59116_MODE2_DEFAULT 0x00 // +#define TLC59116_MODE1_DEFAULT 0x00 // Default (no sub or all call) + OSC on +#define TLC59116_MODE2_DEFAULT 0x00 // Default (output change on stop) -#define TLC59116_LEDOUT_PWM 0xAA // LDRx = 01 -> PWM, 4 leds per reg: 01010101 -> 0xAA +#define TLC59116_LEDOUT_PWM 0xAA // LDRx = 01 -> PWM; 4 leds per reg: 01010101b -> 0xAA /* -------------------------------------------------------------------------- */ /* Reference definitions, should not be changed */ /* TLC59116 slave address */ -#define TLC59116_ADDR 0x60 //7bit adress, 8bit write adress: 0xC0 - //address with all address pins pulled to ground +#define TLC59116_ADDR 0x60 //7bit adress, 8bit write adress: 0xC0 + //address with all address pins pulled to ground /* TLC59116 registers */ #define TLC59116_MODE1 0x00 #define TLC59116_MODE2 0x01 -#define TLC59116_PWM0_AUTOINCR 0xA2 // +#define TLC59116_PWM0_AUTOINCR 0xA2 //auto increment address for first pwm register #define TLC59116_PWM0 0x02 #define TLC59116_PWM1 0x03 #define TLC59116_PWM2 0x04 @@ -139,4 +139,4 @@ void tlc59116_led(uint8_t led, uint8_t pwm); /* More registers follow, but not used in this implementation */ /* -------------------------------------------------------------------------- */ -#endif /* ifndef __ADXL345_H__ */ +#endif /* ifndef __TLC59116_H__ */