這是一顆我們俗稱的呼吸燈,因為預設的行為就像呼吸一樣,由滅到緩慢至亮,再由亮緩慢至滅。可以透過Single-Wire控制其行為,作法大同小異。這裡就稍微筆記一下。
6.6 Single-Wire Interface Timing Requirements
這裡描述了每個階段的high/low以及min/max時間,比如TC_ON > 20us,TC_OF > 30us之類的,簡略的code如下#define SHORT_DELAY 10 #define TC_ON (20 + SHORT_DELAY) #define TC_OFF (30 + SHORT_DELAY) #define T_ENTER (500 + 10*SHORT_DELAY) #define T_BLANK (1500 - 500) // T-ENTER GPIO(CTRL_PIN, high); us_delay(TC_ON); GPIO(CTRL_PIN, low); us_delay(TC_OFF); GPIO(CTRL_PIN, high); us_delay(TC_ON); GPIO(CTRL_PIN, low); us_delay(TC_OFF + T_ENTER + T_BLANK); // over T-BLANK period
7.3.3.4 Entering Follow Mode
這裡描述Entering Follow Mode的指令結構,基本上就是,"Training start command" + "Blank Period" + "Follow Mode command" + "Training end command"
#define SHORT_DELAY 10
#define TC_ON (20 + SHORT_DELAY)
#define TC_OFF (30 + SHORT_DELAY)
#define T_ENTER (500 + SHORT_DELAY)
#define T_BLANK (1500 - 500)
#define TCAL (350 + 10 * SHORT_DELAY))
#define TT_OFF (200 + 10 * SHORT_DELAY)
#define TIMEOUT (127 * TCAL)
static void training_start_command(void)
{
int i = 0;
while (i++ < 2) {
GPIO(CTRL_PIN, high);
us_delay(TC_ON);
GPIO(CTRL_PIN, low);
us_delay(TC_OFF);
}
us_delay(T_ENTER + T_BLANK); // over T-BLANK period due to
}
static void follow_mode(uint32_t i, uint32_t r1, uint32_t on1, uint32_t f1, uint32_t off1)
{
// C
GPIO(CTRL_PIN, high);
us_delay(TCAL);
GPIO(CTRL_PIN, low);
us_delay(TT_OFF);
// I
GPIO(CTRL_PIN, high);
us_delay(i * TCAL);
GPIO(CTRL_PIN, low);
us_delay(TT_OFF);
// r1
GPIO(CTRL_PIN, high);
us_delay(r1 * TCAL);
GPIO(CTRL_PIN, low);
us_delay(TT_OFF);
// on1
GPIO(CTRL_PIN, high);
us_delay(on1 * TCAL);
GPIO(CTRL_PIN, low);
us_delay(TT_OFF);
// off1
GPIO(CTRL_PIN, high);
us_delay(off1 * TCAL);
GPIO(CTRL_PIN, low);
us_delay(TT_OFF);
}
static void training_start_command(void)
{
int i = 0;
while (i++ < 3) {
GPIO(CTRL_PIN, high);
us_delay(TC_ON);
GPIO(CTRL_PIN, low);
us_delay(TC_OFF);
}
// more than 127 × TCAL time this is interpreted as timeout.
us_delay(TIMEOUT );
}
-
參考資料:
- LP5560 datasheet



沒有留言:
張貼留言