Title: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค$ Post by: We go on April 05, 2013, 05:03:58 PM งานของผมใช้โปรแกรม MPLAB ในการเขียน และใช้ CCS เป็น Compiler ครับ
การทำงานของโปรแกรมคือ ผมต้องการให้ PIC18F887 ทำการ Random output ใน portD ซึ่งรูปแบบ Output ที่ผมต้องการมีอยู่ 8 รูปแบบคือ {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ผมต้องการให้ PIC ทำการ Random output ใน portD แค่ 8 รูปแบบนี้ ผมสามารถใช้ฟังก์ชั่น rand() ในการ Random รูปแบบได้ไหมครับ แล้วผมต้องใช้ฟังก์ชั่นอะไรเพิ่มหรือเปล่าครับ ขอบคุณครับ Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: MicroX on April 05, 2013, 07:10:17 PM ใช้ฟังก์ชัน rand() กับ srand() ได้ครับ ดูคำสั่งใน Help ของ CCS
สร้างค่า {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} เป็น array 0-7 โดยตั้งค่า Ran_MAX=7 แล้วนำค่าที่ได้ไปชี้มันออกมาก Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: Hanajiji on April 06, 2013, 03:19:43 AM 2ยกกำลัง(Rand()%8) แบบนี้ได้ป่าวคับ ;D
Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: We go on April 06, 2013, 07:49:14 AM ขอบคุณสำหรับคำแนะนำนะครับ พอดีตอนนี้อยู่ต่างจังหวัด
เดี๋ยวกลับไปผมจะลองทำดู แล้วจะมารายงานผลนะครับ ;D Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: We go on April 08, 2013, 12:11:13 AM ผมลองเขียนโค้ดแล้วครับเป็นประมาณนี้
#include <16F887.h> #include <STDLIB.H> #fuses INTRC_IO,NOWDT,NOPROTECT,MCLR,NOBROWNOUT,XT #use delay(clock=4000000) //Set your clock speed void main(){ while(true){ unsigned int i[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; srand(10); i=rand(); output_d(i); delay_ms(100); } } แต่ผลที่ได้มันเป็นไฟค้างที่ PORTD1,2,5 แบบในรูปด้านล่างครับ มันไม่ Random ผมต้องแก้ตรงไหนหรือเพิ่มส่วนไหนหรอครับ (http://upic.me/i/80/screenshot46.png) ขอบคุณครับ Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: Hanajiji on April 08, 2013, 12:46:18 PM ลองแบบของผมๆๆ
Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: We go on April 08, 2013, 05:30:27 PM ลองแบบของผมๆๆ ผมลองใส่ในบรรทัดนี้ ถูกรึเปล่าครับ เพราะผมลองไว้ที่อื่นมัน Build Fail หมดเลยอ่ะครับ #include <16F887.h> #include <STDLIB.H> #fuses INTRC_IO,NOWDT,NOPROTECT,MCLR,NOBROWNOUT,XT #use delay(clock=4000000) //Set your clock speed void main(){ while(true){ unsigned int i[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; srand(10); i=(rand()%8); output_d(i); delay_ms(100); } } แล้วผลที่ได้เป็นไฟค้างแบบรูปด้านบนเลย แหะๆ :'( ผมควรทำไงดีครับ Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: Hanajiji on April 08, 2013, 11:41:50 PM ของผม Xtal 20MHz นะครับ ถ้าเป็น 4 MHz ก็ลองปรับๆโค้ดดู โค้ดนี้ผมลองซิมแล้วได้ผล
Code: #include <16F887.H> Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: We go on April 09, 2013, 01:03:10 PM #include <16F887.H> #include <MATH.H> #include <STDLIB.H> #fuses HS, NOWDT, BROWNOUT, NOPUT , NOLVP #use delay(clock=20000000) #use fast_io(D) void main() { int i=0; setup_adc(adc_off); set_tris_d(0x00); output_d(0x00); while(TRUE) { i = pow(2,rand()%8); output_d(i); delay_ms(1000); } } ทำได้แล้วครับ :o ขอบคุณมากครับ แต่ผมยังไม่ค่อยเข้าใจหลักการณ์ทำงานของโค้ดเลยครับ ผมจะศึกษาดูนะครับ ;D Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: Hanajiji on April 09, 2013, 01:30:09 PM ไม่มีไรมากคับค่าที่แรนด้อมอะไรมาได้ก้อตาม จะเอามาหารด้วยแปดแล้วหาเศษ เศษที่ได้จากการหารจะเป็น 0-7 แบบแรนด้อมโดยอัตโนมัติ
ลองเอา 2 ยกกำลัง 0 มาแปลงเปนฐาน 16 จะได้ 0x01 2 ยกกำลัง 1 ได้ 0x02 ถึง 2 ยกกำลัง 7 ได้ 0x80 ส่งออกพอรตจะได้ค่าอย่างที่ต้องการ จบแล่ว ห้าๆๆ สั้นมั้ย Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: We go on April 09, 2013, 08:13:03 PM อ่อ เป็นอย่างนี้นี่เอง คือเรา random ที่เลขยกกำลัง
แล้วแปลงจากที่ 2 ยกกำลังให้เป็นฐาน 16 เข้าใจแล้วครับ ผมคิดเท่าไหร่ก็คิดไม่ออก จนมาตอนนี้เพิ่งกระจ่างครับ ตอนแรกผมคิดว่าต้องใส่โค้ดเยอะมาก แต่ก็ทำออกมาไม่ได้ซักที ผมอยากคิดได้เร็วเหมือนคุณบ้างเลย พอมีเทคนิคทำไงให้คิดได้ออกมาง่ายบ้างครับ :o แล้วก็ขอบคุณทุกคำตอบครับ ช่วยผมได้เยอะมาก ต่างจากเดิมที่ผมแทบไม่รู้เรื่องเลยครับ ;D Title: Re: ขอคำแนะนำการใช้ function rand() ภาษา C โดยใช้ CCS Compiler หน่อยค Post by: Hanajiji on April 11, 2013, 12:17:10 PM พื้นฐาน math ม.4 ลำดับและอนุกรม ;D
|