سلام
من فیلم ها رو تماشا کردم
ولی رجیستر ها رو که نمیشه حفظ کرد ، اگر ممکنه یه کتاب معرفی کنید که رجیستر ها و بیت هاش رو داشته باشه
سلام
من فیلم ها رو تماشا کردم
ولی رجیستر ها رو که نمیشه حفظ کرد ، اگر ممکنه یه کتاب معرفی کنید که رجیستر ها و بیت هاش رو داشته باشه
با سلام.
چرا لینک CMSIS که شما در فیلم به آن اشاره میکنید از سایت NXP حذف شده و گویا به طور کل این شرکت استفاده از این دستورات رو قطع کرده چون هرچقدر در سایت رسمی به دنبال لینک دانلود گشتم چیزی پیدا نشد و لینک های قبل رو هم غیر فعال کرده.
http://ics.nxp.com/support/documents...er.library.zip
لطفا مهندس زرکوب اگر در این مورد اطلاعی دارید مطرح کنید.
داخل DVD فایل های CMSIS قرار نداره و من به آنها نیاز دارم لطفا لینکی از آن قرار دهید.
ممنون
سلام
من خودم هیچ تلاشی برای حفظ کردن اینها نکرده ام چون قرار نیست بریم سر جلسه امتحان و از حفظیات روی برگه برنامه بنویسیم!
وقتی قرار است یک پروژه ای را انجام بدهیم از سمپل هایی که قبلا نوشته ایم استفاده می کنیم و تنظیمات را از آنجا کپی می کنیم و چون قبلا در تمرینات هر قسمت با این دستورات درگیر شدیم کلیت آن در ذهنمان است و می دانیم باید چگونه از آن استفاده کنیم.
تشکر از پاسخ سریع شما.
من هم از سایتی دیگر دریافت کردم ولی نه با آن حجم.
در یکی از فرم ها جنابعالی اشاره کردید که در بحث کانتر ها کد های cmsis دچار مشکل بوده.
سوال من این است که آیا ممکن است به علت مشکلات زیاد nxp اقدام به حذف cmsis از سایت خود کرده باشه؟
سلام
من برنامه زیر رو برای کانتر نوشتم
یک کلید به پایه P0.4 متصل کردم و پایه رو با این کلید زمین میکنم
ولی هیچ چیزی شمرده نمیشه و روی LCD چیزی نمایش داده نمیشه
وارد وقفه هم نمیشه !!!
راستی وارد دیباگ هم که میشم همه ی تنظیمات مربوط به Timer2 به صورت 0xAAAAAAA شده !!!
این برنامه :
کد:#include "LPC17xx.h" void Delay (uint32_t Time) { uint32_t i; i = 0; while (Time--) { for (i = 0; i < 5000; i++); } } #define family_lpc17xx #define TFTLCD_DATAPORT_1 #define TFTLCD_DATAPORT_OFFSET 15 #define TFTLCD_CONTROLPORT_2 #define TFTLCD_RST 0 #define TFTLCD_RS 2 #define TFTLCD_CS 1 #define TFTLCD_RD 4 #define TFTLCD_WR 3 #define PORTRAIT #include <tftlcd_functions.h> void TIMER2_IRQHandler (void) { LPC_GPIO2->FIOSET = 0x155; Delay(500); LPC_GPIO2->FIOCLR = 0x3ff; Delay(500); LPC_GPIO2->FIOSET = 0x2AA; Delay(500); LPC_GPIO2->FIOCLR = 0x3ff; Delay(500); LPC_TIM2->IR = 1; /* clear interrupt flag */ } int main(){ unsigned int s; char p[100]; LPC_GPIO2->FIODIR = 0x3ff; /* LEDs PORT2 0...7 are Output */ LPC_GPIO2->FIOCLR = 0x3ff; /* turn off all the LEDs */ LPC_TIM2->CTCR = 0x01; // set T/C for Counter Rising edge; // set T/C for Timer LPC_TIM2->PR = 0; // no prescale LPC_TIM2->MR0 = 10; LPC_TIM2->TCR = 2; // reset counter , disable counter LPC_TIM2->MCR = 2; //when T0MR0 is match with T0TC , this register generate interrupt and reset counter(T0TC) LPC_PINCON->PINSEL0 = 0x00000300; // -------------- interupt seting ---------------- NVIC_SetPriority(TIMER2_IRQn,0); /* Default priority group 0, can be 0(highest) - 31(lowest) */ NVIC_EnableIRQ(TIMER2_IRQn); /* Enable Timer0 Interrupt */ SystemInit(); tftlcd_init(); tftlcd_clear(); LPC_TIM2->TCR = 1; //enable counter while(1){ s=LPC_TIM2->TC; tftlcd_clear(); sprintf(p," %i",s); tftlcd_gotoxy(1,1); tftlcd_putsf("Number:",0,10000,0); tftlcd_gotoxy(8,1); tftlcd_puts(p,0,100000,0); Delay(100); } }
سلام
برنامه زیر رو نوشتم
توی Hyper Terminal یه سری علائم ناشناس دریافت میکنه و دریافت ها کاملا اشتباه هست
مثلا اینها رو دریافت میکنه :
?7ÛºþÙ6ûß ¶7û¾û ö~7ú þ Ùý»ûÛû ¶?7û û ö~7úãþ Ùý»ûïûý¶?7 ˜ß ö~þ
Ï Ùý» »ûýô?7ß÷þÙ6þÓ Ùý» ûû ô~7ß¾þ Ùý» ß ¶7 ¼û ö~7þïþ Ùý»ã¸û ¶?7ãî
برای ارسال هم وقتی دکمه 1 رو روی کیبرد میزنم عدد 49 روی LCD نمایش داده میشه ولی وقتی عدد رو با فرمت هگز توسط رایانه برای میکرو ارسال میکنم همون 1نمایش داده میشه
به چه تابعی باید دریافت کنم که وقتی توی Hyper عدد 1 رو میزنم ، میکرو هم 1 رو بگیره ؟؟؟
این برنامه :
کد:#include <LPC17xx.h> #include <stdio.h> #include <uart.h> void Delay (uint32_t Time) { uint32_t i; i = 0; while (Time--) { for (i = 0; i < 5000; i++); } } #define family_lpc17xx #define TFTLCD_DATAPORT_1 #define TFTLCD_DATAPORT_OFFSET 15 #define TFTLCD_CONTROLPORT_2 #define TFTLCD_RST 0 #define TFTLCD_RS 2 #define TFTLCD_CS 1 #define TFTLCD_RD 4 #define TFTLCD_WR 3 #define PORTRAIT #include <tftlcd_functions.h> int s; char p[100]; unsigned char pa; char ppa[100]; void UART2_IRQHandler(void) { pa = UART2_GetChar(); tftlcd_clear(); sprintf(ppa," %i",pa); tftlcd_gotoxy(1,2); tftlcd_putsf("UART:",RED,WHITE,0); tftlcd_gotoxy(8,2); tftlcd_puts(ppa,BLACK,WHITE,0); Delay(1000); } int main(void) { int s; SystemInit(); UART2_Init(); tftlcd_init(); tftlcd_clear(); LPC_UART2->IER = 0x01; NVIC_SetPriority(UART2_IRQn,0); NVIC_EnableIRQ(UART2_IRQn); while (1) { UART2_SendString("soodi"); UART2_SendChar(s); s = s+1; tftlcd_clear(); sprintf(p," %i",s); tftlcd_gotoxy(1,1); tftlcd_putsf("Number:",RED,WHITE,0); tftlcd_gotoxy(8,1); tftlcd_puts(p,BLACK,WHITE,0); Delay(500); } }
ویرایش توسط mzarkoob : 04-08-2013 در ساعت 23:45
سلام
بله هایپر ترمینال درست هست
ارسال از رایانه و دریافت از میکرو درست انجام میشه
ولی ارسال از میکرو و دریافت از رایانه اصلا درست انجام نمیشه !!!!!!
1 . راستی نگفتید که با چه تابعی دریافت کنم که توی هایپر ترمینال عدد 1 رو میزنم ، توی میکرو هم 1 دریافت بشه ؟؟؟؟
مشکل کانتر هم هنوز حل نشده ولی احتمال میدم که از TFT LCD باشه ، چون بیشتر پایه های میکرو رو اشغال کرده !!!!!!!!
حالا میخام سریال رو راه اندازی کنم و اطلاعات کانتر رو روی سریال بندازم
2 . ببخشید اینقدر سوال میکنم ، یک خروجی دارم که فرکانسش ثابت هست (50هزتر) ، برای خوندنش باید با تایمر یه زمانی ایجاد کنم و توی این زمان با کانتر شمارش کنم ، درسته ؟؟؟؟
راستی از این هدر استفاده میکنم :
کد:/*------------------------------------------------------------------------------- www.ECA.ir LPC1768 Dev Board Rev.A --------------------------------------------------------------------------------*/ #include "lpc17xx.h" /* LPC17xx definitions */ #include "uart.h" #define FOSC 12000000 /* Oscillator frequency */ #define FCCLK (FOSC * 8) /* Master clock frequency <= 100Mhz */ /* Multiples of FOSC */ #define FCCO (FCCLK * 3) /* PLL frequency (275Mhz ~ 550Mhz) */ /* And FCCLK the same or an even multiple of its */ #define FPCLK (FCCLK / 4) /* Peripheral clock frequency, FCCLK 1 / 2, 1 / 4*/ /* The same or FCCLK */ #define UART0_BPS 115200 /* 0 Serial communication baud rate */ #define UART2_BPS 115200 /* 2 serial communication baud rate */ /********************************************************************************************************* ** Function name: UART0_Init ** Descriptions: By default initialize the serial port 0 pins and communication parameters. Set to 8 data bits, 1 stop bit, no parity ** input parameters: No ** output parameters: No ** Returned value: No *********************************************************************************************************/ void UART0_Init (void) { uint16_t usFdiv; /* UART0 */ LPC_PINCON->PINSEL0 |= (1 << 4); /* Pin P0.2 used as TXD0 (Com0) */ LPC_PINCON->PINSEL0 |= (1 << 6); /* Pin P0.3 used as RXD0 (Com0) */ LPC_UART0->LCR = 0x83; /* Allows you to set the baud rate */ usFdiv = (FPCLK / 16) / UART0_BPS; /* Set baud rate */ LPC_UART0->DLM = usFdiv / 256; LPC_UART0->DLL = usFdiv % 256; LPC_UART0->LCR = 0x03; /* Locked baud rate */ LPC_UART0->FCR = 0x06; } /********************************************************************************************************* ** Function name: UART0_SendByte ** Descriptions: send data from serial port 0 ** Input parameters: data: data sent ** Output parameters: None ** Returned value: None *********************************************************************************************************/ int UART0_SendByte (int ucData) { while (!(LPC_UART0->LSR & 0x20)); return (LPC_UART0->THR = ucData); } /*---------------------------------------------------------------------------- Read character from Serial Port (blocking read) *----------------------------------------------------------------------------*/ int UART0_GetChar (void) { while (!(LPC_UART0->LSR & 0x01)); return (LPC_UART0->RBR); } /********************************************************************************************************* Write character to Serial Port ** Function name: UART0_SendString ** Descriptions: send a string to the serial port ** Input parameters: s: pointer to send the string ** Output parameters: None ** Returned value: None *********************************************************************************************************/ void UART0_SendString (unsigned char *s) { while (*s != 0) { UART0_SendByte(*s++); } } void UART0_SendChar(uint16_t disp) { uint16_t dispbuf[4]; uint8_t i; dispbuf[3] = disp%10 + '0'; dispbuf[2] = disp/10%10 + '0'; dispbuf[1] = disp/10/10%10 + '0'; dispbuf[0] = disp/10/10/10%10 + '0'; for(i=0;i<4;i++) UART0_SendByte(dispbuf[i]); } /********************************************************************************************************* ** Function name: UART2_Init ** Descriptions: by default initialize the serial port 2 pins and communication parameters. Set to 8 data bits, 1 stop bit, no parity ** Input parameters: None ** Output parameters: None ** Returned value: None *********************************************************************************************************/ void UART2_Init (void) { uint16_t usFdiv; /* UART2 */ LPC_PINCON->PINSEL0 |= (1 << 20); /* Pin P0.10 used as TXD2 (Com2) */ LPC_PINCON->PINSEL0 |= (1 << 22); /* Pin P0.11 used as RXD2 (Com2) */ LPC_SC->PCONP = LPC_SC->PCONP|(1<<24); /*Open UART2 power control bit */ LPC_UART2->LCR = 0x83; /* Allows you to set the baud rate */ usFdiv = (FPCLK / 16) / UART2_BPS; /* Set baud rate */ LPC_UART2->DLM = usFdiv / 256; LPC_UART2->DLL = usFdiv % 256; LPC_UART2->LCR = 0x03; /* Locked baud rate */ LPC_UART2->FCR = 0x06; } /********************************************************************************************************* ** Function name: UART2_SendByte ** Descriptions: send data from serial port 2 ** Input parameters: data: data sent ** Output parameters: None ** Returned value: None *********************************************************************************************************/ int UART2_SendByte (int ucData) { while (!(LPC_UART2->LSR & 0x20)); return (LPC_UART2->THR = ucData); } /*---------------------------------------------------------------------------- Read character from Serial Port (blocking read) *----------------------------------------------------------------------------*/ int UART2_GetChar (void) { while (!(LPC_UART2->LSR & 0x01)); return (LPC_UART2->RBR); } /********************************************************************************************************* ** Write character to Serial Port ** Function name: UART2_SendString ** Descriptions: send a string to the serial port ** Input parameters: s: pointer to send the string ** Output parameters: None ** Returned value: None *********************************************************************************************************/ void UART2_SendString (unsigned char *s) { while (*s != 0) { UART2_SendByte(*s++); } } void UART2_SendChar(uint16_t disp) { uint16_t dispbuf[4]; uint8_t i; dispbuf[3] = disp%10 + '0'; dispbuf[2] = disp/10%10 + '0'; dispbuf[1] = disp/10/10%10 + '0'; dispbuf[0] = disp/10/10/10%10 + '0'; for(i=0;i<4;i++) UART2_SendByte(dispbuf[i]); }
ویرایش توسط soodi : 04-08-2013 در ساعت 21:07
سلام
من که تا حالا با mini programer کویر به عنوان سخت افزار بین میکرو و pc استفاده می کردم مشکلی به وجود نیومده
در موردی که دارید از lcd تاچ برد استفاده می کنید باید دقت شود پایه برای کار دیگری استفاده نشود
من برای استفاده همزمان از تایمر و کانتر و سریال و lcd برد کویر از پایه های زیر استفاده می کنم:
· کانتر 0 و 1 پایه های p1.26 و p1.18· تایمر mat 2 و 3 پایه های p4.28 و p0.10· پورت سریال1: دریافت پایه p0.16 ارسال پایه p0.15· وقفه خارجی 0 p2.10
خیلی ممنون
درسته ، فکر کنم مشکل از سخت افزار باشه
یعنی مبدل USB/Serial خرابه یا مدارات واسط
پس یدونه Mini Lpc بخرم دیگه نیاز با آیسی Max هم نیست ؟
نه دیگه نیست مستقیم از خروجی Tx و Rx و Gnd میکرو میدید بهش و اونورشم میزنید به usb کامپیوترتون که با نصب درایورش (اگه مبدلتان داشته باشه) یه com می شناسه
سلام
من سخت افزارم رو چک کردم ، حتی MAX232 هم تعویض کردم
با یک مبدل USB به سریال دیگه هم امتحان کردم ولی نتایج همون :
7ÛºþÙ6ûß ¶7û¾û ö~7ú þ Ùý»ûÛû ¶?7û û ö~7úãþ Ùý»ûïûý¶?7 ˜ß ö~þ
Ï Ùý» »ûýô?7ß÷þÙ6þÓ Ùý» ûû ô~7ß¾þ Ùý» ß ¶7 ¼û ö~7þïþ Ùý»ã¸û ¶?7ãî
هست
ماژول EM-18 رو هم متصل کردم به سخت افزارم و روی Hyper Terminal دقیقا درست جواب میداد و نتایج نمایش داده میشد به درستی
فکر کنم مشکل از میکرو هست !!!!
کجا رو باید چک کنم ؟ سخت افزار ؟ نرم افزار ؟
با سپاس
آقا این uart داره دیوونم میکنه !!!!!!
سخت افزار و نرم افزار همه چی درسته !!!!
نمیدونم میکرو چرا چرت و پرت میفرسه !!!!!!!!
سلام
من آموزش ها را یکی از همکاران گرفته بود به طور اتفاقی یک قسمت را دیدم ، نظر خودم را می گویم ، انشااله مفید باشد ، بیشتر جنیه انتقادی دارد ، اما سعی کردم واقع بین باشم
من قسمت uart را حدودا دیدم ،به نظر این قسمت ضعیف کار شده است (بقیه قسمت ها را ندیدم) ، صدا گوینده سرما خورده و بی حال است ، فیلم به شدت کند است و آرام پیشرفت می کند ، و کمی حوصله سربر!
شما می توانستید حداقل صفحات رجیستر ها را بوکمارک کنید تا اینقدر دنبال رجیستر ها نگردید و راه حل های دیگر ...
روال خاصی در تدریس نیست! یک هدر فایل توضیح داده می شود!
به نظر بهتر هست سریع از اول کد های مربوطه نوشته میشد ، مثل همان روال دیتاشیت ، تا روال فهم منطقی طی گردد ، و اشتباهات و خطاها معلوم گردد
با تشکر از زحمتتان
سلام
UART درست شد ، البته با تغییر در :
کد:#define FOSC 13000000 /* Oscillator frequency */
که 12000000 بود و تغییرش دادم 13000000 گفتم شاید به دلیلش کیفیت پایین کریستال باشه
ولی کریستال رو هم عوض کردم باز هم با 12000000 جواب نداد
بیخیال حالا داره با 13 جواب میده فعلا !!!!!!
میخام یه برنامه بنویسم که یه فرکانس 50 هرتز با پریود 1 تا 2 میلی ثانیه رو بخونه
این برنامه آماده بود :
من هم تغییرش دادم به این ولی فقط عدد 116 رو نشون میده !!!!کد:------------------------------------ 'counter until 8 mhz 'برنامه نویسی میکروکنترلرها '88/5/21 '------------------------------------- $regfile = "m32def.dat" $crystal = 8000000 '---------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = _ Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 Cursor Off '----------- Config Timer1 = Counter , Edge = Rising Ddrb.1 = 0 Portb.1 = 1 '------- Config Timer0 = Timer , Prescale = 1024 '--------------- Enable Timer1 Enable Timer0 Enable Interrupts '--------------------- On Ovf1 Pulse_counter On Ovf0 Yazdkit '------------------- Dim A As Long , B As Byte , I As Long B = 0 '---------------------------- Cls Locate 1 , 1 Lcd "Frequency meter" Locate 2 , 1 Lcd "www.PicPars.com" Wait 5 Cls '----------------------- Start Timer0 '------------ Do Loop End 'end program '-------------- Yazdkit: Incr I If I > 30 Then Stop Timer0 Cls Home A = B * 65536 A = A + Counter1 Lcd "frequency:" Locate 2 , 1 Lcd A ; " HZ" B = 0 I = 0 Counter1 = 0 Start Timer0 End If Return '---------------------- Pulse_counter: Incr B Counter1 = 0 Return
توی یه مدت زمانی که تایمر ایجاد میکنه ، با کانتر شمارش میکنم و نشون میدم :
کد:#include "LPC17xx.h" #include <stdio.h> void Delay (uint32_t Time) { uint32_t i; i = 0; while (Time--) { for (i = 0; i < 5000; i++); } } #define family_lpc17xx #define TFTLCD_DATAPORT_1 #define TFTLCD_DATAPORT_OFFSET 15 #define TFTLCD_CONTROLPORT_2 #define TFTLCD_RST 3 #define TFTLCD_RS 5 #define TFTLCD_CS 4 #define TFTLCD_RD 7 #define TFTLCD_WR 6 #define PORTRAIT #include <tftlcd_functions.h> unsigned int s; char p[100]; void TIMER1_IRQHandler (void) { s=LPC_TIM0->TC; sprintf(p," %i",s); tftlcd_clear(); tftlcd_gotoxy(1,2); tftlcd_putsf("Number:",BLACK,YELLOW,0); tftlcd_gotoxy(8,2); tftlcd_puts(p,RED,WHITE,0); Delay(5000); LPC_TIM0->TC=0; LPC_TIM0->TCR = 2; // reset counter , disable counter LPC_TIM1->IR = 1; /* clear interrupt flag */ return; } int main(){ LPC_GPIO0->FIODIR = 0x1FF8000; LPC_GPIO0->FIOCLR = 0x1FF8000; //timer1 setting LPC_TIM1->CTCR = 0; // set T/C for Timer LPC_TIM1->PR = 0; // no prescale LPC_TIM1->MR0 = 50000000; LPC_TIM1->TCR = 2; // reset counter , disable counter LPC_TIM1->MCR = 3; //when T0MR0 is match with T0TC , this register generate interrupt and reset counter(T0TC) LPC_TIM0->CTCR = 0x01; // set T/C for Counter Rising edge; // set T/C for Timer LPC_TIM0->PR = 0; // no prescale LPC_TIM0->MR0 = 500; LPC_TIM0->TCR = 2; // reset counter , disable counter LPC_TIM0->MCR = 2; //when T0MR0 is match with T0TC , this register generate interrupt and reset counter(T0TC) LPC_PINCON->PINSEL3 = 0x00300000; // -------------- interupt seting ---------------- NVIC_SetPriority(TIMER1_IRQn,0); /* Default priority group 0, can be 0(highest) - 31(lowest) */ NVIC_EnableIRQ(TIMER1_IRQn); /* Enable Timer0 Interrupt */ tftlcd_init(); tftlcd_clear(); tftlcd_gotoxy(1,1); tftlcd_putsf("Wait For Counter !!!",BLACK,YELLOW,0); LPC_TIM1->TCR = 1; //enable counter while(1){ LPC_TIM0->TCR = 1; //enable counter } }
سلام
2 تا سوال دارم
1 . پست بالایی که فقط عدد 116 رو نشون میده ؟؟؟ اصلا برای خوندم فرکانس و پریود کار درستی کردم ؟؟؟
2 . تابع زیر رو میخاهم به صورتی تغییر بدم که بتونم تعداد کاراکتر های رشته رو مشخص کنم وقتی رسید به اون عدد از دریافت خارج بشه
الان وقتی که Enter دریافت شد از دریافت خارج میشه و رشته برگردونده میشه
کد:int UART0_Getstring (unsigned char *str) { int i = 0; unsigned char *temp = str; do{ *temp = UART0_GetChar(); i++; }while(*(temp++) != 0x0D); *(temp-1) = 0; return i; }
سلام. دوست من از این که فرصت اشکال زدایی برنامت رو ندارم معذرت میخام.نکته ای که تو پست بالا به ذهنم رسید اینه که اشکال قطعا از کریستالت نیست از مقدار دهی رجیسترهای تنطیم بادریت یا فرکانس کلاک cpu یا تقسیم کننده های جانبیه.و اگه حرف من درست باشه برنامت با تغییر بادریت نباید به درستی کار کنه.پس بهتره یه برنامه قابل اطمینان از هر لحاظ بنویسین.