Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - TaoTao

Pages: 1 ... 10 11 [12]
89
มี 2 คำถาม ที่คาใจอยู่น่ะครับ

ปัญหาแรกนะครับ
โค้ดประมาณนี้ครับ

volatile struct{
  unsigned on :1;
  unsigned count  :3;
}switch;

volatile unsigned char value[3] ={1 , 2 , 3};


void switch_fn(){

for(switch.count=1; switch.count<=6; switch.count++){
value[switch.count] = value[switch.count -1] + value[0];

}

ปรากฎว่า มันบอกผิดพลาด คอมไพล์ ไม่ผ่าน
แต่พอ นำตัวแปร switch.count ออกมาข้างนอก struct
โดยเปลี่ยนเป็น unsigned char i;
for(i=1; i<=6; i++){ }
 มันถึงยอมน่ะครับ

ทำไมมันไม่ผ่านน่ะครับ

ที่อยากใช้ ตัวแปร เป็น struct
เพราะว่า มันเป็นหมวดหมู่ดีน่ะครับ จัดการง่าย พิมพ์ง่าย
และก็ กำหนดจำนวน bits ได้ด้วย

คำถามที่ สอง น่ะครับ

จะมีทาง ทำให้
ตัวแปร struct{ }; มีค่า initial ได้เลย โดยการกำหนดทีเดียว ได้เปล่าครับ
ผมลองพิมพ์ อย่างนี้

volatile struct {
unsigned ant=4 :3;
unsigned bat=3 ;6;
}id;

มันก็ไม่ยอมน่ะครับ
แต่พอ เอาการกำหนดค่า initial ออก
คือ =4 และ =3 ออก
ปรากฏว่า ถึงจะ Complies ผ่าน
ทำอย่างไร จึง initial ค่าเริ่มต้น ให้มันได้เลย
เหมือนกับ การ Initial ตัวแปรอื่นๆ ทั่วไปครับ

volatile unsigned char ant=4; // อย่างนี้ มันยอมให้ Complies
แต่มันไม่เป็นหมวดหมู่น่ะครับ

ถามซะยาวเลย อิอิ
ขอบคุณสำหรับคำตอบล่วงหน้าครับ

90
ย่านที่ มันบอกว่า Float เก็บได้ คือ

E min  -126
E max  127
N min   2 กำลัง -126
N max  2 กำลัง 128

งงตรงนี้แหล่ะครับ

คือว่า
อย่างเช่น ถ้าต้องการ
หลังทศนิยม 2 ตำแหน่งในฐานสิบ

ค่าก่อนหน้าทศนิยมนี่ มันจะเก็บได้เท่าไหร่น่ะครับ

ใครพอกระชับ ความเข้าใจตรงนี้ได้บ้างน่ะครับ
อ่านไปอ่านมา งง   @_@!

91
ปัจจุบัน ผมใช้ ล์ pic18F เห็น ES มีเยอะดี
เขียนด้วย MPLAB_X คอมไพด้วย XC8 ครับ

หลังจากผม Code เสร็จ ก็จะ Debug ด้วย Stimulus
ทุกฟังช์ชั่น ก็ผ่าน และเห็น Machine Cycle

แต่ ฟังช์ชั่น Analog to Digital อย่างใน pic18F45k20

เท่าที่ส่องๆ ดู เล่นๆ ดู ใน Stimulus ยังหาไม่เจอว่า จะป้อน ip analog ยังไง
เลยไม่รู้จะ simulate มันได้ยังไง
งานผม สนใจเรื่อง machine cycle มาก เพราะต้องอยู่ในกรอบของ เวลา

งานเสร็จเร็ว ยิ่งดี แต่ pic มันช้า ตัวที่ใช้ แค่ 16MIPs
ตระกูล 24H ได้ 40 แต่เจือกไม่มี EEPROM ขี้เกียจเพิ่ม Memory IC น่ะครับ

ทีนี้ได้ลอง 2 Code นี้

if(flag_timing ==1){

   flag_timing =0;
   ADCON0bits.GODONE =1;
   Sum_ADRES = (ADRESH <<8) + (ADRESL);
   LED1 = 1;
}

กับอีก Code คือ :

if(flag_timing ==1){

   flag_timing =0;
   while (ADCON0bits.GODONE == 1){};
   Sum_ADRES = (ADRESH <<8) + (ADRESL);
   LED1 = 1;
}


หลังจากทดลองบนบอร์ดจริงๆ
โดยให้มันรับ ค่า จาก Potenchometer
เมื่อ ทดลองบิดลูกบิดไปมา
ผลลัพจากการต่อวงจรจริง
LED ติดสว่างตามตำแหน่งที่มือหมุนไปทั้ง 2 Code เลย

Code จริงๆส่วน นี้  ยาวกว่านี้มากครับ
LED ที่ติดสว่าง ซึ่งมีหลายดวง
ผมให้มัน ติด ตามตำแหน่ง ของลูกบิด ที่มือหมุนไป

Code ที่ผมตั้งใจจะเอามาใช้งานจริง
คือ Code ล่างครับ

แต่คำถาม คือ
หาก มันกำลังคำนวน while (ADCON0bits.GODONE ==1 )
ซึ่ง ผมคำนวณเวลาตาม ดาต้าชีท ได้ ร้อยกว่า Machine_Cycle แหน่ะ

คำถาม คือ หาก Loop while ยังไม่เสร็จ แล้วมี interrupt โผล่มา
หลังจาก interrupt เสร็จ จะเป็นอย่างไรน่ะครับ

1. มันมาคิด while loop ต่อจากเดิม ให้เสร็จ หรือ
2. คำนวน ADCON ใหม่เลย หรือ
3. ข้ามไปเลย ไปทำงานอื่นๆ

เขียนมาตั้งยาว ถามสั้นๆ แต่สงสัยจริงๆน่ะครับ
เพราะตอนนี้ Stimulus มันไม่ได้ ไม่รู้จะรู้ Machine_Cycle แท้จริงได้อย่างไง

หรือ ใครมีวิธี Stimulus ADCON ได้
รบกวนด้วยน่ะครับ
ขอบคุณล่วงหน้าครับ

Pages: 1 ... 10 11 [12]