TM1638 یک آی سی برای درایو LED یا سون سگمنت می باشد . دارای رابط سریال سه سیمه ، خروجی داده لچ ، و مجهز به رابط اسکن صفحه کلید است . آی سی TM1638 از نظر کیفیت قابل اعتماد، دارای عملکرد پایدار و مقاوم در برابر نویز است. این ماژول ها یک راه عالی برای افزودن یک صفحه نمایش seven segment به هر پروژه ای می باشد .
در پست هايي جداگانه آموزش راه اندازي سون سگمنت با درايور tm1637 , max7219 , 74hc595 در سايت قرار داده شده است ، مي توانيد به لينكهاي قرار داده شده مراجعه و مطالعه نماييد.
موضوعاتی که در این مقاله به آنها پرداخته خواهد شد :
ویژگی های آی سی TM1638
• تکنولوژی CMOS
• نمایش 10 بخش × 8 بیت
• اسکن صفحه کلید (8 × 3 بیت یا 24 کلید)
• مدار تنظیم روشنایی (قابل تنظیم 8 سطح)
• رابط های سریال (CLK، STB، DIO)
• حالت نوسان: نوسانساز RC
• مجهز به مدار تنظیم مجدد با اتصال تغذیه power-on reset
• نوع پکیج: SOP28
ماژول TM1638
ماژول tm1638 برای نمایش سون سگمنت 8 رقمی از یک کنترلر TM6138 استفاده می کند که امکان کنترل کامل نمایشگر را تنها با استفاده از 3 پین دیجیتال روی یک میکروکنترلر فراهم می کند. علاوه بر صفحه نمایش seven segment ، دارای 8 عدد led قرمز 3 میلی متری با قابلیت کنترل جداگانه و یک صفحه کلید با 8 دکمه فشاری که در یک ردیف چیده شده اند ، البته آی سی tm1638 قابلیت اسکن 24 عدد کلید را دارد اما بر روی این ماژول فقط 8 کلید وجود دارد. . یک هدر استاندارد 5 پین رابط کاربری آسانی را برای ماژول برای اتصال به میکروکنترلر فراهم می کند.
امکانات ماژول TM1638
- داری سون سگمنت 8 رقمی.
- دارای 8 LED رنگ قرمز 3 میلی متری.
- دارای 8 تک سوئیچ .
- ولتاژ تغذیه 5 ولت
- کنترلر TM1638
- کنترل روشنایی سون سگمنتها و LED ها
- رابط 3 خط سریال (CLK، STB، DIO).
- ابعاد 76 در 50 میلی متر.
پایه ها /PINOUT ماژول TM1638
پایه های ماژول به شرح زیر می باشد .
راه اندازی ماژول TM1638 با STM32 و Codevision
کتابخانه برای ماژول tm1638 با STM32 به همراه یک پروژه و مثال استفاده از توابع می باشد .
کتابخانه TM1638 توسط توابع HAL نوشته شده است.
تنظیمات و معرفی پایه ها توسط نرم افزار CubeMX انجام می شود . براحتی می توانید با معرفی سه پایه با نام های TM1638_DIO , TM1638_CLK , TM1638_STB و بدون تنظیمات اضافه دیگری ، ماژول را راه اندازی کنید .
در کامپایلر کدویژن پایه های ماژول TM1638 را به شکل زیر تعریف می کنیم . برای این کار براحتی می توانید فایل کتابخانه TM1638.h را از منوی سمت چپ code navigator باز کنید و پایه هایی از میکروکنترلر avr را که می خواهید به ماژول tm1638 متصل کنید ، به برنامه معرفی کنید .
توابع کتابخانه TM1638 برای STM32 و کدویژن به شرح زیر می باشد :
#ifndef SRC_TM1638_H_ #define SRC_TM1638_H_ #include "main.h" #define CLK(n) HAL_GPIO_WritePin(TM1638_CLK_GPIO_Port, TM1638_CLK_Pin, (n)) #define STB(n) HAL_GPIO_WritePin(TM1638_STB_GPIO_Port, TM1638_STB_Pin, (n)) #define DIO(n) HAL_GPIO_WritePin(TM1638_DIO_GPIO_Port, TM1638_DIO_Pin, (n)) #define DIO_Read() HAL_GPIO_ReadPin(TM1638_DIO_GPIO_Port, TM1638_DIO_Pin) // Commands #define TM1638_CMD_DATA 0x40 //!< Display data command #define TM1638_CMD_CTRL 0x80 //!< Display control command #define TM1638_CMD_ADDR 0xC0 //!< Display address command // Data command bits #define TM1638_DATA_WRITE 0x00 //!< Write data #define TM1638_DATA_READ_KEYS 0x02 //!< Read keys #define TM1638_DATA_AUTO_INC_ADDR 0x00 //!< Auto increment address #define TM1638_DATA_FIXED_ADDR 0x04 //!< Fixed address #define TM1638_CTRL_DISPLAY_OFF 0x00 //!< Display off #define TM1638_CTRL_DISPLAY_ON 0x08 //!< Display on #define NUM_COLOR_LEDS 8 //!< Number of dual color LED's #define NUM_DIGITS 8 //!< Number of digits #define SEGMENTS_OFF 0b00000000 //!< 7-sgement digit all LED's off #define SEGMENTS_MINUS 0b01000000 //!< 7-sgement digit minus character #define SEGMENTS_DEGREE 0b01100011 //!< 7-sgement digit degree symbol #define SEGMENTS_C 0b00111001 //!< 7-sgement digit Celsius symbol /*! * \brief Dual color LED */ typedef enum { LedOff = 0, LedRed = 1, LedGreen = 2 } LedColor; enum{ BIN=2, DEC=10, HEX=16 }; // Get buttons /* 8 buttons on the TM1638 board are connected to K3 only * Sort the keys in BYTE1..BYTE4 bits 0 and 4 to a keys byte * * BIT: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | * -----+---+---+---+----+---+---+---+----+------ * | | | | S5 | | | | S0 | BYTE1 * | | | | S6 | | | | S1 | BYTE2 * | | | | S7 | | | | S2 | BYTE3 * | | | | S8 | | | | S3 | BYTE4 */ /////////////////////////////////////////////////////// // // // Read buttons // // 1F 17 0F 07 1B 13 0B 03 // // // /////////////////////////////////////////////////////// uint8_t TM1638_ReadKey(void); // Turn all LED's off void TM1638_clear(void); void TM1638_setBrightness(uint8_t brightness); void writeDisplayControl(void); void TM1638_displayOn(void); void TM1638_displayOff(void); // Set dual color LED's /* led=7: Left, led=0: Right * * 8 two color LED's are connected to SEG8 and SEG9 pins at addresses: * * LED1 Address 0x01 * LED2 Address 0x03 * ... ... * LED8 Address 0x0F * * * BIT0 | BIT1 | * (SEG9) |(SEG10)| COLOR * --------+-------+------------- * 0 | 0 | OFF * 0 | 1 | GREEN * 1 | 0 | RED * 1 | 1 | NOT ALLOWED */ void TM1638_setColorLED(uint8_t led, LedColor color); /*! * \brief Turn multiple color LED's on * \param leds Byte with 8 LED's * \param color * 0: Off * 1: Green * 2: Red */ void TM1638_colorLEDsOn(uint8_t leds, LedColor color); /*! * \brief Turn multiple color LED's off * \param leds Byte with 8 LED's */ void TM1638_colorLEDsOff(uint8_t leds); // Refresh 7-segment display void TM1638_refresh(void); // Control 7-segment dots /*! * \brief Turn dot LED on * \param pos Position 0..7 */ void TM1638_dotOn(uint8_t pos); /*! * \brief Turn dot LED off * \param pos Position 0..7 */ void TM1638_dotOff(uint8_t pos); /*! * \brief Turn multiple dots on or off * \param dots Byte with dots */ void TM1638_setDots(uint8_t dots); // Set/get position for print functions /*! * \brief Set print position * \param pos Position 0..7 */ void TM1638_setPrintPos(uint8_t pos); /*! * \brief Get print position * \return Position 0..7 */ uint8_t TM1638_getPrintPos(); // Write /*! * \brief Write LED segments of a digit * \param pos Position 0..7 * \param segments Segment LED's */ void TM1638_setSegmentsDigit(uint8_t pos, uint8_t leds); /*! * \brief Write digit * \param pos Position 0..7 * \param digit Value 0..9, A..F */ void TM1638_setDigit(uint8_t pos, uint8_t digit); /*! * \brief Write digit position * \param pos Digit number 0 is most right digit, 7 is most left digit */ /////////////////////////////////////////////////////// // // // Led - positions 1,3,5,7,9,11,13,15 // // 0 - turn led ON, 1 - turn OFF // // 7Seg - positions 0,2,4,6,8,10,12,14 // // // /////////////////////////////////////////////////////// void TM1638_writeDigit(uint8_t pos); void writeUnsignedValue(uint32_t value, uint8_t radius, uint8_t maxDigits,uint8_t pad); void writeSignedValue(int32_t value, uint8_t radius, uint8_t maxDigits); /*! * \brief Get number of digits of a signed 32-bit value * \param value 32-bit signed value * \param radius Radius * \return Number of digits */ uint8_t getNumDigits(uint32_t value, uint8_t radius); // Display unsigned value 8, 16 or 32-bit with optional padding /*! * \brief Print uint8_t with radius, maximum number of digits and padding digits * \param value Display value 0..255 * \param radius Radius 2 for binary, 10 for decimal, 16 for HEX * \param maxDigits Maximum number of digits * \param pad Number of digits starting with a 0 */ void TM1638_print_uint8(uint8_t value, uint8_t radius, uint8_t maxDigits, uint8_t pad); void TM1638_print_uint16(uint16_t value, uint8_t radius, uint8_t maxDigits, uint8_t pad); void TM1638_print_ulong(unsigned long value, uint8_t radius, uint8_t maxDigits, uint8_t pad); // Display signed value 8, 16 or 32-bit void TM1638_print_int8(int8_t value, uint8_t radius, uint8_t maxDigits); void TM1638_print_int16(int16_t value, uint8_t radius, uint8_t maxDigits); void TM1638_print_long(long value, uint8_t radius, uint8_t maxDigits); void TM1638_printString(const char *TextString, unsigned int Offset); void Write1638( char Data); void WriteCmd(unsigned char cmd); void WriteData(unsigned char Adress,unsigned char Data); #endif /* SRC_TM1638_H_ */