برای کار با ماژول mc60 بیشترین چیزی که کمکمون میکنه داکیومنت و example های کاملی هست که شرکت quectel در اختیارمون گذاشته، اما برای بحث نمایشگر oled متأسفانه کد آمادهای موجود نیست، به همین دلیل من کتابخونه ای رو برای کار با نمایشگرهای oled آماده کردم که میتونید برای mc60 از اون استفاده کنید.
اول از همه لازم هست که فایل هدر و سورس رو به پروژتون اضافه کنید، برای این کار فایل oled.h
و Adafruit5x7.h
رو به پوشه include
و فایل oled.c
رو به پوشه custom
اضافه میکنیم (فایلها میتونید از گیت هاب من دریافت کنید).
کد ما برای دو سایز 128*32 و 128*64 آماده شده که باید نوع مورد نظرتون رو با define کردن توی خط 17 و 18 فایل oled.h
مشخص کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
#define __CUSTOMER_CODE__ #ifdef __CUSTOMER_CODE__ #include "ql_type.h" #include "ql_stdlib.h" #include "ql_trace.h" #include "ql_gpio.h" #include "ql_uart.h" #include "ql_iic.h" #include "ql_error.h" #include "oled.h" ///for DEBUG/////////////////////////////////////////////////////////////////////////////////////////////////////////// #define SERIAL_RX_BUFFER_LEN 2048 #define DEBUG_PORT UART_PORT1 #define DBG_BUF_LEN 512 static char DBG_BUFFER[DBG_BUF_LEN]; #define APP_DEBUG(FORMAT, ...) \ { \ Ql_memset(DBG_BUFFER, 0, DBG_BUF_LEN); \ Ql_sprintf(DBG_BUFFER, FORMAT, ##__VA_ARGS__); \ Ql_UART_Write((Enum_SerialPort)(DEBUG_PORT), (u8 *)(DBG_BUFFER), Ql_strlen((const char *)(DBG_BUFFER))); \ } char m_Read_Buffer[SERIAL_RX_BUFFER_LEN]; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara); const u8 ant_1[] = { 0b11111111, 0b01011010, 0b00111100, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, }; const u8 ant_2_full[] = { 0b00000001, 0b00000001, 0b00000101, 0b00000101, 0b00010101, 0b00010101, 0b01010101, 0b01010101, }; const u8 ant_low[] = { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00010000, 0b00010000, 0b01010000, 0b01010000, }; const u8 play[] = { 0b00000000, 0b11000000, 0b11110000, 0b11111100, 0b11111111, 0b11111100, 0b11110000, 0b11000000, }; const u8 pause[] = { 0b11100111, 0b11100111, 0b11100111, 0b11100111, 0b11100111, 0b11100111, 0b11100111, 0b11100111, }; const u8 stop[] = { 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, }; const u8 bat_1[] = { 0b11111111, 0b10000000, 0b10111111, 0b10111111, 0b10111111, 0b10111111, 0b10000000, 0b11111111, }; const u8 bat_2[] = { 0b11111100, 0b00000110, 0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b00000110, 0b11111100, }; void proc_main_task(s32 taskId) { s32 ret; ST_MSG msg; // Register & open UART port Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL); Ql_UART_Open(UART_PORT1, 115200, FC_NONE); APP_DEBUG("START PROGRAM (SISOOG.COM)\r\n"); ret = Ql_IIC_Init(0, PINNAME_RI, PINNAME_DCD, TRUE); Ql_Sleep(100); ret = Ql_IIC_Config(0, TRUE, I2C_ADDRESS, 1500); oledInit(); oledClear(); oledFill(); Ql_Sleep(500); oledClear(); Ql_Sleep(500); setFont(Adafruit5x7); set2X(); setCursor(28, 0); oledPrint("Sisoog"); set1X(); setCursor(0, 3); oledPrint("Mahdi.h"); oledDraw(0, 0, bat_1); oledDraw(8, 0, bat_2); oledDraw(110, 0, ant_1); oledDraw(119, 0, ant_2_full); oledDraw(50, 3, play); oledDraw(70, 3, pause); oledDraw(90, 3, stop); while (1) { Ql_OS_GetMessage(&msg); switch (msg.message) { case 0: break; default: break; } } } static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara) { u32 rdLen = 0; s32 ret; switch (msg) { case EVENT_UART_READY_TO_READ: { Ql_memset(m_Read_Buffer, 0x0, sizeof(m_Read_Buffer)); rdLen = Ql_UART_Read(port, m_Read_Buffer, sizeof(m_Read_Buffer)); if (Ql_strstr(m_Read_Buffer, "ok")) { APP_DEBUG("ok\r\n"); } break; } } } #endif // __CUSTOMER_CODE__ |
برای اتصال سخت افزاری به دلیل این که سطح ولتاژ ماژول mc60 ما 2.8 ولت هست و نمایشگر oled 5 ولت ، باید از level shifter استفاده کنیم.
در تصویر پایین میتونید اتصال سخت افزار من رو به همراه خروجی کدی که در بالا قرار دادم مشاهده کنید:
سلام
i2c بصورت نرم افزاری پیاده سازی شده؟
سلام
خیر، به صورت سخت افزاری
البته خود sdk از i2c نرم افزاری هم پشتیبانی میکنه
تشکر
سلام
با mc60 به یه مشکل عجیب برخوردم:
سیم کارت ایرانسل هیچ مشکلی نداره اما همراه اول میزارم مینویسه:
CPIN Not INSERTED
برد رو از نویسنده همین پست گرفتم که کیفیت خوبی داره و روی هر دو اسلات سیم کارت گذاشتم اما همراه اول جواب نمیده
هم ایرانسل و هم همراه اول هردو usim و اعتباری هستن و هر دو روی گوشی های دیگه هیچ مشکلی ندارن و همین سیم کارت همراه اول رو روی ماژول m66 میزارم بدون مشکل کار میکنه
لطفا کمکم کنید…
مشکل حل شد
مشکل ضخامت سیم کارت بود!
ضخامت سیم کارت ها معمولاً 0.63 میلی متر است.
اما ضخامت سیم کارت های همراه اول که این مشکل را ایجاد کرده حدود 75/0 میلی متر بود.
این ضخامت اضافی پایه مکانیکی سوکت سیم کارت را به زمین PCB متصل می کند و مشکلاتی را ایجاد می کند.
وقتی ضخامت سیم کارت اپراتور را با کاغذ سنباده کاهش دادم (حدود 0.62 میلی متر) به درستی کار می کرد.
ممنون بابت به اشتراک گذاشتن راه حل
سلام
یه فایل راهنمای برای استفاده از دستورات at-command نوشتم (البته بیشتر جهت استفاده شخصی بوده) برای mc60 و m66 آدرس دانلود فایل رو میزارم اینجا اگر از بچه های سیسوگ هم کسی دید بدرد میخورده زحمت پست کردنش به عنوان یه راهنما با سیسوگ
فرمت libre office:
https://s18.picofile.com/file/8434085784/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA_at_Command_%D9%85%D8%A7%DA%98%D9%88%D9%84_%D9%87%D8%A7%DB%8C_GSM.odt.html
فرمت pdf:
https://s19.picofile.com/file/8434085792/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA_at_Command_%D9%85%D8%A7%DA%98%D9%88%D9%84_%D9%87%D8%A7%DB%8C_GSM.pdf.html
فرمت microsoft world:
https://s19.picofile.com/file/8434085768/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA_at_Command_%D9%85%D8%A7%DA%98%D9%88%D9%84_%D9%87%D8%A7%DB%8C_GSM.docx.html
سلام دوست عزیز
خیلی هم عالی
دست شما هم درد نکنه حتما منتشر میشه
سلام
میخواستم بدونم برای راه اندازی lcd کاراکتری هم میشه از این کتابخونه استفاده کرد؟
سلام
خیر
سلام
آیا با mc60 میشه با پروتکل can bus کار کرد؟
سلام
mc60 CAN Interface نداره و اگر چنین قسمتی را بصورت خارجی درایو کنید میتونید از این پروتکل هم استفاده کنید