IoT FND8 7-SEGMENT api http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1
Document History Revision Date Change note 2
1. IoT FND8 7-Segment Module은?...5 1.1. LED Driver... 5 1.1.1. as1115란... 5 1.1.2. AS1115의응용다이어그램... 5 1.2. seven segment... 6 1.2.1. WCN4_0036SR_C11 내부구조... 6 1.2.2. WCN4_0036SR_C11 외부구조... 6 2. I2C Device Address...6 2.1. I2C Device Address Byte... 7 2.2. Self Addressing Register... 7 2.3. zf_cr7seg_selfaddressmodecontrol... 7 3. Mode...7 3.1. Shutdown Register Format... 7 3.2. zf_cr7seg_shutdownmodecontrol... 8 3.1 Shutdown Register Format을참고하여선택합니다.... 8 4. Default Setting...8 4.1. Decode Control... 8 4.1.1. Decode Mode Examples... 8 4.1.2. Decode Mode(Code-B-Font)... 9 4.1.3. Decode Mode(Hex-Font)... 9 4.1.4. No Decode Mode...10 4.1.5. zf_cr7seg_setdecodemodecontrol...11 4.2. Scan_Limit Register...12 4.2.1. zf_cr7seg_setscanlimitcontrol...12 4.3. Brightness Control...12 4.3.1. Intensity Register Format...12 4.3.2. Intensity Register Address...13 4.3.3. zf_cr7seg_setbrightnesscontrol...14 5. Function... 14 5.1. zf_cr7seg_code_b_font_print(struct cr7seg_struct cr7seg_setting)...14 5.2. zf_cr7seg_test_brightness_print...15 5.3. zf_cr7seg_choice_character...16 5.4. zf_cr7seg_blink_print...16 5.5. zf_cr7seg_scroll_right...17 5.6. zf_cr7seg_scroll_left...17 5.7. zf_cr7seg_address_control...18 5.8. zf_cr7seg_setbasissetting...18 5.9. zf_cr7seg_setclean(struct cr7seg_struct cr7seg_setting)...18 www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 3
6. Address Control... 19 6.1. 연결방법... 오류! 책갈피가정의되어있지않습니다. 6.2. 케이블제작방법... 19 6.3. Address 설정방법... 20 6.3.1. Address 00000000... 20 6.3.2. Address 00000001... 21 6.3.3. Address 00000010... 21 6.3.4. Address 00000011... 21 7. cr7seg_struct... 22 7.1. AS1115_ADDRESS_X... 22 7.2. AS1115_Register... 22 4
1. IoT FND8 7-Segment Module 은? 1.1. LED Driver IoT FND8 7-Segment Module 은 AS1115 드라이버를사용하여 SEVEN SEGMENT 를제어합니다. AS1115 의응용다이어그램을토대로제작되었습니다. 1.1.1. as1115 란 64 개의 LED 가 I2c 인터페이스된 LED 와 Keyscan 드라이버입니다. 1.1.2. AS1115 의응용다이어그램 www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 5
1.2. Seven segment WCN4_0036SR_C11 를 2 개사용하였습니다. 1.2.1. WCN4_0036SR_C11 내부구조 1.2.2. WCN4_0036SR_C11 외부구조 2. I2C Device Address as1115 드라이버는 I2C Address 를 Factory-set IC Address 와 User-set IC Address 모드 두가지선택하여사용가능합니다. 6
2.1. I2C Device Address Byte Factory-set IC Address 모드사용시, Figure 20 의 predefined address 를사용합니다. User-set IC Address 모드사용시, Figure 20 의 updated address 를사용합니다. 2.2. Self Addressing Register 2.3. zf_cr7seg_selfaddressmodecontrol 형태 void zf_cr7seg_selfaddressmodecontrol (uint8_t addressmode,struct cr7seg_struct cr7seg_setting) 인수 uint8_t addressmode,struct cr7seg_struct cr7seg_setting 인수설명 addressmode : address 모드를선택합니다. 설명 >> Factory-set IC Address 모드, User-set IC Address 모드선택 3. Mode Shutdown mode, Normal mode 를설정합니다. 3.1. Shutdown Register Format Normal Operation, Reset Feature Register to Default Settings 모드를사용합니다. www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 7
3.2. zf_cr7seg_shutdownmodecontrol 형태 void zf_cr7seg_shutdownmodecontrol(uint8_t shutdownmode, struct cr7seg_struct cr7seg_setting) 인수 uint8_t shutdownmode, struct cr7seg_struct cr7seg_setting 인수설명 shutdownmode: shutdown모드를선택합니다. 설명 3.1 Shutdown Register Format을참고하여선택합니다. 4. Default Setting as1115 드라이버는 Decode mode, Scan Limit, Brightness 3 가지를설정할수있습니다. 4.1. Decode Control Decode모드사용시 AS1115에서설정된폰트를사용할수있습니다 decode 모드에는 2가지 Font를사용할수있습니다. Code-B-Font와 Hex Font를사용할수있습니다. No Decode모드사용시모든 led를사용자가직접제어가능합니다. 4.1.1. Decode Mode Examples 모든 digits 가 No decode mode 일경우, 0x00 입니다. 원하는위치의값을 16 진수로변환하여입력하 면됩니다. 8
4.1.2. Decode Mode(Code-B-Font) 4.1.3. Decode Mode(Hex-Font) 목차 4.1.2, 4.1.3 두가지모드는 Feature Register(0xXE) 의 D2 레지스터로선택할수있습니다. www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 9
4.1.4. No Decode Mode No Decode Mode 사용시아래의레지스터 Map 를참고하여사용합니다. Register Address Map // Individual digit registers #define AS1115_DIGIT0 #define AS1115_DIGIT1 #define AS1115_DIGIT2 #define AS1115_DIGIT3 #define AS1115_DIGIT4 #define AS1115_DIGIT5 #define AS1115_DIGIT6 #define AS1115_DIGIT7 (0x01) (0x02) (0x03) (0x04) (0x05) (0x06) (0x07) (0x08) No Decode Mode 사용시 7Segment LED 를각각제어가능합니다. // No-Decode Mode Data Bits and Corresponding Segment Lines #define AS1115_CORRESPONDING_SEGMENT_LINE_DP (0x80) 10
////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_DP #define AS1115_CORRESPONDING_SEGMENT_LINE_A (0x40) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_A #define AS1115_CORRESPONDING_SEGMENT_LINE_B (0x20) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_B #define AS1115_CORRESPONDING_SEGMENT_LINE_C (0x10) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_C #define AS1115_CORRESPONDING_SEGMENT_LINE_D (0x08) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_D #define AS1115_CORRESPONDING_SEGMENT_LINE_E (0x04) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_E #define AS1115_CORRESPONDING_SEGMENT_LINE_F (0x02) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_F #define AS1115_CORRESPONDING_SEGMENT_LINE_G (0x01) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_G #define AS1115_CORRESPONDING_SEGMENT_LINE_NO_PRINT (0x00) ////AS1115_NO_DECODEMODE_CORRESPONDING_SEGMENT_LINE_NO_PRINT 4.1.5. zf_cr7seg_setdecodemodecontrol 형태 void zf_cr7seg_setdecodemodecontrol(uint8_t decodesetting, struct cr7seg_struct cr7seg_setting) 인수 uint8_t decodesetting, struct cr7seg_struct cr7seg_setting 인수설명 decodesetting: decodesetting 모드를선택합니다. 설명 >> Decode mode, Decode mode 모드설정 Decode 모드를설정하는함수입니다. // Decode Enable Register Format #define AS1115_NO_DECODEMODE_ALL (0x00) //No decode for digits 7:0 #define AS1115_DECODEMODE_0 (0x01) //Code-B/HEX decode for digit 0. #define AS1115_DECODEMODE_1 (0x02) //Code-B/HEX decode for digit 1. #define AS1115_DECODEMODE_2 (0x04) //Code-B/HEX decode for digit 2. #define AS1115_DECODEMODE_3 (0x08) //Code-B/HEX decode for digit 3. #define AS1115_DECODEMODE_4 (0x10) //Code-B/HEX decode for digit 4. #define AS1115_DECODEMODE_5 (0x20) //Code-B/HEX decode for digit 5. #define AS1115_DECODEMODE_6 (0x40) //Code-B/HEX decode for digit 6. #define AS1115_DECODEMODE_7 (0x80) //Code-B/HEX decode for digit 7. #define AS1115_DECODEMODE_ALL (0xFF) //decode for digits 7:0 www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 11
4.2. Scan_Limit Register 4.2.1. zf_cr7seg_setscanlimitcontrol 형태 void zf_cr7seg_setscanlimitcontrol(uint8_t scanlimitsetting, struct cr7seg_struct cr7seg_setting) 인수 uint8_t scanlimitsetting, struct cr7seg_struct cr7seg_setting 인수설명 scanlimitsetting: scanlimitsetting 모드를선택합니다. 설명 >> Display할 digit를설정합니다. 모든 digit를출력할경우 Display digits 0:7 인 AS1115_Display_DIGIT0_7을함수호출시사용합니다. //Scan_Limit Registers #define AS1115_Display_DIGIT0 (0x00) //Display digit 0 only #define AS1115_Display_DIGIT0_1 (0x01) //Display digits 0:1 #define AS1115_Display_DIGIT0_2 (0x02) //Display digits 0:2 #define AS1115_Display_DIGIT0_3 (0x03) //Display digits 0:3 #define AS1115_Display_DIGIT0_4 (0x04) //Display digits 0:4 #define AS1115_Display_DIGIT0_5 (0x05) //Display digits 0:5 #define AS1115_Display_DIGIT0_6 (0x06) //Display digits 0:6 #define AS1115_Display_DIGIT0_7 (0x07) //Display digits 0:7 4.3. Brightness Control Duty Cycle 을조정하여밝기조정이가능합니다. 4.3.1. Intensity Register Format 12
16개의단계로정의되어있습니다. 아래와같이정의하였습니다. //Intensity Register Format #define AS1115_Duty_Cycle_1 (0x00) //Duty Cycle 1/16(min on) #define AS1115_Duty_Cycle_2 (0x01) //Duty Cycle 2/16 #define AS1115_Duty_Cycle_3 (0x02) //Duty Cycle 3/16 #define AS1115_Duty_Cycle_4 (0x03) //Duty Cycle 4/16 #define AS1115_Duty_Cycle_5 (0x04) //Duty Cycle 5/16 #define AS1115_Duty_Cycle_6 (0x05) //Duty Cycle 6/16 #define AS1115_Duty_Cycle_7 (0x06) //Duty Cycle 7/16 #define AS1115_Duty_Cycle_8 (0x07) //Duty Cycle 8/16 #define AS1115_Duty_Cycle_9 (0x08) //Duty Cycle 9/16 #define AS1115_Duty_Cycle_10 (0x09) //Duty Cycle 10/16 #define AS1115_Duty_Cycle_11 (0x10) //Duty Cycle 11/16 #define AS1115_Duty_Cycle_12 (0x11) //Duty Cycle 12/16 #define AS1115_Duty_Cycle_13 (0x12) //Duty Cycle 13/16 #define AS1115_Duty_Cycle_14 (0x13) //Duty Cycle 14/16 #define AS1115_Duty_Cycle_15 (0x14) //Duty Cycle 15/16 #define AS1115_Duty_Cycle_16 (0x15) //Duty Cycle 15/16(max on) 4.3.2. Intensity Register Address 각각의레지스터의어드레스입니다. 한개의 register address에두개의 digit를설정합니다. 0x10 레지스터의 D7:D4는 Digit 1의밝기를 D3:D0은 Digit 0의밝기를설정할수있습니다. 아래와같이정의되어있습니다. // Intensity Register Address #define AS1115_DIGHT_Global_Intensity (0x0A) // D7:D4 X D3:D0 Global Intensity #define AS1115_DIGHT_0_1_Intensity (0x10) // D7:D4 Digit 1 Instensity D3:D0 Digit 0 Intensity #define AS1115_DIGHT_2_3_Intensity (0x11) // D7:D4 Digit 3 Instensity D3:D0 Digit 2 Intensity www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 13
#define AS1115_DIGHT_4_5_Intensity (0x12) // D7:D4 Digit 5 Instensity D3:D0 Digit 4 Intensity #define AS1115_DIGHT_6_7_Intensity (0x13) // D7:D4 Digit 7 Instensity D3:D0 Digit 6 Intensity 4.3.3. zf_cr7seg_setbrightnesscontrol 형태 void zf_cr7seg_setbrightnesscontrol(uint8_t brightnesssetting, struct cr7seg_struct cr7seg_setting) 인수 uint8_t brightnesssetting, struct cr7seg_struct cr7seg_setting 인수설명 brightnesssetting: brightnesssetting 모드를선택합니다. 설명 >> 밝기를 1~16단계로설정합니다. 5. Function 4. Basis Setting 목차에서기본설정을확인하였습니다. 보드부팅후 A> zf_cr7seg TEST(AS1115) 를선택하면 zf_cr7seg 모듈이동작합니다. 아래와같이출력됩니다. --------------------- Press menu key --------------------- 0> System Information 1> zf_cr7seg_code_b_font_print 2> zf_cr7seg_test_brightness_print 3> zf_cr7seg_choice_character 4> zf_cr7seg_blink_print 5> zf_cr7seg_scroll_right 6> zf_cr7seg_scroll_left 7> zf_cr7seg_address_control --------------------- x> quit 1번부터 7번까지선택을하면각각의함수를호출합니다. 5.1. zf_cr7seg_code_b_font_print(struct cr7seg_struct cr7seg_setting) 형태 void zf_cr7seg_code_b_font_print(struct cr7seg_struct cr7seg_setting) 인수 struct cr7seg_struct cr7seg_setting 인수설명 구조체참조 설명 >> Digit0~7을동시에목차 4.1.2 Code_B_Font를순서대로출력 함수호출시아래와같이 Digit0~7까지동시에출력합니다. 14
5.2. zf_cr7seg_test_brightness_print 형태인수인수설명설명 void zf_cr7seg_test_brightness_print(struct cr7seg_struct cr7seg_setting) struct cr7seg_struct cr7seg_setting 구조체참조 >> Digit0~7을 1,3,5,7,9,11,13,15의밝기로출력 함수호출시아래와같이 Digit0~7 까지순차적으로밝게출력합니다. AS1115_DIGHT_0_1_Intensity 레지스터는아래와같이정의되어있습니다. #define AS1115_DIGHT_0_1_Intensity (0x10) // D7:D4 Digit 1 Instensity D3:D0 Digit 0 Intensity www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 15
0x10 레지스터의 D7:D4는 Digit 1의밝기를 D3:D0은 Digit 0의밝기를설정할수있습니다. cr7seg_setting.as1115_register=as1115_dight_0_1_intensity; dataval=((as1115_duty_cycle_3<<4)+as1115_duty_cycle_1); printf("dight_0_1_intensity = %x\n",dataval); AS1115_Write_Bytes_Data(cr7seg_setting,&dataVal); 소스를보면 AS1115_DIGHT_0_1_Intensity 레지스터에 ((AS1115_Duty_Cycle_3<<4)+AS1115_Duty_Cycle_1) 의값을 write합니다. Digit 0은 AS1115_Duty_Cycle_1의밝기로설정되고 Digit 1은 AS1115_Duty_Cycle_3의밝기로설정됩니다. 5.3. zf_cr7seg_choice_character 형태인수인수설명설명 void zf_cr7seg_choice_character (struct cr7seg_struct cr7seg_setting) struct cr7seg_struct cr7seg_setting 구조체참조 >> 사용자가원하는메시지입력시출력 함수호출시아래와같이출력됩니다. --------------------------- Press Select key (A~Z), (0~9), (.) ----------------------------- x> quit 원하는문자를입력하면 Digit0~7까지입력하는순서대로출력됩니다. 8번입력후추가입력할경우 Digit0에입력한문자가출력되고 Digit 1~7까지는모두 off됩니다. 5.4. zf_cr7seg_blink_print 형태인수인수설명설명 void zf_cr7seg_blink_print(struct cr7seg_struct cr7seg_setting) struct cr7seg_struct cr7seg_setting 구조체참조 >>DIG0~DIG7을 SEGA~SEGDP 전체 ON/OFF 반복 함수출력시모든 LED 가 On/Off 를반복합니다. 16
5.5. zf_cr7seg_scroll_right 형태 void zf_cr7seg_scroll_right (struct cr7seg_struct cr7seg_setting) 인수 struct cr7seg_struct cr7seg_setting 인수설명구조체참조설명 >> 지정한메시지를오른쪽으로 SCROLL을반복출력함수를실행하면지정한메시지를오른쪽으로스크롤합니다. 메시지지정방법은코드안에보면 rightscrollmessage[] 배열이있습니다. 알파벳의경우원하는알파벳을작성하면되고, 숫자의경우앞에 NUM_ 을같이작성하면됩니다. rightscrollmessage[]={a,d,i,e,u,line_g,num_2,num_0,num_1,num_4,dp,h,o,p,e,num_g,num_2,num_ 0,NUM_1,NUM_5,CLEAN,CLEAN,CLEAN,CLEAN,CLEAN,CLEAN,CLEAN,CLEAN}; 배열에작성한내용은 ADIEU-2014.HOPE-2015입니다. 5.6. zf_cr7seg_scroll_left 형태 void zf_cr7seg_scroll_left (struct cr7seg_struct cr7seg_setting) 인수 struct cr7seg_struct cr7seg_setting 인수설명 구조체참조 설명 >> 지정한메시지를왼쪽으로 SCROLL을반복출력 함수를실행하면지정한메시지를왼쪽으로스크롤합니다. 메시지지정방법은코드안에보면 leftscrollmessage [] 배열이있습니다. www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 17
알파벳의경우원하는알파벳을작성하면되고, 숫자의경우앞에 NUM_ 을같이작성하면됩니다. 5.7. zf_cr7seg_address_control 형태 void zf_cr7seg_address_control (struct cr7seg_struct cr7seg_setting) 인수 struct cr7seg_struct cr7seg_setting 인수설명 구조체참조 설명 지정한메시지를 4개의모듈에서출력합니다 목차 6 Address Control에서자세히설명하겠습니다. 5.8. zf_cr7seg_setbasissetting 형태인수인수설명설명 void zf_cr7seg_setbasissetting (struct cr7seg_struct cr7seg_setting) struct cr7seg_struct cr7seg_setting 구조체참조 >>.4.1, 4.2, 4.3 목록의세팅을 Basis Setting으로설정 5.9. zf_cr7seg_setclean(struct cr7seg_struct cr7seg_setting) Digit 0 ~ Digit7까지모든 LED를 Off합니다. 형태 void zf_ zf_cr7seg_setclean (struct cr7seg_struct cr7seg_setting) 인수 struct cr7seg_struct cr7seg_setting 인수설명 구조체참조 설명 >>.4.1, 4.2, 4.3 목록의세팅을 Basis Setting으로설정 18
6. Address Control 6.1. 연결방법 4 개의모듈을한번에사용하기위해서는케이블 1:4 케이블이필요합니다. 6.2. 케이블제작방법 Ground INT MCU SDA MCU SCL VDD 케이블을 1 대 4 로연결해야합니다. 8pin 케이블에서상단의사진에있는케이블만있으면됩니다. www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 19
6.3. Address 설정방법 4 개의 address 를사용하기위해서는하드웨어적으로마운트하여야합니다. 6.3.1. Address 00000000 zf_cr7seg_address_control 함수실행시아래와같이합니다. Address Coding Hardware Setting zf_cr7seg_address_control 함수를실행후 key 를변경해야합니다. 1 번스위치를내리거나 2 번스위치를내립니다. 또는두개의스위치를내립니다. 처음 address 를인식하면 as1115 driver 에서인식한 address 를저장하고있습니다. Address 0000000 을 AS1115_FACTORY_SET_ADDRESS 모드로설정하므로변경하여도문제없습니다. 4 개의 address 사용시주의점 Address 0000000 을사용할경우문제가있습니다. SEGG 와 SEGF, KEYA 가연결된상태가 Address 0000000 입니다. 이상태에서는 SEGG 에 ON 을시켜도 SEGF 가같이 ON 되고반대로 SEGF 에 ON 을시켜도 SEGG 가 ON 됩니다. 한개의장비로할경우 zf_cr7seg_selfaddressmodecontrol 함수에서 Factory-set IC Address 모드를선택하면연결상태와무관하게 Default address 인 0000000 을사용할수있습니다 20
6.3.2. Address 00000001 Address Coding Hardware Setting Address 00000001 을사용할경우, SEGF 와 KEYA 를연결해야합니다. 6.3.3. Address 00000010 Address Coding Hardware Setting Address 00000010 을사용할경우, SEGG 와 KEYA 를연결해야합니다. 6.3.4. Address 00000011 Address Coding Hardware Setting Address 00000010 을사용할경우, 원상태로사용하면됩니다. www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 21
7. cr7seg_struct as1115.h struct cr7seg_struct { uint8_t AS1115_ADDRESS_X; uint8_t AS1115_Register; uint8_t AS1115_Data; }; 7.1. AS1115_ADDRESS_X 인수 인수설명 uint8_t AS1115_ADDRESS_X Defalut 로 address0000011 로설정하였습니다. 4 개의 address 에서원하는 address 설정하 여사용하면됩니다. 7.2. AS1115_Register 인수 uint8_t AS1115_Register 인수설명 Write/Read 할레지스터를저장합니다. 22